diff --git a/2020/15.rkt b/2020/15.rkt new file mode 100644 index 0000000..1b65b9a --- /dev/null +++ b/2020/15.rkt @@ -0,0 +1,18 @@ +#lang br +(require racket/file rackunit) + +(define (solve str max-turns) + (define nums (map string->number (string-split str ","))) + (define previously-seen (make-hasheq)) + (for ([(num turn) (in-indexed (drop-right nums 1))]) + (hash-set! previously-seen num (add1 turn))) + (for/fold ([last-seen (last nums)]) + ([turn (in-range (add1 (length nums)) (add1 max-turns))]) + (begin0 + (match (hash-ref previously-seen last-seen #false) + [#false 0] + [where-previously-seen (- (sub1 turn) where-previously-seen)]) + (hash-set! previously-seen last-seen (sub1 turn))))) + +(check-equal? (solve "11,0,1,10,5,19" 2020) 870) +(check-equal? (solve "11,0,1,10,5,19" 30000000) 9136) \ No newline at end of file