9mm/lib/game/all-mills.fnl

26 lines
700 B
Fennel

(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?
}