                 (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

(defn- empty-cell-conversion
  "Create a move to take an empty cell"
  [player point]
  {:destination point
   :winner player
   :looser :empty
   :taken [point]})

(defn- apply-jump
  "Apply a move onto the board, yielding a new board"
  [board {:keys [winner taken]}]
  (reduce #(board/convert-cell %1 %2 winner) board taken))

(defn add-destination
  [jumps]
  (if-let [{:keys [winner destination]} (first jumps)]
    (conj jumps (empty-cell-conversion winner destination))
    jumps))

(defn- map-transition-tree
  [xf game-tree]
