(ns advent-2020-15) (def seed [1,2,16,19,18,0]) (defn next-num [[data [i n]]] [(assoc data n i) [(inc i) (- i (data n i))]]) (defn nth-num [seed n] (->> [(into {} (map vector (butlast seed) (range))) [(dec (count seed)) (last seed)]] (iterate next-num) (map second) (drop-while #(< (first %) (dec n))) first)) ;; part 1 (nth-num seed 2020) ;; part 2 (nth-num seed 30000000)