#define gridpos(x,y) ((y)*solver->o+(x))
#define grid(x,y) (solver->grid[gridpos(x,y)])
-/* A solo solver using this code would need these defined. See solo.c. */
-#ifndef YTRANS
-#define YTRANS(y) (y)
-#endif
-#ifndef YUNTRANS
-#define YUNTRANS(y) (y)
-#endif
-
/* --- Solver individual strategies --- */
/* Positional elimination. */
int latin_solver_elim(struct latin_solver *solver, int start, int step
#ifdef STANDALONE_SOLVER
- , char *fmt, ...
+ , const char *fmt, ...
#endif
);
struct latin_solver_scratch *scratch,
int start, int step1, int step2
#ifdef STANDALONE_SOLVER
- , char *fmt, ...
+ , const char *fmt, ...
#endif
);
digit *latin_generate(int o, random_state *rs);
+/* The order of the latin rectangle is max(w,h). */
+digit *latin_generate_rect(int w, int h, random_state *rs);
+
int latin_check(digit *sq, int order); /* !0 => not a latin square */
void latin_debug(digit *sq, int order);