File: sudoku.6

package info (click to toggle)
sudoku 1.0.5-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster, sid, stretch
  • size: 344 kB
  • ctags: 373
  • sloc: ansic: 3,483; makefile: 49
file content (300 lines) | stat: -rwxr-xr-x 9,956 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
.\" Written by Michael Kennett, July 2005. This work, and all
.\" associated files, has been placed into the public domain
.\" and may be used freely by anybody for any purpose.
.TH SUDOKU 6
.SH NAME
sudoku \- sudoku board game
.SH SYNOPSIS
(play the game)
.RS
.B sudoku
.RI [ options "] ... "
.RI [ <filename> ]
.RE
.PP
(generate boards)
.RS
.B sudoku \-g
.RI [ <num> ]
.RI [ options "] ..."
.RE
.PP
(solve boards)
.RS
.B sudoku \-v
.RI [ options "] ..."
.RE
.PP
(calculate statistics)
.RS
.B sudoku \-s
.RI [ options "] ..."
.RE
.SH DESCRIPTION
The
.B sudoku
board game is played on a 9x9 grid, divided into rows, columns, and
9 blocks of 3x3 squares. The objective is to fill the empty squares
with the digits 1-9, so that each row, column, and block contains
each of the digits 1-9 (and hence, it is not possible for any digit to
appear twice in the same row, column or block).
.SH EXAMPLE
Consider the following board, and the squares marked `\fIa\fR'-`\fIh\fR'
and `\fIx\fR':

  5 . \fIa\fR | 6 \fIb\fR 1 | . . .       The digits appearing in each of the
  7 9 . | . . . | \fIc\fR 6 8       squares `\fIa\fR'-`\fIh\fR' can be uniquely
  \fId\fR 3 . | . 8 . | 7 . .       determined. For example, the value
 -------+-------+-------      at `\fIa\fR' must be 8, since an 8 appears
  . 5 . | 4 1 \fIe\fR | . . 2       in the other rows and columns of the
  . . 1 | \fIf\fR \fIx\fR . | 6 . .       block. Using similar logic, it must
  8 . . | . 3 7 | . 4 .       be true that:
 -------+-------+-------           \fIb\fR = 7        \fIf\fR = 8
  . . 4 | . 9 . | \fIg\fR 2 .            \fIc\fR = 1        \fIg\fR = 8
  2 8 \fIh\fR | . . . | . 9 7            \fId\fR = 1        \fIh\fR = 5
  . . . | 5 \fIi\fR 8 | . . 6            \fIe\fR = 6        \fIi\fR = 2

In contrast, it is not possible to uniquely determine the value of `\fIx\fR'
with the given information - it could take either the value 2 or 5.
.bp
The board now contains the squares:

  5 . 8 | 6 7 1 | . . .    It is now possible to determine the values
  7 9 . | . . . | 1 6 8    appearing in other empty squares.
  1 3 . | . 8 . | 7 . .
 -------+-------+-------
  . 5 . | 4 1 6 | . . 2
  . . 1 | 8 \fIx\fR . | 6 . .    <<< the value of \fIx\fR must now be 5.
  8 . . | . 3 7 | . 4 .
 -------+-------+-------
  . . 4 | . 9 . | 8 2 .
  2 8 5 | . . . | . 9 7
  . . . | 5 2 8 | . . 6

Repeating this process a few more times reveals the solution:

  5 4 8 | 6 7 1 | 2 3 9
  7 9 2 | 3 4 5 | 1 6 8
  1 3 6 | 9 8 2 | 7 5 4
 -------+-------+-------
  3 5 7 | 4 1 6 | 9 8 2
  4 2 1 | 8 5 9 | 6 7 3
  8 6 9 | 2 3 7 | 5 4 1
 -------+-------+-------
  6 1 4 | 7 9 3 | 8 2 5
  2 8 5 | 1 6 4 | 3 9 7
  9 7 3 | 5 2 8 | 4 1 6
.SH "GAME INTERFACE"
The
.B sudoku
game has a simple text interface (using the
.BR curses (3)
library). The board is displayed in the middle of the screen, along with
a summary of the allowed key presses. The cursor can be moved around the
board using the arrow keys or the standard
.BR vi (1)
movement keys, and each square (except for the fixed board squares that
are initially revealed) can be set to a given digit by pressing the
corresponding number key, or cleared by pressing either the `\fI0\fR' or
`\fI.\fR'
keys.
.SS "Generating a New Board"
A new board can be generated at any time by pressing the `\fIn\fR' key, and
either a \fIprecanned\fR or randomly generated board will be displayed.
If the \fB\-n\fR command line option is set, then only \fIprecanned\fR boards
will be displayed.
.SS "Entering a Custom Board"
A custom board (e.g. found on the internet, or published in a newspaper)
can be entered into the game by first clearing the current board (press
the `\fIc\fR' key), entering the published squares (using the cursor
motion keys and entering the appropriate numbers), and then fixing the
squares by pressing the `\fIf\fR' key. At this point, the entered squares
will be fixed (and cannot be changed).
.SS "Hints"
The interactive game provides a simple hint mechanism to provide
assistance in solving the board. It attempts to highlight areas of the
board where moves can be made. If repeated hints are requested, the
system starts revealing the digit that can be placed on the board.

A new hint can be requested by pressing the `\fI?\fR' key.

Often the hints can be quite cryptic. For example, consider the board
below:

    v v v

    . . 7 | . . \fB9\fR | . . .
    \fB9\fR . \fB6\fR | 7 \fB4\fR . | . \fB1\fR \fB5\fR
    . . \fB2\fR | \fB5\fR \fB1\fR . | . . .
   -------+-------+-------
 >  \fB6\fR . \fB5\fR | . 7 . | . . \fB8\fR  <    \fIThe characters ><v^ highlight the\fR
 >  . \fB7\fR . | . . . | . \fB3\fR .  <    \fIarea of the hint\fR
 >  \fB8\fR . . | . . . | \fB7\fR . \fB6\fR  <
   -------+-------+-------
    . . . | . \fB6\fR \fB7\fR | \fB8\fR . .
    \fB7\fR \fB4\fR . | . \fB5\fR . | \fB9\fR 6 \fB2\fR
    . 6 . | \fB4\fR . . | . . .

    ^ ^ ^

The system gives the hint `\fItry the digit 3\fR', but it is certainly not
obvious, with the revealed squares, where the 3 goes.

.SH OPTIONS
.TP
.BI \-c <class>
Generate a board until it finds a board of the specified class.
Supported classes are: very easy, easy, medium, hard, and fiendish.
.TP
.BI \-d
Describe the moves needed to solve the board. Can only be used with the
.B \-v
option for solving
.I precanned
boards.
.TP
.BI \-f <format>
Set output format. The supported formats are:
.ta 0.25i 1.25i
.nf
    \fBstandard\fR    Default text format; \fBstd\fR is a shortcut.
    \fBcompact\fR     Compact text format.
    \fBcsv\fR         Comma separated values, suitable for importing
                      into a spreadsheet.
    \fBpostscript\fR  \fBps\fR is a shortcut.
    \fBhtml\fR        Simple HTML.
.fi
.TP
.BI \-g "[<num>]"
Generate
.I <num>
boards (or just 1 board, if not specified) and write them to standard output.
.TP
.BI \-n
No random boards generated in the interactive game. Requires the optional
file of \fIprecanned\fR boards to be specified.
.TP
.BI \-r
Run in restricted mode, disallowing any games to be saved.
.TP
.BI \-s
Calculate statistics for the
.I precanned
boards, and attempt to classify
the difficulty of solving the boards. Can be used with the
.B \-v
option.
.TP
.BI \-t "<filename>"
Set the template file. The file set on the command line will be used 
instead of the default template file.
.TP
.BI \-v
Solve
.I precanned
boards, writing the solution to standard output.
.TP
.I <filename>
Name of the optional file containing
.I precanned
boards.
.TP
.BI \-w
Write
.I default template
to the working directory if it doesn't exist yet.

.SH ENVIRONMENT
No environment variables are used directly by the
.B sudoku
program.
.SH FILES
.TP
.BI /usr/share/sudoku/template
Template file for generating new sudoku boards.
.TP
.BI /usr/share/sudoku/precanned
Optional file, containing `precanned' sudoku boards.
.SH "FILE FORMATS"
.SS /usr/share/sudoku/template
The template file contains a sequence of patterns that are used for
generating new
.B sudoku
boards. Each pattern is started by a line with a leading `%' character,
and consists of 9 lines of 9 characters. The character `.' represents a
square that is initially blank, and the character `*' represents a square
with a digit that is initially displayed.
.SS "Compact text format"
This format is similar to that of the template file, but contains
representations of game boards. Each board is started by a line with a
leading `%' character, followed by an optional title for the board that
is displayed when the game is played. This is followed by 9 lines of
9 characters, where the character `.' represents an initially empty square,
and the characters `1'-`9' give the value of a fixed board square that
is initially displayed. The
.B sudoku
program can read precanned files in this format, and will write them
when the
.B \-fcompact
option is set.
.SS "Standard text format"
This format is very similar to the compact text format, but includes
additional characters to delimit the blocks in the board. The
.B sudoku
program can read precanned files in this format, and writes them by
default, unless another output format is set by the
.B \-f
option.
.SS "Comma separated text format"
This format is useful for importing
.B sudoku
boards into a spreadsheet. It represents each board by 9 lines of
comma separated fields. Each field is blank, or contains a digit.
The
.B sudoku
program cannot read precanned files in this format, and writes them
when the
.B \-fcsv
option is set. Unlike the standard or compact text formats, there
are no lines separating boards, and hence, it is really only feasible
to store one board per file.
.SS "Postscript format"
This format is useful for printing out
.B sudoku
boards. The
.B sudoku
program cannot read boards stored in this format, and writes them
when the
.B \-fpostscript
option is set. Unlike the standard or compact text formats, it is
not possible to store multiple boards in the same file.
.SS "HTML format"
This format is useful for printing out
.B sudoku
boards. The
.B sudoku
program cannot read boards stored in this format, and writes them
when the
.B \-fhtml
option is set. Unlike the standard or compact text formats, it is
not possible to store multiple boards in the same file.
.SH "SEE ALSO"
There are a large number of websites dedicated to the
.B sudoku
puzzle that can be found easily using a search engine.
Some of these sites provide game boards that can be challenging
to solve, and others provide strategies for finding moves.
.SH DIAGNOSTICS
There are limited diagnostics available when an error occurs.
.SH ACKNOWLEDGEMENTS
Mark Foreman for the HTML output format; Joanna Ferris and Heather for
encouraging this endeavour.
.SH AUTHOR
Michael Kennett (mike@laurasia.com.au)
.SH COPYRIGHT
This manual page, and all associated files, have been placed into
the public domain by Michael Kennett, July 2005. They may be used
by anybody for any purpose whatsoever, however \fBNO WARRANTY\fR, of any
sort, applies to this work.