about summary refs log tree commit diff
path: root/day15.clj
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