day 15: improve solution spaghettiness somewhat

This commit is contained in:
xenia 2020-12-15 00:27:14 -05:00
parent 4888c7dd40
commit 8b17fe1d26
1 changed files with 11 additions and 10 deletions

21
15.rkt
View File

@ -6,20 +6,21 @@
(define (naive-solution input limit)
(define seen-numbers (make-hash))
(define prev #f)
(for ([num (in-list input)] [i (in-naturals)])
(hash-set! seen-numbers num i)
(set! prev num))
(define prev
(for/last ([num (in-list input)] [i (in-naturals)])
(hash-set! seen-numbers num i)
num))
;; delay "seeing" numbers by one iteration
(hash-remove! seen-numbers prev)
(for ([i (in-range (length input) limit)])
(for/fold ([prev prev]) ([i (in-range (length input) limit)])
(define new-val
(cond
[(hash-has-key? seen-numbers prev) (sub1 (- i (hash-ref seen-numbers prev)))]
[else 0]))
(match (hash-ref seen-numbers prev #f)
[#f 0]
[idx (- i 1 idx)]))
;; _now_ we've "seen" it, but it happened on the last turn
(hash-set! seen-numbers prev (sub1 i))
(set! prev new-val))
prev)
new-val))
(define part1 #{naive-solution % 2020})
(define part2 #{naive-solution % 30000000})