aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--2021/day-21/day-21.rkt52
1 files changed, 19 insertions, 33 deletions
diff --git a/2021/day-21/day-21.rkt b/2021/day-21/day-21.rkt
index d2e17b6..46bbbe2 100644
--- a/2021/day-21/day-21.rkt
+++ b/2021/day-21/day-21.rkt
@@ -19,27 +19,21 @@
[last-turn 0]
#:result (list (min player-1-score player-2-score) (* 3 last-turn)))
([turn-count (in-naturals 1)]
- [turn current-turn]
+ [turn-for current-turn]
#:break (or (player-1-score . >= . 1000)
(player-2-score . >= . 1000)))
(define rolls (apply + (stream->list (stream-take dice 3))))
- (cond
- [(equal? turn 'player-1)
- (values (+ player-1-score
- (stream-first (stream-tail player-1-track rolls)))
- (stream-tail player-1-track rolls)
- player-2-score
- player-2-track
- (stream-tail dice 3)
- turn-count)]
- [(equal? turn 'player-2)
- (values player-1-score
- player-1-track
- (+ player-2-score
- (stream-first (stream-tail player-2-track rolls)))
- (stream-tail player-2-track rolls)
- (stream-tail dice 3)
- turn-count)]))
+ (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 * _))
;; part 2
@@ -52,20 +46,12 @@
[(p1-score . >= . 21) '(1 0)]
[(p2-score . >= . 21) '(0 1)]
[else
- (for/fold ([p-wins '(0 0)])
+ (for/fold ([wins '(0 0)])
([roll (in-list roll-space)])
- (define move-to (~> p1-start
- (+ roll)
- sub1
- (modulo 10)
- add1))
- (match-define (list p1-wins p2-wins) p-wins)
- (match-define (list p2-possible-win p1-possible-win)
- (next-turns p2-score
- (+ p1-score move-to)
- p2-start
- move-to))
- (list (+ p1-wins p1-possible-win)
- (+ p2-wins p2-possible-win)))]))
+ (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)) \ No newline at end of file