aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--unfinished/group.c32
1 files changed, 31 insertions, 1 deletions
diff --git a/unfinished/group.c b/unfinished/group.c
index 3a44a67..c7dcb2c 100644
--- a/unfinished/group.c
+++ b/unfinished/group.c
@@ -450,7 +450,37 @@ static usersolver_t const group_solvers[] = { DIFFLIST(SOLVER) };
static bool group_valid(struct latin_solver *solver, void *ctx)
{
- return true; /* FIXME */
+ int w = solver->o;
+#ifdef STANDALONE_SOLVER
+ char **names = solver->names;
+#endif
+ int i, j, k;
+
+ for (i = 0; i < w; i++)
+ for (j = 0; j < w; j++)
+ for (k = 0; k < w; k++) {
+ int ij = grid(i, j) - 1;
+ int jk = grid(j, k) - 1;
+ int ij_k = grid(ij, k) - 1;
+ int i_jk = grid(i, jk) - 1;
+ if (ij_k != i_jk) {
+#ifdef STANDALONE_SOLVER
+ if (solver_show_working) {
+ printf("%*sfailure of associativity: "
+ "(%s%s)%s = %s%s = %s but "
+ "%s(%s%s) = %s%s = %s\n",
+ solver_recurse_depth*4, "",
+ names[i], names[j], names[k],
+ names[ij], names[k], names[ij_k],
+ names[i], names[j], names[k],
+ names[i], names[jk], names[i_jk]);
+ }
+#endif
+ return false;
+ }
+ }
+
+ return true;
}
static int solver(const game_params *params, digit *grid, int maxdiff)