26 lines
766 B
Fennel
26 lines
766 B
Fennel
(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?
|
|
}
|