Substantial reworking of Solo so that it implements both Sudoku-X

(require both main diagonals to have one of every digit in addition
to all the usual constraints) and Jigsaw Sudoku (replace the array
of rectangular sub-blocks with the sub-blocks being random
polyominoes). To implement the latter, I've moved my `divvy.c'
library routine out of the `unfinished' subdirectory.

Jigsaw mode is currently an undocumented feature: you enable it by
setting the rows parameter to 1 (and the columns parameter to your
desired grid size, which unlike normal Sudoku can be anything you
like including a prime number). The reason it's undocumented is
because generation times are not yet reliably short: sometimes
generating a jigsaw-type puzzle can hang for hours and still get
nowhere. (The algorithm should terminate in principle, but not in
any time you're prepared to wait.) I _think_ I know how to solve
this, but have yet to try it. Until then, jigsaw mode will remain a
hidden feature.

Printing of X-type puzzles is also substandard at present, because
the current print-colour API replaces the desired light shading of
the X-cells with heavy diagonal hatching. I plan to adjust the API
imminently to address this.

[originally from svn r7974]
This commit is contained in:
Simon Tatham
2008-04-07 15:56:42 +00:00
parent d2369aab62
commit 93103eeca4
5 changed files with 1418 additions and 545 deletions

View File

@ -930,6 +930,12 @@ rows, into which the main grid is divided. (The size of a block is
the inverse of this: for example, if you select 2 columns and 3 rows,
each actual block will have 3 columns and 2 rows.)
You can introduce an optional extra constraint on the puzzles,
requiring that the two main diagonals of the grid also contain one
of every digit. (This is sometimes known as \q{Sudoku-X} in
newspapers.) In this mode, the squares on the two main diagonals
will be shaded slightly so that you know it's enabled.
You can also configure the type of symmetry shown in the generated
puzzles. More symmetry makes the puzzles look prettier but may also
make them easier, since the symmetry constraints can force more

View File

@ -381,6 +381,12 @@ void reset_combi(combi_ctx *combi);
combi_ctx *next_combi(combi_ctx *combi); /* returns NULL for end */
void free_combi(combi_ctx *combi);
/*
* divvy.c
*/
/* divides w*h rectangle into pieces of size k. Returns w*h dsf. */
int *divvy_rectangle(int w, int h, int k, random_state *rs);
/*
* Data structure containing the function calls and data specific
* to a particular game. This is enclosed in a data structure so

12
solo.R
View File

@ -1,13 +1,15 @@
# -*- makefile -*-
solo : [X] GTK COMMON solo solo-icon|no-icon
SOLO = solo divvy dsf
solo : [G] WINDOWS COMMON solo solo.res|noicon.res
solo : [X] GTK COMMON SOLO solo-icon|no-icon
solosolver : [U] solo[STANDALONE_SOLVER] STANDALONE
solosolver : [C] solo[STANDALONE_SOLVER] STANDALONE
solo : [G] WINDOWS COMMON SOLO solo.res|noicon.res
ALL += solo
solosolver : [U] solo[STANDALONE_SOLVER] dsf STANDALONE
solosolver : [C] solo[STANDALONE_SOLVER] dsf STANDALONE
ALL += SOLO
!begin gtk
GAMES += solo

1939
solo.c

File diff suppressed because it is too large Load Diff