diff options
Diffstat (limited to 'password-philosophy/pp.scm')
-rw-r--r-- | password-philosophy/pp.scm | 30 |
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." |