summary refs log tree commit diff
path: root/lib/game/all-mills.fnl
blob: e5b3d2b1ac5e1dc621b66310a785232c37f65cfa (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.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?
 }