aoc2023/9.rkt

36 lines
1007 B
Racket

#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"))