26 lines
700 B
Plaintext
26 lines
700 B
Plaintext
|
(local {: mill-at? } (require :lib.game.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? [player moves]
|
||
|
(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]
|
||
|
(->> current-player
|
||
|
(toggle-player)
|
||
|
(only-player-moves all-moves)
|
||
|
(all-moves-are-mills? current-player)))
|
||
|
|
||
|
{: all-mills?
|
||
|
;; do not use; just for testing:
|
||
|
: toggle-player
|
||
|
: only-player-moves
|
||
|
: all-moves-are-mills?
|
||
|
}
|