Refactored Day 16 again...
This commit is contained in:
parent
6e1c143815
commit
a6fecd88ce
28
src/16.rkt
28
src/16.rkt
|
@ -23,28 +23,26 @@
|
||||||
|
|
||||||
(define part1
|
(define part1
|
||||||
(for*/sum ([ticket tickets]
|
(for*/sum ([ticket tickets]
|
||||||
[field ticket])
|
[field ticket]
|
||||||
(if (any-valid-ranges/c field) 0 field)))
|
#:unless (any-valid-ranges/c field))
|
||||||
|
field))
|
||||||
|
|
||||||
(define part2
|
(define part2
|
||||||
(let ([fields (length ticket)])
|
(let ([fields (length ticket)]
|
||||||
|
[valid-tickets (filter #{andmap any-valid-ranges/c %} tickets)])
|
||||||
(define valid-ranges-fields
|
(define valid-ranges-fields
|
||||||
(for*/fold ([valid-ranges-fields (make-list fields (range fields))])
|
(for*/fold ([valid-ranges-fields (make-list fields '())])
|
||||||
([valid-ticket (filter #{andmap any-valid-ranges/c %} tickets)]
|
([i fields]
|
||||||
[i fields]
|
|
||||||
[j fields])
|
[j fields])
|
||||||
(let ([valid-range/c (list-ref valid-range/cs j)]
|
(if (andmap #{(list-ref valid-range/cs j) (list-ref % i)} valid-tickets)
|
||||||
[valid-range-fields (list-ref valid-ranges-fields j)])
|
(list-update valid-ranges-fields j #{cons i %})
|
||||||
(if (valid-range/c (list-ref valid-ticket i))
|
valid-ranges-fields)))
|
||||||
valid-ranges-fields
|
|
||||||
(list-set valid-ranges-fields j (remove i valid-range-fields))))))
|
|
||||||
(define (solve valid-ranges-fields)
|
(define (solve valid-ranges-fields)
|
||||||
(let ([j (index-where valid-ranges-fields (and/c list? singleton?))])
|
(let ([j (index-where valid-ranges-fields (and/c list? singleton?))])
|
||||||
(if j
|
(if j
|
||||||
(let* ([i (first (list-ref valid-ranges-fields j))]
|
(let* ([i (first (list-ref valid-ranges-fields j))])
|
||||||
[valid-ranges-fields (map #{if (list? %) (remove i %) %}
|
(solve (map #{if (list? %) (remove i %) %}
|
||||||
valid-ranges-fields)])
|
(list-set valid-ranges-fields j i))))
|
||||||
(solve (list-set valid-ranges-fields j i)))
|
|
||||||
valid-ranges-fields)))
|
valid-ranges-fields)))
|
||||||
(apply * (map #{list-ref ticket %}
|
(apply * (map #{list-ref ticket %}
|
||||||
(take (solve valid-ranges-fields) 6)))))
|
(take (solve valid-ranges-fields) 6)))))
|
||||||
|
|
Loading…
Reference in New Issue