Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (use srfi-13)
- (define (kp-up n)
- (cond
- ((or (= n 13) ;;special cases
- (= n 3))
- (- n 2))
- ((or (<= 6 n 8)
- (<= 10 n 12))
- (- n 4))
- (else n)))
- (define (kp-down n)
- (cond
- ((or (= n 1)
- (= n 11))
- (+ n 2))
- ((or (<= 2 n 4)
- (<= 6 n 8))
- (+ n 4))
- (else n)))
- (define (kp-left n)
- (if (or (= n 1)
- (= n 2)
- (= n 5)
- (= n 10)
- (= n 13))
- n
- (- n 1)))
- (define (kp-right n)
- (if (or (= n 1)
- (= n 4)
- (= n 9)
- (= n 12)
- (= n 13))
- n
- (+ n 1)))
- (define (kp-move dir n)
- (case dir
- ((#\U) (kp-up n))
- ((#\D) (kp-down n))
- ((#\L) (kp-left n))
- ((#\R) (kp-right n))
- (else n)))
- (define (get-num str startpos)
- (string-fold (lambda (dir pos)
- (kp-move dir pos)) startpos str))
- (define (get-code-from-file filename)
- (with-input-from-file filename
- (lambda ()
- (let loop ((line (read-line))
- (pos 5)
- (code ""))
- (if (eof-object? line)
- code
- (let ((nexkey (get-num line pos)))
- (loop (read-line)
- nexkey
- (string-append/shared code
- (number->string nexkey 16)))))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement