1
0
Fork 0
adventofcode/src/09.rkt

32 lines
863 B
Racket
Raw Normal View History

2020-12-09 05:49:59 +00:00
#lang racket
(require "../lib.rkt")
(define input (map string->number (problem-input 9)))
2020-12-10 08:42:27 +00:00
(define input* (list->vector input))
2020-12-09 05:49:59 +00:00
2020-12-10 08:42:27 +00:00
(define (pair-sum start end)
(for*/or ([i (range start end)]
[j (range start end)])
(= (vector-ref input* end)
(+ (vector-ref input* i)
(vector-ref input* j)))))
2020-12-09 05:49:59 +00:00
(define part1
2020-12-10 08:42:27 +00:00
(let loop ([start 0] [end 25])
(if (pair-sum start end)
(loop (add1 start) (add1 end))
(vector-ref input* end))))
2020-12-09 05:49:59 +00:00
(define part2
2020-12-10 08:42:27 +00:00
(let loop ([start 0] [end 0] [sum 0])
2020-12-09 05:49:59 +00:00
(cond
[(< sum part1)
2020-12-10 08:42:27 +00:00
(loop start (add1 end) (+ sum (vector-ref input* end)))]
2020-12-09 05:49:59 +00:00
[(> sum part1)
2020-12-10 08:42:27 +00:00
(loop (add1 start) end (- sum (vector-ref input* start)))]
[else (let ([contig (drop (take input end) start)])
(+ (apply min contig) (apply max contig)))])))
2020-12-09 05:49:59 +00:00
(show-solution part1 part2)