Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (use srfi-1 srfi-13 srfi-14 irregex)
- (define (convert-data str)
- (list (irregex-match-substring
- (irregex-search '(: bos (* (* alpha) "-") (+ alpha)) str))
- (string->number
- (irregex-match-substring
- (irregex-search '(+ num) str)))
- (irregex-match-substring
- (irregex-search '(: "[" (=> num (* alpha)) "]" eos) str) 'num)))
- (define (get-checksum str)
- (list->string
- (map car (take
- (sort (string-fold
- (lambda (char sums)
- (let ((x (assoc char sums)))
- (cond (x (set-cdr! x (+ 1 (cdr x))) sums)
- (else (cons (cons char 1) sums)))))
- '() (string-delete #\- str))
- (lambda (a b)
- (if (= (cdr a) (cdr b))
- (< (char->integer (car a)) (char->integer (car b)))
- (> (cdr a) (cdr b))))) 5))))
- (define (filter-valid-rooms file)
- (with-input-from-file file
- (lambda ()
- (let loop ((line (read-line))
- (vrooms '()))
- (if (eof-object? line)
- vrooms
- (let ((rec (convert-data line)))
- (if (string=? (caddr rec) (get-checksum (car rec)))
- (loop (read-line) (cons rec vrooms))
- (loop (read-line) vrooms))))))))
- (define (decrypt str shift)
- (string-map (lambda (char)
- (if (equal? char #\-)
- #\space
- (integer->char (+ (char->integer #\a)
- (modulo (+ shift (- (char->integer char)
- (char->integer #\a)))
- 26)))))
- str))
Add Comment
Please, Sign In to add comment