aboutsummaryrefslogtreecommitdiff
path: root/2021/day-21
diff options
context:
space:
mode:
authorHunky Jimpjorps <thechairman@thechairman.info>2022-11-26 01:43:33 -0500
committerHunky Jimpjorps <thechairman@thechairman.info>2022-11-26 01:43:33 -0500
commitfeccf3f6f0a806b3317d1f399e3e8b42945c4f09 (patch)
treebf15ce045d1106c1b7f7de30c27540f40d0bf947 /2021/day-21
parent8b624fe7d2751337b1f16830cc9c041df73e99e7 (diff)
downloadgleam_aoc-feccf3f6f0a806b3317d1f399e3e8b42945c4f09.tar.gz
gleam_aoc-feccf3f6f0a806b3317d1f399e3e8b42945c4f09.zip
using raco fmt, replacing missing dependency
Diffstat (limited to '2021/day-21')
-rw-r--r--2021/day-21/day-21.rkt58
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))