       (let [neighbor (rand-nth unvisited-neighbors)]
         [(g/link-cells grid current-cell neighbor)
          neighbor]))))
-
-(s/defn maze-hunt-and-kill-sync :- g/Grid [grid :- g/Grid]
-  (loop [grid grid
-         current-coord (g/random-coord grid)]
-    (let [[new-grid next-coord] (hunt-and-kill-step grid current-coord)]
-      (if-not next-coord
-        (assoc new-grid :algorithm-name "hunt-and-kill")
-        (recur new-grid next-coord)))))
 
 (s/defn maze-hunt-and-kill [grid :- g/Grid result-chan report-partial-steps?]
   (go-loop [grid (assoc grid :algorithm-name "hunt-and-kill")

                   (sidewinder-end-run grid run)
                   (g/link-cells grid cell (:east cell)))]
    [new-grid (if end-run? [] run)]))

(s/defn maze-sidewinder-sync :- g/Grid [grid :- g/Grid]
  (loop [grid grid
         [coord & coords] (g/grid-coords grid)
         current-run [coord]]
    (let [[new-grid processed-run] (sidewinder-step grid coord current-run)]
      (if (empty? coords)
        (assoc new-grid :algorithm-name "sidewinder")
        (recur new-grid
               coords
               (conj processed-run (first coords)))))))

(s/defn maze-sidewinder [grid :- g/Grid result-chan report-partial-steps?]
  (go-loop [grid (assoc grid :algorithm-name "sidewinder")

      grid
      (g/link-cells grid cell (rand-nth neighbors)))))

(s/defn maze-binary-tree [grid :- g/Grid result-chan report-partial-steps?]
  (go
    (let [step-and-report (fn [g c]
