[データファイルの書き方] 本プログラムは、データファイルの書き方によって様々なルールに 対応できます。以下にその書き方を示します。 例として、3×3で同一行、同一列の重複を許さないというルールで、 ---+---+--- 1 | | ---+---+--- | | 2 ---+---+--- | | ---+---+--- の空白を1〜3で埋めるという問題を考えます。 その場合のデータファイルは、 # vertical size 3 # horizontal size 3 # maximum number 3 # number of blocks under constraint 6 # board data 1.. ..2 ... # blocks under constraint +++ ... ... # ... +++ ... # ... ... +++ # +.. +.. +.. # .+. .+. .+. # ..+ ..+ ..+ のようになります。以下に説明します。 なお、先頭が'#'の行はコメントで、読み込み時には無視されます。 (1) まず、盤面の縦の大きさを > # vertical size > 3 のように書きます。 (2) 次に、盤面の横の大きさを > # horizontal size > 3 のように書きます。 (3) 使われる数値の最大値を書きます。 > # maximum number > 3 これで、1〜3の数値を用いることになります。 (4) 同一の数字の重複を許さない桝目の集合の数を書きます。 > # number of blocks under constraint > 6 この場合、 ・1行目の3つの桝に同一の数字は重複できない。 ・2行目の3つの桝に同一の数字は重複できない。 ・3行目の3つの桝に同一の数字は重複できない。 ・1列目の3つの桝に同一の数字は重複できない。 ・2列目の3つの桝に同一の数字は重複できない。 ・3列目の3つの桝に同一の数字は重複できない。 という6つの制約があり、従って6と書きます。 普通のナンバープレイスの場合は、9(同一行) + 9(同一列) + 9(同一ブロック) で27になります。 (5) 盤面を > # board data > 1.. > ..2 > ... のように書きます。このように、空白の部分は'.'で表します。 また、10以上の数値を書く場合には、10='A', 11='B'...のように記述します。 (6) 最後に、同一数字が重複できないブロックを記述します。 > # blocks under constraint > +++ > ... > ... > # > ... > +++ > ... > # > ... > ... > +++ > # > +.. > +.. > +.. > # > .+. > .+. > .+. > # > ..+ > ..+ > ..+ このように、同一数の存在が許されない部分を'+'で表します。この盤面は、(4)で 記述した数だけ存在しなければなりません。この場合は、6個です。