JavaFX アプリケーション

JavaFX 11以上、Scene Builder、Eclipse を利用して


NumberPlaceFXの利用方法

NumberPlaceFXMain
図 NumberPlaceFX

最新は1.5版です。NumberPlaceFX Helpが正常に表示されない点も修正しました。

NumberPlaceFXは以下に述べるNumber Place(数プレ、ナンプレ、ナンバープレース)と呼ばれるパズルを、自動的に生成し(既存のパズルもインポートできる)、自分で解く時の補助をする(自動的に解くこともできる)アプリケーションである。

Number Place

9行9列に並べられた91個のセル(と呼んでおく)に、次のルールが成り立つように、1から9までの数字を入れることである。ただし、あらかじめ、複数のセルに数字が入っており、それらは変更できない。

ルール

各行、各列、各MiniGridにおいて、各数字が丁度1回ずつ出現する。

ただし、ここでの、行、列、MiniGridとその番号付けは下図の通りである。また、例えば、1行5列にあるセルを(1,5)で参照する(先に行番号、後で列番号を示す)。

図 行と列の番号付け
図 MiniGridの番号付け

利用方法

概要

  • セルに数字を入力したい場合、数字を入力したいセルをマウスでクリックし、入力したい数字を、上方にある数字ボタンか数字キー(テンキーが便利)を押して、入力する。入力した数字を削除する場合は、そのセルをクリックし、「Remove」ボタンか「Delete」キーを押す。「Activities」に入力、削除した情報が表示される。「Undo」と「Redo」ボタンも期待通りに作動する。=>詳細(セルへの入力と削除)
  • パズルを容易に解くための補助機能:現時点で、各数字がどこにあるか?後、何個挿入すべきか?上方にある数字ボタンのすぐ下にあるトグルボタンにその数字の残り個数が表示される。トグルボタンを押し下げるとその数字がどこにあるかが分かる。=>詳細(各数字の位置と残り個数)
  • 全ての解(結果だけ)を表示できる。解がない場合もその旨表示する。後者は、パズルを解いている途中に間違っていないかを確認するために利用できる(ただし、間違っていなくて解が表示された場合は、内容を見ない事)。間違っていた場合、元のパズルに容易に戻せる。=>詳細(全ての解の表示とOriginalパズルに戻る)
  • NumberPlaceFXがパズルを自動的に解く、または、自分でMemoウィンドウを利用して解く、時に役に立つ空白セルのPossibleについては=>詳細(Possibleについて)
  • パズルを自動的に解く場合、「Solve Puzzle」ボタンを押す。その時、「Step by step」チェックボックスがチェックされていたら、1ステップ毎に停止する。チェックされていなければ、最後まで自動的に解く。「Activities」に経過が表示される。また、全ての解を表示できる。=>詳細(自動的に解く)
  • Memoウィンドウを利用し、Possibleを自分で修正しながら解きたい場合、「Show Memo」トグルボタンを押し下げ、Memoウィンドウを表示させる。=>詳細(Memoの利用)
  • NumberPlaceFXが自動的に解く時に、1ステップ毎にPossibleをどのように修正して解くかを確認したい場合、「Show Memo」トグルボタンを押し下げ、Memoウィンドウを表示させる。=>詳細(Memoの利用、Show Last)
  • Memoウィンドウを利用し、Possibleを自分で修正しながら(または、「Solve」ボタンを押して)解いている時に、Single PossibleやOne Confirmedを含め、どのセルの数字も確定することが出来ず、Select One of Themを自分で実行したい場合、「Show Select One of Them」トグルボタンを押し下げ、Memo: Select One of Themウィンドウを表示させる。=>詳細(Memo: Select One of Themの利用)
  • 現在のパズルをファイル(.numpl)に保存できる。この時、修正できないセルの情報も保存する。もちろん、保存したファイルを開くこともできる。=>詳細(ファイルに保存、開く)
  • パズルを、空白セルを0とし、1行に9文字、9行からなる文字列として表現したテキストファイル(.txt)をインポートできる。現在のパズルをエクスポートできる。ただし、修正できないセルの情報は破棄される。=>詳細(インポートとエクスポート)
  • パズルを新規に生成する。Easy、Medium、Difficult、Very Difficult、Extremely Difficultの5つのレベルのパズルを自動的に生成する。また、必要なセルに、自分で数字を入力することによっても作成できる。=>詳細(パズルの生成)
  • パズルを自動的に解く場合、5つの方法のうち、どこまで利用するかを指定できる。=>詳細(自動的に解く、方法)
  • パズルを(最初から、または、前回途中まで解いて保存したファイルをオープンしてそこから)解答するまでにかかった経過時間(分単位)がステータスバーに表示される。解答途中で休息できるように、経過時間の計測を停止、再開できる。また、パズルを最初から解き始めた場合のみ、解答するためにかかった経過時間をファイルに保存できる。=>詳細(経過時間計測の停止、再開)
  • パズルを最初から自力で解き始めた場合のみ、解答するためにかかった経過時間をファイルに保存できる。=>詳細(解答時間、アクティビティの保存)
  • NumberPlaceFXを起動すると、ユーザーディレクトリに「NumberPlaceFX」というディレクトリが(存在しなければ)作成される。このディレクトリにパズル(.numpl、.txt)を保存するとファイルが散逸しない。また、設定を変更した場合、NumberPlaceFX.confファイルが保存される。

セルへの入力と削除

数字の入ったセルで背景がライトスチールブルー(明るい薄い青銅色)の場合は、修正できない。(修正できないセルは選択できない。)一方、背景がライトイエロー(ほぼ白色に見える)の場合は修正できる。1から9までの数字を入力したいセルをマウスでクリックし、その数字を上方にある数字ボタン、または、数字キー(テンキーが便利)を押して、入力する。セルをマウスでクリックすると、選択されていることを示すために、セルの背景がシアン色になる。セルの選択にはマウスのクリックを想定している。

図 (2,2)セルをマウスでクリック
図 「4」を入力する

入力されている(1から9までの)数字を削除する場合は、そのセルをクリックし、「Remove」ボタン、または、「Delete」キーを押す。ルールにより入力できない数字を入力しようとした場合、入力できず、その旨が「Activities」に表示される。下の例では、(2,2)セルに「5」を入力しようとしたが、同じ列にある(4,2)セルに既に5があるので、入力できない。

Invalid 5 at (2,2)

と表示される。

図 (2,2)セルが選択されているのを確認後、「Remove」ボタン、または、「Delete」キーを押す
図 「5」を入力しようとした

間違わずに解けた場合、

図 パズルが解けたことを知らせるアラート

アラートが表示され、「Activities」に

The Puzzle Solved!

と表示される。

セルに(正しいと信じる)数字を入れ続けたが、ある時点で、空白の(r,c)セルに入るべき数字iを入力しようとしても、他のセルに既に入っているために、ルールにより、入力できず、

Invalid i at (r,c)

と「Activities」に表示される場合、どこかで間違っていたことになる。どこで間違ったかが分かる場合は、その時点まで「Undo」ボタンを利用する。多くの場合、どこで間違ったかが分からないので、最初からやり直す。最初からは無駄なので、間違っていないと自信がある間に、頻繁に「File>Save」メニューを選び、ファイル(.numpl)に保存し、上述のようになったら、この保存したファイルを開き、落ち着いて再度解き始める。

各数字の位置と残り個数

パズルを解く際に、なるべく残り個数が少ない数字がどのセルに位置しているかが分かることは、パズルを容易に解くための助けになる。「Select number」にある数字ボタンの下にその数字の残り個数を表示するトグルボタンを配置した。そのトグルボタンを押し下げると、現時点でその数字があるセルがマゼンタ色になる。例えば、下図において、残りの個数が最小(ここでは4)の数字、ここでは、5を選び、その下のトグルボタンを押し下げると、5が入力されているセルがマゼンタ色に変わる。(2,6)セル、(5,7)セルに5が入ることが容易に分かる。

図 残りの個数が4個である数字5のあるセルがマゼンタ色になる

全ての解の表示とOriginalパズルに戻る

「File>Show All Solutions」メニューを選べば、全ての解を求め、それらを別ウィンドウに表示する。表示される形式はエクスポート時と同じで、各行が9文字からなる9行の文字列である。下図参照。

図 「File>Show All Solutions」を選んだところ
ExtremelyDifficultExampleAllSolutions
図 この例では、2つの解があり、それらが表示されている。

ただし、計算時間が長くなりすぎる、表示すべき解が多すぎる、こと等への対処はしていない。

また、パズルの解答途中で間違ってないかのチェックに利用可能である。例えば、「File>Show All Solutions」を選んで、下図のように表示された場合は、解答が間違っていたことになる。

図 「このパズルには解がない」ことを示している。

その場合、「Edit>Return Original」を選べば、元の(Originalと呼ぶことにする)パズルに戻る(経過時間も0に戻る)。Originalパズルとは、背景色がライトイエローである修正可能なセルに数字が入っていない状態のパズルであり、解答途中で保存したファイルを読んだ状態ではない。

図 「Edit>Return Original」を選ぶところ

Possibleについて

Possible

(空白である)セルの(その時点の)Possibleとは、1から9までの数字から、ルールにより(その時点で)そのセルに入らないことが分かっている数字を除いたものである。

Possibleの範囲を狭めて行くことにより、NumberPlaceFXは自動的にパズルを解く、または、Memoを利用して自分でパズルを解く。

初期には、Simple Eliminationが適用されている。

Simple Elimination

(空白である)あるセルのPossibleを求める時に、Simple Eliminationを適用するとは、そのセルと同じ行、同じ列、同じMiniGridにあるセルに入っている数字を、1から9までの9個の数字から取り除いたものである。「ルール」より、このセルに入る可能性のある数字は、このSimple Eliminationを適用したPossibleの中にある。

例えば、下図で空白である(2,2)セルのPossibleは479である。何故なら、2行には何もなく、2列には235があり、MiniGrid1には168があるので、123456789から123568を取り除くと、479であるから。図は、「Show Hint」トグルボタンを押し下げて、(2,2)セルをポイントして、その時点で、NumberPlaceFXが内部的に保持している(2,2)セルのPossibleをTooltipとして表示させたものである。

図 (2,2)セルをポイントしたところ、Possibleは479(「Show Hint」の効果)

NumberPlaceFXが内部的に保持しているPossiblesに関して

初期には、Simple Eliminationを適用する。(「Undo」操作を含め)数字が入っていたセルの数字を削除した時には、関連するセル(同じ行、列、MiniGridにあるセル)にSimple Eliminationを適用する。(自動的か否かにかかわらず)セルに数字が入力された時には、関連するセルのPossibleが修正される(同じ行、列、MiniGridにあるセルのPossibleにその数字が入っていれば、削除する)。「Solve Puzzle」ボタンを押して自動的に解いている時は、その時に適用される方法により、Possibleが修正された場合は、それを保持する。注意点は、「Undo」により、関連するセルのPossibleにはSimple Eliminationが適用される、ことである。

自動的に解く

「Solve Puzzle」を押す。その時点からNumberPlaceFXが自動的に解く。「Step by step」チェックボックスがチェックされていると、1ステップ解いたところで停止する。チェックされていないと、停止せずに最後まで解く。解答途中で、あるセルのその時点でのPossibleがなくなれば、「Activities」に

No Possibles! Inconsistent move(s)!

と表示される。NumberPlaceFXは、解けないパズルである(解がないパズルであった、または、NumberPlaceFXが解き始める前の時点で、あるセルに正しくない数字が入力された)、と判断している。

パズルが解けた場合、上記のアラート、または、「Step by step」チェックボックスがチェックされていなければ、次のアラートが表示され、

図 解けたことを知らせるアラート、Total Scoreも表示される

「Activities」に

The Puzzle Solved!

と表示される。Total ScoreはNumberPlaceFXが自動で解き始めた時から数えた点数の総和である。セルに数字を入れる毎に点数が加算される。NumberPlaceFXが、下で述べる、どの方法によりそのことを得たかにより点数が決まる。

自動的に解く過程で、「Activities」に何をしているかの情報が表示される。例えば、(4,6)セルに数字3を入れた場合、

3 at (4,6)

の直前の行に、どの方法により、NumberPlaceFXがこう決めたかを表示する。それらは、次の通りである。ただし、「xxx」は「Row」、「Column」、「MiniGrid」の何れかである。「yyy」は「Row」または「Column」である。「V」はこの方法の結果、どのセルに何が入ったかを、次行に示す、という意味である。

*V Single Possible V*

*V One Confirmed in xxx V*

*V Two Confirmed in xxx V*

*V Three Confirmed in xxx V*

*V Useless at yyy within MiniGrid V*

*V Select One of 49 at (3,2) V* (49と(3,2)は具体例)

これらは、順に、次項で説明する0から5の方法に対応する。ただし、これらはNumberPlaceFXが自動的に解いた時に利用した方法である。

また、Two Confirmed、Three Confirmed、Among 3 MiniGridsにおいて、セルに入力する数字は決まらなかったが、Possibleの範囲を狭めることができた場合、「Activities」に次のように表示される。

?? at (r1,c1),(r2,c2) in xxx

??? at (r1,c1),(r2,c2),(r3,c3) in xxx

? removed at yyy ? within MiniGrid?

ただし、「xxx」は「Row」、「Column」、「MiniGrid」の何れかである。「yyy」は「Row」または「Column」である。?は適切な1から9までの数字1文字である。意味は、順に、「2個のセル(r1,c1)と(r2,c2)が数字??でTwo Confirmedであった。」「3個のセル(r1,c1)と(r2,c2)と(r3,c3)が数字???でThree Confirmedであった。」「Among 3 Minigridsを適用し、MiniGrid?内のyyy ?において、数字?を削除した。」

方法

NumberPlaceFXが自動的にパズルを解く時に利用する方法は次の6個である。0: Single Possible、1: One Confirmed、2: Two Confirmed、3: Three Confirmed、4: Among 3 MiniGrids、5: Select One of Them。自動解法に利用する方法の選び方は、0からある方法まで、である。初期には、0から4までである。すなわち、5: Select One of Themを利用しないと解けないパズルを、自動的に解くことができない。状況に応じて、5: Select One of Themをチェックする必要がある。5: Select One of Themまで選んだ場合、5: Select One of ThemでSelectするOneをThemからランダムに選ぶか1番最初のものを選ぶかを選択できる。Select One Randomlyがチェックされていたら、ランダムにOneを選ぶ。

図 「Method」メニュー

各方法とその方法によりセルに数字が入る場合の点数について述べる。

方法0(Single Possible)

Single Possibleなセルが見つかれば、そのSingle PossibleなセルのPossibleの値が対応するセルに入る。

ただし、Single Possibleなセルとは、そのセルのPossibleがただ一つの数字からなる場合である。

方法2から方法4を適用したため、Single Possibleになった場合は、それぞれの方法による点数を得るが、それ以外の場合、加算される点数は1点である。

方法1(One Confirmed)
  1. (R):ある行において、ある数字をPossibleに含むセルがただ1個しか存在しない場合、その数字が対応するセルに入る。
  2. (C):ある列において、ある数字をPossibleに含むセルがただ1個しか存在しない場合、その数字が対応するセルに入る。
  3. (MG):ある列において、ある数字をPossibleに含むセルがただ1個しか存在しない場合、その数字が対応するセルに入る。

このOne Confirmedによりセルに数字が入る場合、加算される点数は2点である。

方法2(Two Confirmed)
  1. (R):ある行において、2個のセルが存在しそれらのPossibleが共に同じ2個の数字の場合、この行の他のセルのPossibleからこの2個の数字を取り除くことができる。
  2. (C):ある列において、2個のセルが存在しそれらのPossibleが共に同じ2個の数字の場合、この列の他のセルのPossibleからこの2個の数字を取り除くことができる。
  3. (MG):あるMiniGridにおいて、2個のセルが存在しそれらのPossibleが共に同じ2個の数字の場合、このMiniGridの他のセルのPossibleからこの2個の数字を取り除くことができる。

このTwo Confirmedが適用され、それによりあるセルがSinge Possibleになり数字が入る場合、加算される点数は3点である。

方法3(Three Confirmed)
  1. (R):ある行において、3個のセルが存在しそれらのPossibleが2個または3個の数字を含み、それらをまとめたものが丁度3個の場合、この行の他のセルのPossibleからこの3個の数字を取り除くことができる。
  2. (C):ある列において、3個のセルが存在しそれらのPossibleが2個または3個の数字を含み、それらをまとめたものが丁度3個の場合、この列の他のセルのPossibleからこの3個の数字を取り除くことができる。
  3. (MG):あるMiniGridにおいて、3個のセルが存在しそれらのPossibleが2個または3個の数字を含み、それらをまとめたものが丁度3個の場合、このMiniGridの他のセルのPossibleからこの3個の数字を取り除くことができる。

このThree Confirmedが適用され、それによりあるセルがSinge Possibleになり数字が入る場合、加算される点数は4点である。

方法4(Among 3 MiniGrids)
  1. (R-R):行方向に横に並んだ3個のMiniGridにおいて;その中の1個のMiniGridにおいて、ある数字がある行にだけ存在する場合、他のMiniGrid内でその数字をその行から取り除くことができる。
  2. (R-MG):行方向に横に並んだ3個のMiniGridにおいて;ある行において、ある数字がその中の1個のMiniGrid以外に存在しなければ、その数字をそのMiniGridの他の行から取り除くことができる。
  3. (C-C):列方向に縦に並んだ3個のMiniGridにおいて;その中の1個のMiniGridにおいて、ある数字がある列にだけ存在する場合、他のMiniGrid内でその数字をその列から取り除くことができる。
  4. (C-MG):列方向に縦に並んだ3個のMiniGridにおいて;ある列において、ある数字がその中の1個のMiniGrid以外に存在しなければ、その数字をそのMiniGridの他の列から取り除くことができる。

このAmong 3 MiniGridsが適用され、それによりあるセルがSinge Possibleになり数字が入る場合、加算される点数は5点である。

方法5(Select One of Them)

Single Possibleなセルが存在しない場合、Possibleの数字の個数が最小のセルを選び、そのセルのPossibleの中から1個の数字を選び、そのセルに入れる。

この5: Select One of Themを適用した場合、加算される点数は6点である。

「Solve Puzzle」ボタンが押されたら、

0: Single Possibleを適用できなくなるまで適用する。適用できなくなったら、次行に行く。

1: One Confirmedを適用できなくなるまで、適用する。ただし、適用できる毎に0に戻る。適用できなくなったら、次行に行く。

2: Two Confirmedを適用できなくなるまで、適用する。ただし、適用できる毎に0に戻る。適用できなくなったら、次行に行く。

3: Three Confirmedを適用できなくなるまで、適用する。ただし、適用できる毎に0に戻る。適用できなくなったら、次行に行く。

4: Among 3 MiniGridsを適用できなくなるまで、適用する。ただし、適用できる毎に0に戻る。適用できなくなったら、次行に行く。

5: Select One of Themを適用できなくなるまで、適用する。ただし、適用できる毎に0に戻る。

ただし、「Method」メニューでチェックされていない方法は利用できない。ある方法を適用できる、とは、セルに数字が入るか、少なくとも1個のセルのPossibleの範囲が狭められることである。まだ、パズルが解けてなく、利用できる方法すべてが適用できなくなった場合、このパズルは、チェックされた方法で、解けない。「Step by step」チェックボックスがチェックされている場合、ある方法を適用できた時点で停止する。

5: Select One of Themがチェックされている場合、方法0から方法4までが適用できず、5: Select One of Themが適用されたら、「Step by step」チェックボックスの状態に関わらず、途中で停止せずに最後まで解く。

Memoの利用

自分でPossiblesを修正しながらパズルを解く時に、便利なウィンドウである。

図 Memoウィンドウ

Memoウィンドウにおけるセルの選択には、マウスのクリックを想定している。このMemoウィンドウの各セルにPossibleを記入し、修正し、それに応じてセルに入る数字が一意に決まれば、Mainウィンドウの対応するセルにその数字を入力していく。これを容易にするために

  1. MemoウィンドウのセルのPossibleを数字キーを利用して入力する時、Mainウィンドウの対応するセルにSimple Eliminationを適用して得られるPossible以外の数字を入力しようとしても、無視される。数字を入力する順序にかかわらず、キーボードフォーカスがなくなった時点で、左から小さい順に並ぶ。
  2. Memoウィンドウのセルをマウスでクリックすると、選択されたセルのPossibleの背景は、シアン色になる。この時、Mainウィンドウの対応するセルもシアン色になる。
  3. 一方、Mainウィンドウのセルをクリックすると、そのセルはシアン色になる。この時、Memoウィンドウの対応するセルのPossibleの背景は赤色になる。MemoウィンドウのPossibleの背景が赤色の時に、数字キーを押すと、Mainウィンドウの選択されたセルへのその数字の入力となる。すなわち、MemoウィンドウのPossibleを参照しながら、Mainウィンドウの対応するセルに数字を入力する場合、MemoウィンドウのセルのPossibleの背景が赤色になっていることを確認する必要がある。
  4. One Confirmed、Among 3 MiniGridsが適用可能か容易に判断できるように、Memoウィンドウの上方の「Find」の右にある数字トグルボタンを押し下げると、その数字をpossibleに含むセルにマゼンタ色の印が付く。

Memoウィンドウの(Your )PossiblesとMainウィンドウのNumberPlaceFXが内部的に保持しているPossiblesとは異なるもので連動していない(後述する「Synchronize」ボタンを押したときは、例外であり、その時にコピーされるが、以後は連動しない)。

MemoウィンドウのPossibleは自分で修正する以外に、Mainウィンドウでセルに1から9までの数字を入れた場合にのみ、(NumberPlaceFXが内部的に保持しているPossibleと同様に)関連するセルのPossibleが修正される。それ以外の、Mainウィンドウでセルの数字を削除した場合、Undoした場合、MemoウィンドウのPossibleは変化しない。

通常は、Memoウィンドウの(Your )Possiblesを参照しながら、それに基づき、Mainウィンドウのセルに適切な数字を(Memoウィンドウの対応するセルのPossibleの背景が赤色であることを確認して)入力する。しかし、間違って、意図しないセルに意図しない数字を入力することがある。この時、Memoウィンドウの(Your )Possiblesが、間違って、修正される。

意図しないセルに意図しない数字を入力したのが1回だけの場合、Mainウィンドウの「Undo」ボタンを1回押し、Memoウィンドウの「Set Last」ボタンを押す。これで、元に戻る。

Show Last

この他、Memoウィンドウでは、NumberPlaceFXが「Solve Puzzle」ボタンを押した時に各セルのPossibleに何をしているのかを、事後的に、確認できる。

Memoウィンドウの「Synchronize」ボタンを押す。これで、この時点で、NumberPlaceFXが内部的に保持しているPossiblesがMemoウィンドウの(Your )Possiblesにコピーされる。「Show Last」チェックボックスをチェックする。Mainウィンドウに戻り、「Step by step」チェックボックスをチェックする。「Solve Puzzle」ボタンを押す。ボタンを押す毎に、1ステップずつ解かれ、Memoウィンドウでは変更があったセルのPossibleの直前の値が現在の値の下に赤色で表示される。

Memoを利用している具体例に関してはここを参照。

Memo: Select One of Themの利用

パズルを自分で(または、NumberPlaceFXがSingle Possible、One Confirmed、Two Confirmed、Three Confirmed、Among 3 MiniGridsを利用して、自動で)解く場合、Possibleを狭めてセルに入る数字が確定した時に、その数字をそのセルに入力する、ことを可能な限りし続ける。この方法で解けた場合、見つかった解がそのパズルの一意の解である。しかし、ある時点でSingle Possibleなセルがなく、どのセルのPossibleも2個以上の数字を含んでいて、これ以上狭めることが出来ない状態に陥る時がある。この状態をNo Single Possibleと呼ぶことにする。

この時に試みる方法は、Possibleの数字の個数が少ないセルと数字を1個を選び、仮に、そのセルにその数字を入れて、解き進めることである。解が見つかれば、その仮に入れたことが成功であった。解が見つからなかったら、元に戻り、そのセルに違う数字を入れて、同様のことを行う。解が見つかるか否かが分かる前に、No Single Possibleな状態に陥れば、その時点で、また、Possibleの数字の個数が少ないセルと数字を1個を選び、仮に、そのセルにその数字を入れて、解き進める。解が見つかった場合、複数の解を求める必要がなければ、終了し、複数の解を求める必要があれば、他の可能な場合を調べる。

「Method」メニューで5: Select One of Themがチェックされている場合、「Solve Puzzle」ボタンを押せば、NumberPlaceFXが自動で最初に見つかった解を表示してくれる。Memoウィンドウを利用して自分で解く場合、または、「Solve Puzzle」ボタンを押して解く場合、Memo: Select One of Themウィンドウでは以下のことを行う。

  • 現在、どのセルにPossibleのどの数字を仮に入力しているか?を表示する。
  • その試みに成功した場合、失敗した場合を表示する。
  • (このレベルでの全ての可能な試みが終了した場合)こちらの指示により、上述の仮に入力する前の元の状態に戻す。
  • その試みに成功するか失敗するか分かる前に、また、No Single Possibleな状態に陥れば、1つレベルを上げて、同様に対処する。
  • 深いレベルの結果を浅いレベルに自動的に反映する。
  • その時点までに求まった解の個数を表示する。

このウィンドウを表示するにはMemoウィンドウの下方にある、「Show Select One of Them」トグルボタンを押し下げる。(この操作の前に、Mainウィンドウに戻りメニュー「File>Save As…」を選び、適切なファイル名で保存するのが望ましい。)

VeryDifficultExampleMemoSelectOne0Rev
図 Memo: Select One of Themウィンドウ

以下では、ある具体例でのMemo: Select One of Themを利用する部分だけを説明する。

「+」ボタンを押すと、その時点のセルと(NumberPlaceFXが保持しているものとMemo: Your Possiblesの両方の)Possiblesが保存され、どのセルにどの数字を仮に入れるか、現時点での成功、失敗を表示する部分が表示される。この時点ではどのセルなどが不明なので、「Select ? of ??? at (?,?)」と「?」が表示される。MainウィンドウでPossibleの数字の個数が少ないセルと数字の中から1個を選び、そのセルをクリックし、その数字を入力する。

この例では、(1,2)セルを選び、そのPossible 34の中から3を選ぶと、「Select 3 of 34 at (1,2)」と表示され、「Restore」と「+」ボタンが利用可能になる。

VeryDifficultExampleMemoSelectOne1Rev
図 レベル1、Memo: Select One of Themウィンドウ
VeryDifficultExampleMemoSelectOne2Rev
図 (1,2)セルに数字3を入力したところ

(自分で、または、「Solve Puzzle」ボタンを押してNumberPlaceFXが自動で)パズルを解き進める。解が求まった時点、または、解法が間違っていることが分かった時点で、「Restore」ボタンを押す。(解が求まった場合、「Restore」ボタンを押す前に、Mainウィンドウに戻り、メニュー「File>Save As…」を選び、適切なファイル名で保存するのが望ましい。)仮に入れていた数字が、解が求まった場合はSolved: の右に、そうでない場合にはFailed: の右に追加される。解が求まった場合には、solutionの前にある数字が1つだけ増える。解が求まるか、解法が間違っているか不明なまま、また、No Single Possibleな状態に陥れば、「+」ボタンを押し、1段階深いレベルに入る。

下図はレベル1で、解法が間違っていることが分かったので「Restore」ボタンを押し、「Failed: 3」と表示され、もう一つの候補4を(1,2)セルに入力して解法を進めたが、No Single Possibleな状態に陥ったので、「+」ボタンを押す直前である。

VeryDifficultExampleMemoSelectOne3Rev
図 「Restore」ボタンを押し、3がFailedになったところ
VeryDifficultExampleMemoSelectOne4Rev
図 (1,2)セルに他の候補である数字4を入力して解法を進めているところ

「+」ボタンを押しレベル2に入る(下左図参照)。この例では、(1,5)セルのPossibleが27であるので、2を仮に入れて解法を進めると、解法が間違っていることが分かった(下右図参照、「Restore」ボタンを押す前の状態)。

VeryDifficultExampleMemoSelectOne5Rev
図 レベル2、Memo: Select One of Themウィンドウ
VeryDifficultExampleMemoSelectOne6Rev
図 (1,5)セルに数字2を入力し解法を進め、間違っていることが分かった

「Restore」ボタンを押すと、数字2で失敗したことを示す「Failed: 2」が表示される(下左図参照)。残りの候補7を(1,5)セルに入れて解法を進めると、解が求まる(下右図、「Restore」ボタンを押す前の状態)。

