36 lines
1007 B
Racket
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"))
|