Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (use srfi-13 srfi-1 irregex)
- (define (has-abba? str i)
- (and (not (char=? (string-ref str i)
- (string-ref str (- i 1))))
- (char=? (string-ref str i)
- (string-ref str (- i 3)))
- (char=? (string-ref str (- i 1))
- (string-ref str (- i 2)))))
- (define (string-abbas str)
- (let ((abbas '()))
- (string-for-each-index
- (lambda (i)
- (if (and (<= 0 (- i 3)) (has-abba? str i))
- (set! abbas (cons (substring str (- i 3) (+ i 1)) abbas)))) str)
- abbas))
- (define (has-aba? str i)
- (and (char=? (string-ref str i)
- (string-ref str (- i 2)))
- (not (char=? (string-ref str i)
- (string-ref str (- i 1))))))
- (define (string-abas str)
- (let ((abas '()))
- (string-for-each-index
- (lambda (i)
- (if (and (<= 0 (- i 2)) (has-aba? str i))
- (set! abas (cons (substring str (- i 2) (+ i 1)) abas)))) str)
- abas))
- (define (is-ssl? str)
- (let* ((astrs (irregex-split '(: "[" (* alnum) "]") str))
- (bstrs (irregex-extract '(: "[" (* alnum) "]") str))
- (abas (flatten (map string-abas astrs)))
- (babs (flatten (map string-abas bstrs))))
- (not (null?
- (flatten
- (filter
- (lambda (bab)
- (fold
- (lambda (a b) (or a b)) #f
- (map (lambda (aba)
- (and (char=? (string-ref bab 0)
- (string-ref aba 1))
- (char=? (string-ref bab 1)
- (string-ref aba 0)))) abas))) babs))))))
- (define (is-tls? str)
- (call/cc
- (lambda (ret)
- (let ((astrs (irregex-split '(: "[" (* alnum) "]") str))
- (bstrs (irregex-extract '(: "[" (* alnum) "]") str)))
- (and (not (null? (flatten (map string-abbas astrs))))
- (null? (flatten (map string-abbas bstrs))))))))
- (define (solvep1 file)
- (with-input-from-file file
- (lambda ()
- (let loop ((l (read-line))
- (count 0))
- (if (eof-object? l)
- count
- (if (is-tls? l)
- (loop (read-line) (+ count 1))
- (loop (read-line) count)))))))
- (define (solvep2 file)
- (with-input-from-file file
- (lambda ()
- (let loop ((l (read-line))
- (count 0))
- (if (eof-object? l)
- count
- (if (is-ssl? l)
- (loop (read-line) (+ count 1))
- (loop (read-line) count)))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement