blob: 3622b022c9b1dafce2a781e005f1be2e7c9572cc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
(defstruct player ()
num
pos
(val 0))
(defun read-input (: (name "input"))
(flow (file-get-lines name)
(keep-matches (`Player @num starting position: @pos` @1)
(new player num (toint num) pos (pred (toint pos))))))
(defun counter (start)
(lambda () (pinc start)))
(defun solve-one (: (name :))
(let ((count 0)
(die (counter 1)))
(buildn
(pend (read-input name))
(whilet ((p (del)))
(inc count)
(upd p.pos (+ [die] [die] [die]) (mod @1 10))
(if (>= (inc p.val (succ p.pos)) 1000)
(return (* count 3 (del).val)))
(add p)))))
(defstruct game
players)
(defun quantum-turn (ga)
(defun solve-two (: (name :))
(let ((ga (new game players (read-input name))))
(
(die (counter 1))
(player-stream (repeat (read-input name))))
(each ((p player-stream))
(let ((npos (mod (+ p.pos [die die die] 10)))
(nval (
(if (>= npos 21))
((
(buildn
(pend (read-input name))
(whilet ((p (del)))
(inc count)
(upd p.pos (+ [die] [die] [die]) (mod @1 10))
(if (>= (inc p.val (succ p.pos)) 21)
(return p))
(add p)))))
|