-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy path119-win-at-tic-tac-toe.clj
More file actions
39 lines (39 loc) · 2.01 KB
/
119-win-at-tic-tac-toe.clj
File metadata and controls
39 lines (39 loc) · 2.01 KB
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
(fn [piece board]
(letfn [(step [board]
(filter (complement nil?) (map
(fn [index]
(let [line (board index)]
(if (and
(= 2 (count (filter #(= % piece) line)))
(= 1 (count (filter #(= % :e ) line))))
(first (filter (complement nil?) (map
(fn [jndex]
(if (= :e (line jndex))
[index jndex]))
(range 0 (count line))))))))
(range 0 (count board)))))]
(set (concat
(step board)
(map #(vec (reverse %)) (step (vec (apply (partial map #(vec [%1 %2 %3])) board))))
(let [line [(first (first board)) (second (second board)) (last (last board))]]
(if (and
(= 2 (count (filter #(= % piece) line)))
(= 1 (count (filter #(= % :e ) line))))
(if (= :e (first line))
[[0 0]]
(if (= :e (second line))
[[1 1]]
(if (= :e (last line))
[[2 2]])))
[]))
(let [line [(last (first board)) (second (second board)) (first (last board))]]
(if (and
(= 2 (count (filter #(= % piece) line)))
(= 1 (count (filter #(= % :e ) line))))
(if (= :e (first line))
[[0 2]]
(if (= :e (second line))
[[1 1]]
(if (= :e (last line))
[[2 0]])))
[]))))))