blob: d15b53e15fe8e7518b674982dc99c5ba11780630 (
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
(local {: contains} (require :lib.table))
(fn get-candidates [all-mills next-move]
"a list of mills that contain next-move"
(icollect [_ mill (ipairs all-mills)]
(if (contains mill next-move) mill)))
(fn any [t]
"take a list of booleans, returns true if any of them are true"
(accumulate [acc false
i x (ipairs t)]
(or acc x)))
(fn move-mills [moves-list]
(icollect [_ moves (ipairs moves-list)]
(let [player (. moves 1)]
(accumulate [acc true
_ m (ipairs moves)]
(and acc (not= m 0) (= player m))))))
(fn candidate-moves [moves candidates]
"Just turning board spaces into player moves"
(icollect [_ spaces (ipairs candidates)]
(icollect [_ space (ipairs spaces)]
(. moves space))))
(fn mill-at? [all-mills current-moves move]
"Is there a mill at this move?"
(->> (get-candidates all-mills move)
(candidate-moves current-moves)
(move-mills)
(any)))
{: mill-at?
;; not for consumption,
;; just for testing:
: get-candidates
: candidate-moves
: move-mills
: any
}
|