-
Notifications
You must be signed in to change notification settings - Fork 0
/
euler18.rkt
25 lines (23 loc) · 1.02 KB
/
euler18.rkt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#lang racket
(define pyramid (list
'(75)
'(95 64)
'(17 47 82)
'(18 35 87 10)
'(20 04 82 47 65)
'(19 01 23 75 03 34)
'(88 02 77 73 07 63 67)
'(99 65 04 28 06 16 70 92)
'(41 41 26 56 83 40 80 70 33)
'(41 48 72 33 47 32 37 16 94 29)
'(53 71 44 65 25 43 91 52 97 51 14)
'(70 11 33 28 77 73 17 78 39 68 17 57)
'(91 71 52 38 17 14 91 43 58 50 27 29 48)
'(63 66 04 68 89 53 67 30 73 16 69 87 40 31)
'(04 62 98 27 23 09 70 98 73 93 38 53 60 04 23)))
(define (euler18 [lst (reverse pyramid)] [temp empty] [ref 0])
(cond
[(= (length lst) 1) (caar lst)]
[(> ref (- (length (car lst)) 2)) (euler18 (cons temp (cddr lst)))]
[else (euler18 lst (append temp (list (+ (list-ref (cadr lst) ref) (max (list-ref (car lst) ref) (list-ref (car lst) (add1 ref)))))) (add1 ref))]))
(euler18)