Triangle Minimal Path


(= 7 (__ '([1]
          [2 4]
         [5 1 4]
        [2 3 4 5]))) ; 1->2->1->3

(= 20 (__ '([3]
           [2 4]
          [1 9 3]
         [9 9 2 4]
        [4 6 6 7 8]
       [5 7 3 5 1 4]))) ; 3->4->3->2->7->1




((fn f [vs & [i]]
	(let [idx (if (nil? i) 0 i)]
		(if (empty? vs)
			0
			(+ (min (f (rest vs) idx) 
			        (f (rest vs) (inc idx)))
				 (get (first vs) idx)
			)
		)
	)
)
'(          [3]
           [2 4]
          [1 9 3]
         [9 9 2 4]
        [4 6 6 7 8]
       [5 7 3 5 1 4])
)



Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2016-01-30 00:25:13
Processing time 0.0053 sec