X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/puzzles/blobdiff_plain/130de411cc2c9177988e016d15dadfe7af09a00a..40785ed96c9dbe9a5a630b69faa0bbc9a8435091:/keen.c diff --git a/keen.c b/keen.c index 5ec7898..8d9b6bd 100644 --- a/keen.c +++ b/keen.c @@ -931,7 +931,7 @@ done for (k = 1; k <= w; k++) if (v % k == 0 && v / k <= w && v / k != k) n++; - if (n > 1) + if (n > 2) singletons[j] |= F_MUL; else singletons[j] |= F_MUL_BAD; @@ -995,7 +995,7 @@ done /* didn't find a nice one, use a nasty one */ for (i = 0; i < a; i++) { j = order[i]; - if (singletons[j] & good) { + if (singletons[j] & bad) { clues[j] = clue; singletons[j] = 0; break; @@ -1188,7 +1188,6 @@ static game_state *new_game(midend *me, game_params *params, char *desc) { int w = params->w, a = w*w; game_state *state = snew(game_state); - char *err; const char *p = desc; int i; @@ -1197,7 +1196,7 @@ static game_state *new_game(midend *me, game_params *params, char *desc) state->clues->refcount = 1; state->clues->w = w; state->clues->dsf = snew_dsf(a); - err = parse_block_structure(&p, w, state->clues->dsf); + parse_block_structure(&p, w, state->clues->dsf); assert(*p == ','); p++; @@ -1450,11 +1449,12 @@ static int check_errors(game_state *state, long *errors) break; case C_DIV: { - int d1 = cluevals[j], d2 = state->grid[i]; - if (d1 == 0 || d2 == 0) + int d1 = min(cluevals[j], state->grid[i]); + int d2 = max(cluevals[j], state->grid[i]); + if (d1 == 0 || d2 % d1 != 0) cluevals[j] = 0; else - cluevals[j] = d2/d1 + d1/d2;/* one of them is 0 :-) */ + cluevals[j] = d2 / d1; } break; } @@ -2012,6 +2012,11 @@ static float game_flash_length(game_state *oldstate, game_state *newstate, return 0.0F; } +static int game_is_solved(game_state *state) +{ + return state->completed; +} + static int game_timing_state(game_state *state, game_ui *ui) { if (state->completed) @@ -2247,6 +2252,10 @@ static void game_print(drawing *dr, game_state *state, int tilesize) FONT_VARIABLE, TILESIZE/2, ALIGN_VCENTRE | ALIGN_HCENTRE, ink, str); } + + sfree(minus_sign); + sfree(times_sign); + sfree(divide_sign); } #ifdef COMBINED @@ -2284,6 +2293,7 @@ const struct game thegame = { game_redraw, game_anim_length, game_flash_length, + game_is_solved, TRUE, FALSE, game_print_size, game_print, FALSE, /* wants_statusbar */ FALSE, game_timing_state,