From 98efcdb9e3026bceb161a576e7733d2db67ede5a Mon Sep 17 00:00:00 2001 From: simon Date: Wed, 1 Jun 2005 12:42:30 +0000 Subject: [PATCH] I've proved that a grid dimension of 2 is capable of irretrievably hanging the grid generator and that there's no way to fix it. Therefore, lower limit of 3 squares in each direction, which will upset envelope-pushers everywhere but doesn't destroy any actually interesting puzzles. git-svn-id: svn://svn.tartarus.org/sgt/puzzles@5895 cda61777-01e9-0310-a592-d414129be87e --- mines.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/mines.c b/mines.c index 4fa63d1..63bfa1f 100644 --- a/mines.c +++ b/mines.c @@ -237,12 +237,22 @@ static game_params *custom_params(config_item *cfg) static char *validate_params(game_params *params) { - if (params->w <= 0 && params->h <= 0) - return "Width and height must both be greater than zero"; - if (params->w <= 0) - return "Width must be greater than zero"; - if (params->h <= 0) - return "Height must be greater than zero"; + /* + * Lower limit on grid size: each dimension must be at least 3. + * 1 is theoretically workable if rather boring, but 2 is a + * real problem: there is often _no_ way to generate a uniquely + * solvable 2xn Mines grid. You either run into two mines + * blocking the way and no idea what's behind them, or one mine + * and no way to know which of the two rows it's in. If the + * mine count is even you can create a soluble grid by packing + * all the mines at one end (so what when you hit a two-mine + * wall there are only as many covered squares left as there + * are mines); but if it's odd, you are doomed, because you + * _have_ to have a gap somewhere which you can't determine the + * position of. + */ + if (params->w <= 2 || params->h <= 2) + return "Width and height must both be greater than two"; if (params->n > params->w * params->h - 9) return "Too many mines for grid size"; -- 2.11.0