Advertisement
Guest User

ADVENT OF CODE DAY 2

a guest
Dec 2nd, 2016
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 1.34 KB | None | 0 0
  1. (use srfi-13)
  2.  
  3. (define (kp-up n)
  4.   (cond
  5.    ((or (= n 13) ;;special cases
  6.         (= n 3))
  7.     (- n 2))
  8.    ((or (<= 6 n 8)
  9.         (<= 10 n 12))
  10.     (- n 4))
  11.    (else n)))
  12.  
  13. (define (kp-down n)
  14.   (cond
  15.    ((or (= n 1)
  16.         (= n 11))
  17.     (+ n 2))
  18.    ((or (<= 2 n 4)
  19.         (<= 6 n 8))
  20.     (+ n 4))
  21.    (else n)))
  22.  
  23. (define (kp-left n)
  24.   (if (or (= n 1)
  25.           (= n 2)
  26.           (= n 5)
  27.           (= n 10)
  28.           (= n 13))
  29.       n
  30.       (- n 1)))
  31.  
  32. (define (kp-right n)
  33.   (if (or (= n 1)
  34.           (= n 4)
  35.           (= n 9)
  36.           (= n 12)
  37.           (= n 13))
  38.       n
  39.       (+ n 1)))
  40.  
  41. (define (kp-move dir n)
  42.   (case dir
  43.     ((#\U) (kp-up n))
  44.     ((#\D) (kp-down n))
  45.     ((#\L) (kp-left n))
  46.     ((#\R) (kp-right n))
  47.     (else n)))
  48.  
  49. (define (get-num str startpos)
  50.   (string-fold (lambda (dir pos)
  51.                  (kp-move dir pos)) startpos str))
  52.  
  53.  
  54. (define (get-code-from-file filename)
  55.   (with-input-from-file filename
  56.     (lambda ()
  57.       (let loop ((line (read-line))
  58.                  (pos 5)
  59.                  (code ""))
  60.         (if (eof-object? line)
  61.             code
  62.             (let ((nexkey (get-num line pos)))
  63.               (loop (read-line)
  64.                     nexkey
  65.                     (string-append/shared code
  66.                                           (number->string nexkey 16)))))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement