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

        (recur new-grid
               coords
               (conj processed-run (first coords)))))))

(s/defn maze-aldous-broder-sync :- g/Grid [grid :- g/Grid]
  (loop [grid grid
         current (g/random-coord grid)
         unvisited (dec (g/grid-size grid))]
    (let [cell (g/grid-cell grid current)
          neighbor (rand-nth (g/cell-neighbors cell))
          neighbor-new? (empty? (:links (g/grid-cell grid neighbor)))]
      (if (= unvisited 0)
        (assoc grid :algorithm-name "aldous-broder")
        (recur (if neighbor-new?
                 (g/link-cells (g/begin-step grid) cell neighbor)
                 grid)
               neighbor
               (if neighbor-new? (dec unvisited) unvisited))))))

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

      (let [neighbor (rand-nth unvisited-neighbors)]
        [(g/link-cells grid current-cell neighbor)
         neighbor]))))

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