Advertisement
Guest User

Untitled

a guest
Dec 7th, 2016
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 2.52 KB | None | 0 0
  1. (use srfi-13 srfi-1 irregex)
  2.  
  3. (define (has-abba? str i)
  4.   (and (not (char=? (string-ref str i)
  5.                     (string-ref str (- i 1))))
  6.        (char=? (string-ref str i)
  7.                (string-ref str (- i 3)))
  8.        (char=? (string-ref str (- i 1))
  9.                (string-ref str (- i 2)))))
  10.  
  11. (define (string-abbas str)
  12.   (let ((abbas '()))
  13.     (string-for-each-index
  14.      (lambda (i)
  15.        (if (and (<= 0 (- i 3)) (has-abba? str i))
  16.            (set! abbas (cons (substring str (- i 3) (+ i 1)) abbas)))) str)
  17.     abbas))
  18.  
  19. (define (has-aba? str i)
  20.   (and (char=? (string-ref str i)
  21.                (string-ref str (- i 2)))
  22.        (not (char=? (string-ref str i)
  23.                     (string-ref str (- i 1))))))
  24.  
  25. (define (string-abas str)
  26.   (let ((abas '()))
  27.     (string-for-each-index
  28.      (lambda (i)
  29.        (if (and (<= 0 (- i 2)) (has-aba? str i))
  30.            (set! abas (cons (substring str (- i 2) (+ i 1)) abas)))) str)
  31.     abas))
  32.  
  33. (define (is-ssl? str)
  34.   (let* ((astrs (irregex-split '(: "[" (* alnum) "]") str))
  35.          (bstrs (irregex-extract '(: "[" (* alnum) "]") str))
  36.          (abas (flatten (map string-abas astrs)))
  37.          (babs (flatten (map string-abas bstrs))))
  38.     (not (null?
  39.           (flatten
  40.            (filter
  41.             (lambda (bab)
  42.               (fold
  43.                (lambda (a b) (or a b)) #f    
  44.                (map (lambda (aba)
  45.                       (and (char=? (string-ref bab 0)
  46.                                    (string-ref aba 1))
  47.                            (char=? (string-ref bab 1)
  48.                                    (string-ref aba 0)))) abas))) babs))))))
  49.  
  50. (define (is-tls? str)
  51.   (call/cc
  52.    (lambda (ret)
  53.      (let ((astrs (irregex-split '(: "[" (* alnum) "]") str))
  54.            (bstrs (irregex-extract '(: "[" (* alnum) "]") str)))
  55.        (and (not (null? (flatten (map string-abbas astrs))))
  56.             (null? (flatten (map string-abbas bstrs))))))))
  57.  
  58. (define (solvep1 file)
  59.   (with-input-from-file file
  60.     (lambda ()
  61.       (let loop ((l (read-line))
  62.                  (count 0))
  63.         (if (eof-object? l)
  64.             count
  65.             (if (is-tls? l)
  66.                 (loop (read-line) (+ count 1))
  67.                 (loop (read-line) count)))))))
  68.  
  69. (define (solvep2 file)
  70.   (with-input-from-file file
  71.     (lambda ()
  72.       (let loop ((l (read-line))
  73.                  (count 0))
  74.         (if (eof-object? l)
  75.             count
  76.             (if (is-ssl? l)
  77.                 (loop (read-line) (+ count 1))
  78.                 (loop (read-line) count)))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement