-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path018.clj
More file actions
26 lines (23 loc) · 1022 Bytes
/
018.clj
File metadata and controls
26 lines (23 loc) · 1022 Bytes
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
(def triangle [[75]
[95 64]
[17 47 82]
[18 35 87 10]
[20 4 82 47 65]
[19 1 23 75 3 34]
[88 2 77 73 7 63 67]
[99 65 4 28 6 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 4 68 89 53 67 30 73 16 69 87 40 31]
[ 4 62 98 27 23 9 70 98 73 93 38 53 60 4 23]])
;; (partition 2 1 a) splits a into len(a) - 1 two element tuples.
;; take the max of each tuple.
;; b is the next row of the triangle, and len(b) = len(a) - 1
;; merge the (max (partition a) with b, and repeat by partioning etc the result
;; and merging into the next row
(defn merge-rows[a b]
(map + (map #(apply max %) (partition 2 1 a)) b))
(time (println (reduce merge-rows (reverse triangle))))