* is small enough to let us rule out placements of those dominoes
* elsewhere.
*/
-static bool deduce_set_simple(struct solver_scratch *sc)
+static bool deduce_set(struct solver_scratch *sc, bool doubles)
{
struct solver_square **sqs, **sqp, **sqe;
int num, nsq, i, j;
rule_out_text = "all of them elsewhere";
#endif
} else {
+ if (!doubles)
+ continue; /* not at this difficulty level */
+
/*
* But in Dominosa, there's a special case if _two_
* squares in this set can possibly both be covered by
if (max_diff_allowed <= DIFF_BASIC)
continue;
- if (deduce_set_simple(sc))
+ if (deduce_set(sc, false))
done_something = true;
if (done_something) {
sc->max_diff_used = max(sc->max_diff_used, DIFF_HARD);
if (max_diff_allowed <= DIFF_HARD)
continue;
+ if (deduce_set(sc, true))
+ done_something = true;
+ if (done_something) {
+ sc->max_diff_used = max(sc->max_diff_used, DIFF_EXTREME);
+ continue;
+ }
+
if (deduce_forcing_chain(sc))
done_something = true;
if (done_something) {