diff options
author | Hunky Jimpjorps <thechairman@thechairman.info> | 2022-11-26 01:43:33 -0500 |
---|---|---|
committer | Hunky Jimpjorps <thechairman@thechairman.info> | 2022-11-26 01:43:33 -0500 |
commit | feccf3f6f0a806b3317d1f399e3e8b42945c4f09 (patch) | |
tree | bf15ce045d1106c1b7f7de30c27540f40d0bf947 /2021/day-21/day-21.rkt | |
parent | 8b624fe7d2751337b1f16830cc9c041df73e99e7 (diff) | |
download | gleam_aoc-feccf3f6f0a806b3317d1f399e3e8b42945c4f09.tar.gz gleam_aoc-feccf3f6f0a806b3317d1f399e3e8b42945c4f09.zip |
using raco fmt, replacing missing dependency
Diffstat (limited to '2021/day-21/day-21.rkt')
-rw-r--r-- | 2021/day-21/day-21.rkt | 58 |
1 files changed, 30 insertions, 28 deletions
diff --git a/2021/day-21/day-21.rkt b/2021/day-21/day-21.rkt index 46bbbe2..9ca9b1b 100644 --- a/2021/day-21/day-21.rkt +++ b/2021/day-21/day-21.rkt @@ -20,38 +20,40 @@ #:result (list (min player-1-score player-2-score) (* 3 last-turn))) ([turn-count (in-naturals 1)] [turn-for current-turn] - #:break (or (player-1-score . >= . 1000) - (player-2-score . >= . 1000))) + #:break (or (player-1-score . >= . 1000) (player-2-score . >= . 1000))) (define rolls (apply + (stream->list (stream-take dice 3)))) (match turn-for - ['player-1 (define next-track (stream-tail player-1-track rolls)) - (values (+ player-1-score (stream-first next-track)) next-track - player-2-score player-2-track - (stream-tail dice 3) - turn-count)] - ['player-2 (define next-track (stream-tail player-2-track rolls)) - (values player-1-score player-1-track - (+ player-2-score (stream-first next-track)) next-track - (stream-tail dice 3) - turn-count)])) - (apply * _)) + ['player-1 + (define next-track (stream-tail player-1-track rolls)) + (values (+ player-1-score (stream-first next-track)) + next-track + player-2-score + player-2-track + (stream-tail dice 3) + turn-count)] + ['player-2 + (define next-track (stream-tail player-2-track rolls)) + (values player-1-score + player-1-track + (+ player-2-score (stream-first next-track)) + next-track + (stream-tail dice 3) + turn-count)])) + (apply * _)) ;; part 2 (define d3 (list 1 2 3)) -(define roll-space (~>> (cartesian-product d3 d3 d3) - (map (λ~>> (apply +))))) +(define roll-space (~>> (cartesian-product d3 d3 d3) (map (λ~>> (apply +))))) -(define/memo (next-turns p1-score p2-score p1-start p2-start) - (cond - [(p1-score . >= . 21) '(1 0)] - [(p2-score . >= . 21) '(0 1)] - [else - (for/fold ([wins '(0 0)]) - ([roll (in-list roll-space)]) - (define move-to (add1 (modulo (sub1 (+ roll p1-start)) 10))) - (define possible-wins (next-turns p2-score (+ p1-score move-to) p2-start move-to)) - (list (+ (first wins) (second possible-wins)) - (+ (second wins) (first possible-wins ))))])) +(define/memo + (next-turns p1-score p2-score p1-start p2-start) + (cond + [(p1-score . >= . 21) '(1 0)] + [(p2-score . >= . 21) '(0 1)] + [else + (for/fold ([wins '(0 0)]) ([roll (in-list roll-space)]) + (define move-to (add1 (modulo (sub1 (+ roll p1-start)) 10))) + (define possible-wins (next-turns p2-score (+ p1-score move-to) p2-start move-to)) + (list (+ (first wins) (second possible-wins)) (+ (second wins) (first possible-wins))))])) -(~>> (next-turns 0 0 player-1-start player-2-start) - (apply max))
\ No newline at end of file +(~>> (next-turns 0 0 player-1-start player-2-start) (apply max)) |