blob: 569c5fb23ee2f920ec75eaced447552534d517fa (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
(def data [5 2 8 16 18 0 1])
(defn doit [n]
(letfn [(rec [lasta lastb last i]
(if (<= i n)
(let [new-last (if (and (lasta last) (lastb last))
(- (lastb last) (lasta last))
0)]
(recur (assoc lasta new-last (lastb new-last))
(assoc lastb new-last i)
new-last
(inc i)))
last))]
(rec {}
(into {} (map-indexed #(vector %2 %1) data))
(last data)
(count data))))
(doit 2019) ; => 517
(doit 30000000) ; => 3303657 slow
|