blob: 562bb97eb53c7646aedac024ebe8098b7b5baf18 (
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
|
(local {: mill-at? } (require :lib.mill))
(local {: mills } (require :lib.constants))
(fn toggle-player [p] (if (= p 1) 2 1))
(fn only-player-moves [moves player]
(icollect [_ move (ipairs moves)] (if (= move player) player 0)))
(fn all-moves-are-mills? [moves player]
(accumulate [result true
i m (ipairs moves) ]
(and result (if (= m 0) true (mill-at? mills moves i)))))
(fn all-mills? [all-moves current-player]
(let [next-player (toggle-player current-player)
player-moves (only-player-moves all-moves next-player)
all-mills (all-moves-are-mills? player-moves current-player)]
all-mills))
{: all-mills?
;; do not use; just for testing:
: toggle-player
: only-player-moves
: all-moves-are-mills?
}
|