#lang curly-fn racket (require "scripts/aoc.rkt") ;; solution for day 15 (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)) (hash-remove! seen-numbers prev) (for ([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])) (hash-set! seen-numbers prev (sub1 i)) (set! prev new-val)) prev) (define part1 #{naive-solution % 2020}) (define part2 #{naive-solution % 30000000}) ;; parse input file (define (parse fname) (define input (string-trim (file->string fname))) (map string->number (string-split input ","))) (module+ test (require rackunit) ;; tests here (displayln "no tests :(")) (module+ main (define input (parse "inputs/15")) (answer 15 1 (time (part1 input))) (answer 15 2 (time (part2 input))) (displayln "meow"))