                    (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")

               new-unvisited
               pairs)))))

(s/defn maze-wilsons-sync :- g/Grid [grid :- g/Grid]
  (loop [grid grid
         unvisited (rest (shuffle (g/grid-coords grid)))
         coord (rand-nth unvisited)]
    (let [path (wilsons-loop-erased-walk grid coord unvisited)
          [new-grid new-unvisited] (wilsons-carve-passage grid path unvisited nil false)]
      (if (empty? new-unvisited)
        (assoc new-grid :algorithm-name "wilsons")
        (recur new-grid
               new-unvisited
               (rand-nth new-unvisited))))))

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

      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]
