/
0018.scm
41 lines (36 loc) · 983 Bytes
/
0018.scm
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
(use srfi-1)
(define datum
'(
(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)
))
;; from 0008.scm
(define (shift-slices ls len)
(unfold (^s (or (null? s)
(< (length s) len)))
(cut take <> len) cdr ls))
(define (sum-of-minimum-triangles above-row bottom-row)
(map (^(a b)
(+ a (max (car b)(cadr b))))
above-row
(shift-slices bottom-row 2)))
(define (sum-max-root datum)
(let rec ((lol (reverse datum)))
(if (null? (cdr lol))
(caar lol)
(rec (cons (sum-of-minimum-triangles (cadr lol)(car lol))
(cddr lol))))))
(print (sum-max-root datum))