diff --git a/15.rkt b/15.rkt new file mode 100644 index 0000000..544ac8f --- /dev/null +++ b/15.rkt @@ -0,0 +1,41 @@ +#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"))