                 (conj taken [x y])))
       )))
 
-(defn- available-conversions-at
+(defn- available-jumps-at
   "Provides the list of moves that can be done from a cell"
   [board point]
   (eduction

  [board]
  (let [aboard (board/board->array board)]
    (map-transition-tree
      conversions->transition
      (transduce
        (mapcat #(available-conversions-at aboard %))
        (algo/group-by-reducer :winner :point)
        (board/empty-cells board)))))

(defn apply-transition
  [board transition]
  (reduce apply-conversion board transition))

;; -----------------------------------------
;; TESTS

;; Public Types
;; -----------------------------------------

(s/def ::destination ::board/coord)
(s/def ::taken (s/coll-of ::board/coord))
(s/def ::winner ::player/player)
(s/def ::looser ::player/playable-cell)
(s/def ::jump (s/keys :req-un [::destination ::taken ::winner ::looser]))
(s/def ::transition (s/every ::jump))

(s/def ::transitions
  (s/map-of ::player/player
    (s/map-of ::destination ::transition)))


;; -----------------------------------------
