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