VeryDifficultExampleMemoSelectOne7Rev
図 レベル2、「Failed: 2」が表示された。
VeryDifficultExampleMemoSelectOne8Rev
図 (1,5)セルに残りに候補である数字7を入れ解法を進めると、解が求まる。

「Restore」ボタンを押すと、7を入れて解が求まったことを表す「Solved: 7」が表示され、今までの求まった解の個数が「1 Solution」と右上に表示される(下左図参照)。「X」(クリア)ボタンを押すと、レベル1の最初の状態に戻る。この時、レベル1の仮に4を入れた試みの結果(上記のレベル2で「Solved: 7」であったので、解が見つかったことを表す)「Solved: 4」が表示されている(下右図参照)。以上で全ての可能な場合を尽くしているので解が1個であること(一意の解であること)が分かる。

VeryDifficultExampleMemoSelectOne9Rev
図 レベル2で解が求まった。
VeryDifficultExampleMemoSelectOne10Rev
図 レベル1に戻る。全ての可能な場合を尽くしているので一意の解である。

途中で手順を間違ったら、最初に戻ることが望ましい。従って、Memo: Select One of Themウィンドウを表示させる直前に、Mainウィンドウに戻り、メニュー「File>Save As…」を選び、適切なファイル名で保存しておく。途中で手順を間違ったら、メニュー「File>Open…」を選び、このファイルを読み、Memo: Your Possiblesウィンドウの「Synchronize」ボタンを押して(必要なら、Memo: Your PossiblesウィンドウでPossibleの修正を行い)、もう一度、最初から始める。

Memo: Select One of Themを利用している具体例に関してはここを参照。

ファイルに保存、開く

「File>Save」または「File>Save As…」で現時点でのパズルを保存できる(.numpl)。修正できないセルの情報も保存される。(81個のセルの内容と修正の可否のみを保存する。)「File>Open…」で以前に保存したファイル(.numpl)を開くことができる。パズルを解答途中で中断し、後で、中断した時点から解く場合に、利用できる。

インポートとエクスポート

ネット上に公表されている、雑誌に載っていた、等の外部にあるパズルを解きたい場合、そのパズルを、空白セルを0とし、1行に9文字、9行からなる文字列として表現したテキストファイル(.txt)として作成する。「File>Import…」でそのテキストファイル(.txt)をインポートできる。その際、1から9までの数字の入ったセルは修正不可能と解釈される。



図 外部パズルをエディタ(メモ帳)に入力

「File>Export…」で現在のパズルをエクスポートできる。空白セルは0と解釈され、1行が9文字、9行からなるテキストファイル(.txt)として、保存される。ただし、修正できないセルの情報は破棄される。

パズルの生成

「File>New」で「Level」メニューで指定されたパズルが生成される。自動生成に時間がかかる場合がある。待てない時のために、生成中にキャンセルできる。自動生成に成功した場合、例えば、「Generated a Difficult Puzzle (2 minutes)」と作成時間(分)が表示される。

図 Difficultレベルを自動生成中、「Cancel」ボタンを押す
図 自動生成をキャンセルしたことを知らせるアラート

既定ではPoint Symmetric(点対称な)Easyレベルのパズルが自動的に生成される。この既定値は、後述するように、変更できる(ただし、「File>New」を選ぶ前に、「Level」メニューで指定すればよいので、点対称とレベルの既定値の変更の有用性は少ない)。

図 「Level」メニュー、現在、EasyとPoint Symmetricが選ばれている

点対称ではない、または、他のレベル(Medium、Difficult、Very Difficult、Extremely Difficult)のパズルを自動生成する場合、または、自分でパズルを入力する場合(Manual Input)、それをチェックする。

Easy、Medium、Difficultレベルのパズルは、方法のところで述べた方法4(Among 3 MiniGrids)までで解ける。また、一意の解を持つ。Extremely Difficultレベルのパズルは方法5(Select One of Them)を利用しなければ解けない。また、複数の解を持つ。Very Difficultレベルのパズルは、一意の解を持つが方法4(Among 3 Grids)まででは解けない。Very Difficultレベルのパズルの空白セルの個数はDifficultレベルのパズルの空白セルの個数を利用するが、総点数(Total Score)は無視する。

パズルを作成する、ということは、数字を入れる初期の複数のセルの位置とその数字を決めることである。そして、これらの初期の1から9までの数字が入っているセルが修正できないセルとなる。点対称なパズルとは、これら修正できないセルの位置が(5,5)セルを点対称な中心点として、点対称である、ことである。すなわち、どの修正できないセルの点対称な位置にあるセルも修正できないセルである。例えば、(1,3)セルが修正できないセルならば、それの点対称な位置にある(9,7)セルも修正できないセルである。

図 点対称なパズルの例
図 点対称ではないパズルの例

自分で入力する(Manual Input)

メニュー「Level>Manual Input」をチェックし、「File>New」を選ぶと、新しいパズルを自分で入力できる。データを入力後、「File>Save As…」を選び、ファイル(*.numpl)に保存すると、数字が入ったセルを修正できない、と解釈して保存する。

