Detecting Victory: REPL Experimentsλ︎
Find a winning rowλ︎
To find a winning row we can compare the values in the vector with each other
#_(apply = [:cross :cross :cross])
;; => true
#_(apply = [:nought :nought :nought])
;; => true
#_(apply = [:empty :cross :empty])
;; => false
#_(apply = [:cross :nought :empty])
;; => false
However, this approach also matches an :empty row or column
Using an anonymous function over the collection allows us to compare each value, if all values are not= :empty then we can return true
As we will probably call this multiple times, lets convert it into a named function.
Hmm, still not idea, as any combination that does not contain :empty will return true
Applying both checks will give the right results
(defn winning-line? [cell-row]
(and
(apply = cell-row)
(apply cell-empty? cell-row)))
#_(winning-line? [:cross :cross :cross])
;; => true
#_(winning-line? [:nought :nought :nought])
;; => true
#_(winning-line? [:cross :nought :cross])
;; => false
#_(winning-line? [:empty :empty :empty])
;; => false
#_(winning-line? [:empty :nought :cross])
;; => false