40 lines
875 B
Scheme
40 lines
875 B
Scheme
(define (position-increment n)
|
|
(cond
|
|
((= n 1) '( 0 . 17))
|
|
((= n 2) '( 1 . -17))
|
|
((= n 4) '( 0 . 11))
|
|
((= n 10) '( 1 . -17))
|
|
((= n 12) '( 0 . 11))
|
|
((= n 18) '( 1 . -17))
|
|
((= n 36) '( 1 . -17))
|
|
((= n 54) '( 1 . -17))
|
|
((= n 56) '( 2 . 2))
|
|
((= n 71) '(-2 . -14))
|
|
((= n 86) '( 1 . -17))
|
|
((= n 88) '( 2 . 2))
|
|
((= n 103) '(-2 . -14))
|
|
(else '( 0 . 1))))
|
|
|
|
(define (move p i)
|
|
(cons (+ (car p) (car i))
|
|
(+ (cdr p) (cdr i))))
|
|
|
|
(define (position n)
|
|
(if (= n 1)
|
|
'(1 . 1)
|
|
(let ((m (- n 1)))
|
|
(move (position m)
|
|
(position-increment m)))))
|
|
|
|
(define (format-line n p)
|
|
(display n)
|
|
(display " -> ")
|
|
(display (car p))
|
|
(display " ")
|
|
(display (cdr p))
|
|
(newline))
|
|
|
|
(for-each (lambda (n)
|
|
(format-line n (position n)))
|
|
(list 1 2 29 42 57 58 72 89))
|