blob: 5eda1eb01e2f4f2fd23d9a4e527da003f9595818 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#lang racket
(require advent-of-code
threading)
(define histories
(for/list ([raw-history (in-lines (open-aoc-input (find-session) 2023 9 #:cache #true))])
(~>> raw-history
string-split
(map string->number))))
(define (constant? xs)
(= 1 (length (remove-duplicates xs))))
(define/match (derivative xs)
[((list a b)) (list (- b a))]
[((list* a b _)) (cons (- b a) (derivative (rest xs)))])
(define (extrapolate xs)
(if (constant? xs)
(car xs)
(+ (last xs) (extrapolate (derivative xs)))))
;; part 1
(~>> histories
(map extrapolate)
(apply +))
;; part 2
(~>> histories
(map (λ~> reverse extrapolate))
(apply +))
|