day 9
parent
a708f18669
commit
61e5bf7d9c
@ -0,0 +1,33 @@
|
||||
#lang br
|
||||
(require racket/file rackunit)
|
||||
|
||||
(define vec (list->vector (map string->number (file->lines "09.rktd"))))
|
||||
|
||||
(define preamble-length 25)
|
||||
|
||||
(define (idx-valid? idx)
|
||||
(define predecessors (for/list ([val (in-vector vec (- idx preamble-length) idx)])
|
||||
val))
|
||||
(define target (vector-ref vec idx))
|
||||
(for/or ([ints (in-combinations predecessors 2)])
|
||||
(eq? (apply + ints) target)))
|
||||
|
||||
(define invalid-number
|
||||
(for/first ([idx (in-range (add1 preamble-length) (vector-length vec))]
|
||||
#:unless (idx-valid? idx))
|
||||
(vector-ref vec idx)))
|
||||
|
||||
(check-equal? invalid-number 14144619)
|
||||
|
||||
(check-equal?
|
||||
(for/or ([lidx (in-range 0 (vector-length vec))])
|
||||
(let/ec skip-to-next-lidx
|
||||
(for/or ([ridx (in-range (add1 lidx) (vector-length vec))])
|
||||
(define ints (for/list ([val (in-vector vec lidx (add1 ridx))])
|
||||
val))
|
||||
(define sum (apply + ints))
|
||||
(cond
|
||||
[(> sum invalid-number) (skip-to-next-lidx #false)]
|
||||
[(eq? sum invalid-number) (+ (apply min ints) (apply max ints))]
|
||||
[else #false]))))
|
||||
1766397)
|
File diff suppressed because it is too large
Load Diff
Reference in New Issue