図 新パズルを自分で入力できる

外部のパズルを利用するには、この「自分で入力する」か、目的のパズルを空白セルを0とし、1行に9文字、9行からなる文字列として表現したテキストファイル(.txt)として作成し、「File>Import…」を利用するか、のどちらかである。

「Level」メニューの既定値の変更

メニュー「Level>Detail…」を選ぶ。次の「Detail of Level」ダイアログボックスが表示される。

図 「Detail of Level」ダイアログボックス

第1項目と第2項目は自動生成するパズルのレベルとそれが点対称であるか否かの設定である。第3項目はNumberPlaceFXを起動した時に、Easyパズルを自動的に生成するか否かの設定である。既定では自動生成する、であるが、起動に時間がかかる場合は、チェックを外す。それ以降の項目は、自動生成するEasy、Medium、Difficult、Extremely Difficultなパズルに関する設定である。各レベルにおいて、空白セルの個数とそれを(自動的に)解いた時の総点数(Total Score)の範囲を指定できる。Very DifficultなパズルはDifficultなパズルの空白セルの個数だけを利用し、(総点数は無視し)方法4(Among 3 MiniGrids)まででは解けないが、一意の解があるパズルを探す。下方にある注意の通り、空白セルの個数を多くし過ぎる、総点数の範囲を狭くする、等は生成時間を非常に長くする可能性がある。既定値を変更する場合は、「Apply」ボタンを押す。設定された内容が、NumberPlaceFXディレクトリにNumberPlaceFX.confファイルとして保存される。既定値に戻したい場合は、「Restore Default」ボタンを押す。

経過時間計測の停止、再開

「File>New」で新しいパズル(Manual Input以外)を生成する、「File>Open」でパズルをファイルから読む、「File>Import」でパズルをテキストファイルから読む、と経過時間の計測が0から始まり、解けた時点で終了する。この経過時間はステータスバーに表示され、1分毎に更新される。途中で休息することも考慮に入れ、「Pause」トグルボタンを押し下げると、この経過時間の計測を停止し、押し戻すと、計測を再開する。また、停止中はパズル等を非表示にし、主な操作を不可能にした。

図 「Pause」トグルボタンを押し下げたところ

解答時間、アクティビティの保存

「File>Save Solving Time」がチェックされており、Originalパズルから解答を始め、自力で解いている場合、解けた時点でファイル(NumberPlaceFXSolvingTimes.data)に経過時間(特に、解答時間と呼ぶことにする)等を追加する。ここで、自力で解くとは、「Solve Puzzle」ボタンを押しNumberPlaceFXに(全部、または、一部を)自動で解かせない、ことである。保存される内容は、保存日時、ファイル名(ファイル名がない場合は、Not Saved)、問題(Originalパズル)、解答、解答時間、である。更に、File>Include Activitiesがチェックされていれば、どの数字をどのセルに入れたかの経過(アクティビティー)も保存される。

SaveSolvingTime
図 ファイルメニュー「解答時間の保存」をクリックすればチェックされる
IncludeActivities
図 ファイルメニュー「アクティビティを含む」が表示される、クリックすればチェックされる

ファイルNumberPlaceFXSolvingTimes.dataが存在しなければ、作成する。このファイルが大きくなりすぎることへの対処をしていないので、適当な時点で、NumberPlaceFXSolvingTimes1.data等にファイル名を変更すること。

図 ファイルNumberPlaceFXSolvingTimes.dataに追加された部分
Activities
図 アクティビティが追加される

ここで、「Originalパズルから解答を始める」とは、以下のいずれかが起こり、解答を始めることである。

  1. 「File>New」で新しいパズル(Manual Input以外)を生成する
  2. 「File>Open」でパズルをファイルから読み、そのパズルがOriginalである場合
  3. 「File>Import」でパズルをテキストファイルから読む
  4. 「Edit>Return Original」を選ぶ

「File>Save Solving Time」は既定ではチェックされていない。チェックされた場合、その情報がNumberPlaceFXの終了時に、NumberPlaceFX.confに保存される。もし、NumberPlaceFX起動時にNumberPlaceFX.confが存在しなければ、既定の「File>Save Solving Time」はチェックされていない、になる。

参考文献

次の文献を参照にしてJavaFXアプリケーションNumberPlaceFXを作成した。

“Programming Sudoku” by Wei-Meng Lee, Apress 2006

ただし、この書物は Visual Studio で作成している。従って、私が理解し得たことをJavaFXアプリケーションとして作成した。

この文献で利用されている用語とそれにより、私が触発されて、ここで利用している用語の対応は次の通りである。

参考にした文献NumberPlaceFX
Column, Row, and Minigrid EliminationSimple Elimination
Lone RangersOne Confirmed
Looking for TwinsTwo Confirmed
Looking for TripletsThree Confirmed
nothingAmong 3 MiniGrids
Brute-Force EliminationSelectOneOfThem