ref: a42b11add35eb1986ff2db7817221ace550a8480
parent: c3d1982dcb2de62ea2eb79e01eda8106d3335042
author: Simon Tatham <anakin@pobox.com>
date: Sat Aug 6 10:52:26 EDT 2005
Streamline `slantsolver' a bit (avoid showing advanced working on easy puzzles, and stop having a second encoding of the difficulty levels). [originally from svn r6170]
--- a/slant.c
+++ b/slant.c
@@ -1863,13 +1863,13 @@
game_state *s;
char *id = NULL, *desc, *err;
int grade = FALSE;
- int ret;
+ int ret, diff, really_verbose = FALSE;
struct solver_scratch *sc;
while (--argc > 0) {char *p = *++argv;
if (!strcmp(p, "-v")) {- verbose = TRUE;
+ really_verbose = TRUE;
} else if (!strcmp(p, "-g")) {grade = TRUE;
} else if (*p == '-') {@@ -1903,32 +1903,38 @@
sc = new_scratch(p->w, p->h);
- if (grade) {+ /*
+ * When solving an Easy puzzle, we don't want to bother the
+ * user with Hard-level deductions. For this reason, we grade
+ * the puzzle internally before doing anything else.
+ */
+ for (diff = 0; diff < DIFFCOUNT; diff++) {ret = slant_solve(p->w, p->h, s->clues->clues,
- s->soln, sc, DIFF_EASY);
- if (ret == 0)
- printf("Difficulty rating: impossible (no solution exists)\n");- else if (ret == 1)
- printf("Difficulty rating: Easy\n");- else {- ret = slant_solve(p->w, p->h, s->clues->clues,
- s->soln, sc, DIFF_HARD);
+ s->soln, sc, diff);
+ if (ret < 2)
+ break;
+ }
+
+ if (diff == DIFFCOUNT) {+ if (grade)
+ printf("Difficulty rating: harder than Hard, or ambiguous\n");+ else
+ printf("Unable to find a unique solution\n");+ } else {+ if (grade) {if (ret == 0)
printf("Difficulty rating: impossible (no solution exists)\n");else if (ret == 1)
- printf("Difficulty rating: Hard\n");+ printf("Difficulty rating: %s\n", slant_diffnames[diff]);+ } else {+ verbose = really_verbose;
+ ret = slant_solve(p->w, p->h, s->clues->clues,
+ s->soln, sc, diff);
+ if (ret == 0)
+ printf("Puzzle is inconsistent\n");else
- printf("Difficulty rating: harder than Hard, or ambiguous\n");+ fputs(game_text_format(s), stdout);
}
- } else {- ret = slant_solve(p->w, p->h, s->clues->clues,
- s->soln, sc, DIFF_HARD);
- if (ret == 0)
- printf("Puzzle is inconsistent\n");- else if (ret > 1)
- printf("Unable to find a unique solution\n");- else
- printf("%s\n", game_text_format(s));}
return 0;
--
⑨