From ce09973e7cacccdc779f91b8e6e48a520b9f9f4d Mon Sep 17 00:00:00 2001 From: dozens Date: Sat, 15 Jun 2024 21:15:59 -0600 Subject: feat: add end game --- lib/no-moves.fnl | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 lib/no-moves.fnl (limited to 'lib/no-moves.fnl') diff --git a/lib/no-moves.fnl b/lib/no-moves.fnl new file mode 100644 index 0000000..591cb7c --- /dev/null +++ b/lib/no-moves.fnl @@ -0,0 +1,26 @@ +(local {: tail} (require :lib.tail)) + +(fn get-player-idxs [player moves] + (icollect [i p (ipairs moves)] (when (= p player) i))) + +(fn idx-to-neighbors [idxs all-neighbors] + (icollect [_ i (ipairs idxs)] (tail (. all-neighbors i)))) + +(fn neighbor-is-occupied? [neighbors moves] + (icollect [_ move (ipairs neighbors)] + (icollect [_ neighbor (ipairs move)] + (not= (. moves neighbor) 0)))) + +(fn reduce-to-bool [xs] + (accumulate [acc true + _ x (ipairs xs)] + (and x))) + +(fn no-moves? [neighbors all-moves player] + (-> (get-player-idxs player all-moves) + (idx-to-neighbors neighbors) + (neighbor-is-occupied? all-moves) + (reduce-to-bool) + (reduce-to-bool))) + +{: no-moves? } -- cgit 1.4.1-2-gfad0