summaryrefslogtreecommitdiff
path: root/password-philosophy/pp.scm
diff options
context:
space:
mode:
Diffstat (limited to 'password-philosophy/pp.scm')
-rw-r--r--password-philosophy/pp.scm30
1 files changed, 24 insertions, 6 deletions
diff --git a/password-philosophy/pp.scm b/password-philosophy/pp.scm
index 9431ffa..b1d92d7 100644
--- a/password-philosophy/pp.scm
+++ b/password-philosophy/pp.scm
@@ -3,15 +3,20 @@
#:export (pp
parse-line
count-occurrences
- valid-password?))
+ valid-password-p1?
+ valid-password-p2?))
-(define (pp str)
+(define (pp str p1?)
(count (lambda (x) x)
(map (lambda (line)
(let ((parsed (parse-line line)))
- (valid-password? (car parsed)
- (cadr parsed)
- (caddr parsed))))
+ (if p1?
+ (valid-password-p1? (car parsed)
+ (cadr parsed)
+ (caddr parsed))
+ (valid-password-p2? (car parsed)
+ (cadr parsed)
+ (caddr parsed)))))
(string-split
(string-trim-both str char-set:whitespace)
#\newline))))
@@ -29,7 +34,20 @@ into a workable datastructure:
(cons (car range)
(cadr range)))))
-(define (valid-password? passwd char range)
+(define (valid-password-p2? passwd char range)
+ "Wrapper for valid-password-p1?.
+Prepares the input by indexing RANGE
+into PASSWD, setting that as the new
+PASSWD, and setting RANGE to (1 . 1)
+
+Note the original problem specifies
+that strings are NOT zero-indexed!"
+ (valid-password-p1? (string (string-ref passwd (1- (car range)))
+ (string-ref passwd (1- (cdr range))))
+ char
+ '(1 . 1)))
+
+(define (valid-password-p1? passwd char range)
"Given PASSWD, checks that CHAR appears
within RANGE number of times. RANGE is a
cons pair."