#lang curly-fn racket (require "scripts/aoc.rkt") ;; solution for day 9 (define (list-differences lst) (for/list ([a (in-list lst)] [b (in-list (rest lst))]) (- b a))) (define (extrapolate lst [arith-func +] [list-func last] [combine-func append]) (cond [(for/and ([x (in-list lst)]) (zero? x)) lst] [else (define diffs (list-differences lst)) (define next-layer (extrapolate diffs arith-func list-func combine-func)) (combine-func lst (list (arith-func (list-func lst) (list-func next-layer))))])) (define (part1 input) (for/sum ([line (in-list input)]) (last (extrapolate line)))) (define (part2 input) (for/sum ([line (in-list input)]) (first (extrapolate line - first #{append %2 %1})))) (define (parse fname) (for/list ([line (in-list (file->lines fname))]) (map string->number (string-split line)))) (module+ main (define input (parse "inputs/9")) (answer 9 1 (time (part1 input))) (answer 9 2 (time (part2 input))) (displayln "meow"))