Day 23: Keep track of whether elves have moved instead of doing set comparisons
This commit is contained in:
parent
91f27e746f
commit
a6e8936f7f
|
@ -7,4 +7,4 @@ Approximate execution times of the hardest problems, compiled with `raco exe`.
|
||||||
| 15 | 3.81 |
|
| 15 | 3.81 |
|
||||||
| 16 | 20.6 |
|
| 16 | 20.6 |
|
||||||
| 19 | 75.7 |
|
| 19 | 75.7 |
|
||||||
| 23 | 15.8 |
|
| 23 | 14.0 |
|
||||||
|
|
13
src/23.rkt
13
src/23.rkt
|
@ -67,14 +67,17 @@
|
||||||
(hash-update ps (apply (propose elves r) elf) #{cons elf %} '())))
|
(hash-update ps (apply (propose elves r) elf) #{cons elf %} '())))
|
||||||
|
|
||||||
(define (round elves r)
|
(define (round elves r)
|
||||||
(for/fold ([elves* (set)])
|
(for/fold ([elves* (set)]
|
||||||
|
[moved? #f])
|
||||||
([(p es) (proposals elves r)])
|
([(p es) (proposals elves r)])
|
||||||
(match es
|
(match es
|
||||||
[`(,e1 ,e2) (set-add (set-add elves* e1) e2)]
|
[`(,e1 ,e2) (values (set-add (set-add elves* e1) e2) moved?)]
|
||||||
[`(,e) (set-add elves* p)])))
|
[`(,e) #:when (not (equal? p e)) (values (set-add elves* p) #t)]
|
||||||
|
[`(,e) (values (set-add elves* p) moved?)])))
|
||||||
|
|
||||||
(define part1
|
(define part1
|
||||||
(for/fold ([elves elves]
|
(for/fold ([elves elves]
|
||||||
|
[_ #f]
|
||||||
#:result (grounds elves))
|
#:result (grounds elves))
|
||||||
([r (in-range 10)])
|
([r (in-range 10)])
|
||||||
(round elves r)))
|
(round elves r)))
|
||||||
|
@ -82,7 +85,7 @@
|
||||||
(define part2
|
(define part2
|
||||||
(let loop ([elves elves]
|
(let loop ([elves elves]
|
||||||
[r 1])
|
[r 1])
|
||||||
(define elves* (round elves r))
|
(define-values (elves* moved?) (round elves r))
|
||||||
(if (set=? elves elves*) (add1 r) (loop elves* (add1 r)))))
|
(if moved? (loop elves* (add1 r)) (add1 r))))
|
||||||
|
|
||||||
(show-solution part1 part2)
|
(show-solution part1 part2)
|
Loading…
Reference in New Issue