Since we've changed the semantics of the `expand' argument to midend_size(),
[sgt/puzzles] / slant.c
diff --git a/slant.c b/slant.c
index fd7adad..fc47209 100644 (file)
--- a/slant.c
+++ b/slant.c
@@ -287,7 +287,10 @@ struct solver_scratch {
      *    below it might form a <-shape between them
      * 
      * Any starting 1 or 3 clue rules out four bits in this array
-     * immediately; we can rule out further bits during play using
+     * immediately; a 2 clue propagates any ruled-out bit past it
+     * (if the two squares on one side of a 2 cannot be a v-shape,
+     * then neither can the two on the other side be the same
+     * v-shape); we can rule out further bits during play using
      * partially filled 2 clues; whenever a pair of squares is
      * known not to be _either_ kind of v-shape, we can mark them
      * as equivalent.
@@ -465,15 +468,13 @@ static int slant_solve(int w, int h, const signed char *clues,
      * Establish a disjoint set forest for tracking connectedness
      * between grid points.
      */
-    for (i = 0; i < W*H; i++)
-       sc->connected[i] = i;          /* initially all distinct */
+    dsf_init(sc->connected, W*H);
 
     /*
      * Establish a disjoint set forest for tracking which squares
      * are known to slant in the same direction.
      */
-    for (i = 0; i < w*h; i++)
-       sc->equiv[i] = i;              /* initially all distinct */
+    dsf_init(sc->equiv, w*h);
 
     /*
      * Clear the slashval array.
@@ -486,7 +487,7 @@ static int slant_solve(int w, int h, const signed char *clues,
     memset(sc->vbitmap, 0xF, w*h);
 
     /*
-     * Initialise the `exits' and `border' arrays. Theses is used
+     * Initialise the `exits' and `border' arrays. These are used
      * to do second-order loop avoidance: the dual of the no loops
      * constraint is that every point must be somehow connected to
      * the border of the grid (otherwise there would be a solid
@@ -1003,9 +1004,7 @@ static void slant_generate(int w, int h, signed char *soln, random_state *rs)
      * Establish a disjoint set forest for tracking connectedness
      * between grid points.
      */
-    connected = snewn(W*H, int);
-    for (i = 0; i < W*H; i++)
-       connected[i] = i;                      /* initially all distinct */
+    connected = snew_dsf(W*H);
 
     /*
      * Prepare a list of the squares in the grid, and fill them in
@@ -1386,8 +1385,7 @@ static int check_completion(game_state *state)
      * edge is visited at most twice.
      */
     dsf = state->clues->tmpdsf;
-    for (i = 0; i < W*H; i++)
-        dsf[i] = i;                   /* initially all distinct */
+    dsf_init(dsf, W*H);
     for (y = 0; y < h; y++)
         for (x = 0; x < w; x++) {
             int i1, i2;
@@ -2188,7 +2186,7 @@ static void game_print(drawing *dr, game_state *state, int tilesize)
 #endif
 
 const struct game thegame = {
-    "Slant", "games.slant",
+    "Slant", "games.slant", "slant",
     default_params,
     game_fetch_preset,
     decode_params,