Skip to content

Instantly share code, notes, and snippets.

@bhenry
Created June 11, 2010 02:20
Show Gist options
  • Save bhenry/433952 to your computer and use it in GitHub Desktop.
Save bhenry/433952 to your computer and use it in GitHub Desktop.
;;problem 18
(def triangle18-str "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")
(def rows18 (.split triangle18-str "\n"))
;;turn triangle into vector of vectors
(def triangle18
(vec (map #(vec (map (fn [x] (Integer. x)) (.split % " "))) rows18)))
;;problem 67 uses same code below
(def triangle67-str (slurp "triangle.txt"))
(def rows67 (.split triangle67-str "\r\n"))
;;turn triangle into vector of vectors
(def triangle67
(vec (map #(vec (map (fn [x] (Integer. x)) (.split % " "))) rows67)))
;; for 18 and 67 in project euler
(defn max-path-sum
"give it a vector of vectors that form a triangle"
([t] (max-path-sum t (- (count t) 2) (t (dec (count t)))))
([t top bot]
(if (> top 0)
(max-path-sum
t
(dec top)
(vec
(let [row (t top)]
(for [i (range top)]
(+ (row i) (max (bot i) (bot (inc i))))))))
(+ (bot 0) ((t top) 0)))))
(defn prob18 []
(max-path-sum triangle18))
(defn prob67 []
(max-path-sum triangle67))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment