struct game_params {
int w, h;
float expandfactor;
+ int unique;
};
#define INDEX(state, x, y) (((y) * (state)->w) + (x))
ret->w = ret->h = 7;
ret->expandfactor = 0.0F;
+ ret->unique = TRUE;
return ret;
}
ret->w = w;
ret->h = h;
ret->expandfactor = 0.0F;
+ ret->unique = TRUE;
return TRUE;
}
if (*string == 'e') {
string++;
ret->expandfactor = atof(string);
+ while (*string &&
+ (*string == '.' || isdigit((unsigned char)*string))) string++;
+ }
+ if (*string == 'a') {
+ string++;
+ ret->unique = FALSE;
}
}
sprintf(data, "%dx%d", params->w, params->h);
if (full && params->expandfactor)
sprintf(data + strlen(data), "e%g", params->expandfactor);
+ if (full && !params->unique)
+ strcat(data, "a");
return dupstr(data);
}
ret[2].sval = dupstr(buf);
ret[2].ival = 0;
- ret[3].name = NULL;
- ret[3].type = C_END;
+ ret[3].name = "Ensure unique solution";
+ ret[3].type = C_BOOLEAN;
ret[3].sval = NULL;
- ret[3].ival = 0;
+ ret[3].ival = params->unique;
+
+ ret[4].name = NULL;
+ ret[4].type = C_END;
+ ret[4].sval = NULL;
+ ret[4].ival = 0;
return ret;
}
ret->w = atoi(cfg[0].sval);
ret->h = atoi(cfg[1].sval);
ret->expandfactor = atof(cfg[2].sval);
+ ret->unique = cfg[3].ival;
return ret;
}
}
}
- ret = rect_solver(params->w, params->h, nnumbers, nd, rs);
+ if (params->unique)
+ ret = rect_solver(params->w, params->h, nnumbers, nd, rs);
+ else
+ ret = TRUE; /* allow any number placement at all */
if (ret) {
/*