GamePlay

レベル(好み)に合わせてプレイします。

前田稔の超初心者のプログラム入門

実力でゲームを解く

  1. プログラムに頼らずに正々堂々と実力でゲームを解く方法です。
    Number.exe をダブルクリックなどで起動して下さい。
    起動すると初心者レベルの問題が表示されます。
    全ての行・列及び、3×3=9個の小プレートに1~9の数字が入るように数字を配置します。
  2. 次の問題を解いてみましょう。
    左上の小プレートは、1と7が抜けています。
    そこで二個の空のマスに右クリックで1と7をマークします。

  3. 一行目に注目すると、既に1が配置されていて、1-3は 7 に決定です。
    従って、3-2は1に決定です。
  4. 次に9列に注目すると 1 5 6 が抜けています。
    3行目には既に6と1があるので3-9は 5 に決定です。
    これを繰り返して実力でゲームを解いて下さい。
  5. Tool/ErrCheck でエラーをチェックしながら進めて下さい。
    完成したと思ったら NewGame/Complete で完成を確かめます。
    失敗したときは Tool/ErrCheck でエラーのマスを確認して下さい。
    Tool/ErrCheck を実行するとヒントや色がリセットされます。
    NewGame/Init で出題図に戻ります。
  6. どうしても正解が見つからないときは Tool/Anser を選択すると正解が表示されます。
    Tool/Anser で正解が表示されるのは Level-1 Level-2 Level-3 で自動生成したときだけです。
    次の問題を選ぶときは NewGame から Level-1 or Level-2 or Level-3 を実行して下さい。
    ゲームの終了は File/Exit を実行します。
  7. 新聞や雑誌やネットに掲載されている問題を作成(タイプ)するのも簡単です。
    今解いている問題を File/Save から w.dot で保存して下さい。
    保存した問題は次のようになっています。
    数字が問題図に表示されている数字で . が空欄です。
    94.1..2..
    285.6.1.3
    6.37..9..
    .6.27.534
    ..465.7.8
    7.98.36..
    5......19
    ...31.857
    ..1.9...2
    
  8. このフォーマットに合わせて UTF-8 でタイプすれば幾らでも問題を作成することが出来ます。
    作成した問題を実行するときは File/Load から入力して下さい。

プログラムで候補の数字を探す

  1. 全ての行・列や9個の小プレートで抜けている数字を探し出すのは結構面倒です。
    そこで数字の候補をプログラムで探してみましょう。
    Tool/Hint を実行すると足りない数字が小さく表示されます。

  2. マスの中に数字が1個しかないときは、その数字に確定です。
    数字を確定して Tool/Hint を実行すると更新された局面のヒントが表示されます。
  3. もう少し工夫したツールを使ってみます。
    Hint/SetHint を実行して下さい。
    マスの数字が1個で確定できるときは赤で、複数個でも確定可能な数字が緑で表示されます。
    このツールを使えば、赤と緑のマスに数字を設定するだけでパズルを解くことができます。
  4. さらに Hint/RunHint を使えば赤のヒントを自動的に設定してくれます。
    Hint/SetHint と Hint/RunHint を繰り返すだけでパズルの解析が進みます。
  5. Hint/RunHint は赤のヒントしか設定してくれませんが、Hint/Think は確定出来る全ての数字を設定します。
    Hint/SetHint の実行は省略可能で Hint/Think を繰り返すだけで初級のパズルは完成します。
  6. Level-1 Level-2 Level-3 で自動生成した問題では、複数の解が存在することがあります。

    そのときは、例えば 1 8 のマスの片方を1に確定して Hint/Think を実行して下さい。
    問題によって、同様の操作を繰り返すとパズルが完成します。
    ここまでの操作で問題が解けるのは初級問題で、ここからが本番です。

Hint を編集する

  1. プログラムに任せないで、自分でヒントを編集しながら問題を解きます。
    「対の検索」で見つけたヒントなどは自分で編集する必要があります。
  2. Hint/SetHint は、現在のヒント(小さな数字)をリセットして最初からヒントを求めます。
    それに対して Hint/PreHint は、現在のヒントを引き継いでヒントを求めます。
    もし局面とヒントが合致しないと誤った情報が表示されます。
    また Hint/All も現在表示されているヒントが正しいことが前提です。
    Hint/Thinking もプレイヤーが設定したヒントを継承して問題を解きます。
  3. Hint の編集は、ヒント(小さな数字)を右クリックして下さい。
    数字が確定するとヒントも変わるので Hint を更新しながら Hint/PreHint Hint/All などを使って問題を解いて下さい。
  4. ヒントが壊れたら Hint/SetHint などを実行すると正しいヒントが設定されます。
    ヒントが初期化されるのは次のメニューで、他のメニューはヒントを継承します。
    Hint
    SetHint
    RunHint
    Think
    
  5. 作業中にマーク(記憶)しておきたいマスが生じることがあります。
    Tool/ColorON を選択してマスを左クリックするとマスの色が次々と3回変わります。
    Tool/ColorOFF を実行すると元のモードに戻ります。
  6. 現在の局面を残しておいて、もう少し進めたい場合があります。
    TestMode/Chenge を選ぶと「通常モード⇔テストモード」に切り替えます。
    テストモードに切り替えて局面が壊れても TestMode/Chenge を選ぶと元の局面に戻ります。

HintOne, All を使う

  1. 次の問題を作成(タイプ)して起動して下さい。
    空欄は . または 0 でタイプします。
    100002000
    009087000
    000300200
    400063000
    508700090
    000000000
    203009085
    016000700
    090000040
    
    Hint/Think を繰り返すと次の局面で進展しなくなります。
    Hint/SetHint や Hint/RunHint を実行しても効果がありません。

  2. グループ内で対を検索して削除出来るヒントを調べます。
  3. Hint/HintOne を実行すると「行,列,3*3行,3*3列」を順に繰り返して対を検出します。
    対が見つかると確定出来るヒント(1 2 の数字)が緑色で表示されます。
    そのマスに1と2を確定して Hint/Think でパズルが完成します。
  4. Hint/All を実行すると「行・列・3*3」を一度に実行して対を検出します。
    対が見つかると確定出来るヒントが赤または緑で表示されます。
    赤の数字のマスを確定して Hint/Think でパズルが完成します。

チェーンを調べる

  1. ここからは上級問題に挑戦です。
    次の問題(N08.num)を作成して起動して下さい。
    9...3....
    ....4.3..
    5.781..4.
    ......8..
    7..4..13.
    .......5.
    .14..67..
    .6..57...
    .......8.
    
    Hint/Think を繰り返すと進展しなくなる局面が現れます。
  2. 9-5 に設定されている数字の候補 2,9 から 9 を消すことが出来ることをチェーンを使って調べます。
    現在の局面を壊さないように TestMode/Chenge でテストモードに切り替えます。
    TestMode/Terget から 9-5 のマスを選択するとマスの色が変わります。
    Terget はチェーンを調べるために、ターゲットのマスを設定するメニューです。
  3. 9-5 から連鎖する9に関連するグループのマスは次の通りです。
    5-5, 6-5, 9-4, 9-7, 9-9, 7-4
    この中から最も有力なマスは 5-5 と 9-7 です。

  4. 9-7 から右クリックで9を消し、TestMode/Chain を実行すると 9-5 の 9 が消えます。
    9 が消えて 2 だけになると、9のチェーンが成立します。
    TestMode/Chain の実行結果として空のマス(数字の候補が無い)やグループ内で同じ数字が設定されたときは破綻です。
    Chain は数字の論理的な関連や複数解答を調べるときに利用します。
  5. チェーンが成立すると TestMode/Chenge で元の画面に戻ります。
    9-5 から9を消し、2が確定します。
    2の確定により 9-1の3 7-1の2 4-5の7 が確定します。
  6. ここまでくれば Hint/Think でパズルが完成します。
    この手順中 9-7 から9を消すと 9-5 から9が消えるのがミソですが、次のように連鎖されます。
    このパズルの最大の難関は、このような連鎖を見つけ出すことにあります。

Search を使う

  1. プレイヤーが数字の連鎖(チェーン)を探し出すのは、非常に面倒です。
    そこでチェーンを検索してくれる TestMode/Search をサポートします。
    先の問題(N08.num)を起動して進展が無くなるまで Hint/Think を繰り返します。
  2. TestMode/Search を実行すると「チェーンが成立」が表示されて、マス(1-8)の1が赤で表示されます。
    ヒントが赤の数字は、これを消すことが出来ることを意味します。
    赤の1を右クリックして消して下さい。
  3. 1が消えると、マス(1-8)の7とマス(1-4)の6とマス(2-4)の7が確定します。
    数字の確定に従って、ヒントを整理します。
    ヒントの消し忘れなどがあると、誤った結果になる場合があります。
  4. 続いて Search メニューを実行するとマス(5-9)9が赤で表示されます。
    赤の9を右クリックして消して下さい。
  5. マス(5-9)の2とマス(5-3)の6とマス(5-5)9が確定します。
  6. マスが大分埋まったので RunHint メニューを実行するとゲームが完成します。
    難問では、Search メニューを繰り返して徐々にマスを埋めて下さい。
    N09.num や N10.num を解いてみて下さい。
    難問なので Search メニューを繰り返し使います。
    超難問を除いてナンプレの問題を解けるようになりました。

SearchN を使う

  1. TestMode/Search を使って一個ずつチェーンを探すのが面倒になりました。
    そこで複数回まとめてチェーンを検索してくれる TestMode/SearchN をサポートします。
    N09.num を起動して進展が無くなるまで Hint/Think を繰り返します。
    .5....9.8
    41.......
    ...54...2
    ..4..862.
    8.......1
    9........
    .9..5..86
    2.13.6...
    ....1...9
    
  2. 数字の9を右クリックして、繰り返し回数を設定します。
    TestMode/SearchN を実行すると9回のチェーンが実行されて、消去可能な数字が消されます。
    1-5 には 6 が、5-2 には 2 が一個残っています。
    この二つを確定して進展が無くなるまで Hint/Think を繰り返します。
  3. 数字の9を右クリックして、繰り返し回数を設定します。
    TestMode/SearchN を実行すると9回のチェーンが実行されて、消去可能な数字が消されます。
    6-9 には 3 が、8-7 には 7 が一個残っています。
    この二つを確定して Hint/Think を実行するとパズルが完成します。

DelHint を使う

  1. Version 3.3 から TestMode に DelHint メニューを追加します。
    メニューを実行するとヒントに表示された数字から[破綻するヒント]を削除してくれます。
    これは「TestMode メニュー/Chenge/Play」の応用です。
    このメニューは「思ったより強力」で SearchN メニューをしのぐ威力を発揮します。
    難問レベルの問題は DelHint メニュー一発で解けるようです。
  2. N09.num を起動して進展が無くなるまで Hint/Think を繰り返します。
    ヒント(小さな数字)が表示されていることを確認して下さい。
  3. TestMode/DelHint を実行するとヒントから破綻する小さな数字を削除してくれます。
    今回は一個残ったマスが20個ぐらいあります。
    それらのマスの数字を確定して Hint/Think を実行するとパズルが完成します。

超難問に挑戦

  1. 世界一難しい数独 に挑戦します。
    過去の「世界一難しい数独」
    ..53.....
    8......2.
    .7..1.5..
    4....53..
    .1..7...6
    ..32...8.
    .6.5....9
    ..4....3.
    .....97..
    
    今回作成された「世界一難しい数独」
    8........
    ..36.....
    .7..9.2..
    .5...7...
    ....457..
    ...1...3.
    ..1....68
    ..85...1.
    .9....4..
    
  2. SearchN と DelHint の強力なメニューが揃ったので「世界一難しい数独」に挑戦します。
    「世界一難しい数独」と言われるだけあって、DelHint では目立った進展はありませんでした。
    そこでヒントを整理した後で「二択のヒント」に注目します。
    二択のどちらかが正解で50%の確率だからです。
    二択のマスを二個(最終的には三個)組み合わせて、破綻するか調べます。
    二個の組み合わせでは正しいか否かが判定できませんでした。
    次に三個組み合わせて調べてみました。
    2*2*2=8 で1/8の確率で正解があるはずです。
    三個組み合わせると破綻するケースが見つかり、初期の盤面では機能しなかった SearchN も使えるようになりました。
    8通りを順に SearchN と DelHint と Think を組み合わせて正解が得られました。
  3. DelHint と言う強力な関数が出来たので、これを Super に組み込みます。
    今まで解けなかったほとんどの問題を Super メニュー一発で解くことが出来るようになりました。
    Super メニューは再帰関数を使っているのですが「世界一難しい数独」も一発で解くことが出来ました。

メニューの説明

  1. File メニューです。
    親メニュー 子メニュー 説明
    File(&F)
    Save(&S) 数字テーブルを保存する
    Load(&L) 数字テーブルとヒントを入力する
    SaveAll(&A) 数字テーブルとヒントを保存する
    Exit(&X) プログラムを終了する
  2. 問題の作成は NewGame メニューで行います。
    親メニュー 子メニュー 説明
    NewGame(&G)
    Lebel-1(&A) 初心者レベルの問題です
    Lebel-2(&B) 初級者レベルの問題です
    Lebel-3(&C) 中級者レベルの問題です
    Init(&R) リセットして出題図に戻す
    Complete(&Q)回答が正しいことを確認する
  3. Tool メニューです。
    親メニュー 子メニュー 説明
    Tool(&T)
    ErrCheck(&C) 現在の局面のエラーをチェックする
    Hint(&H) マスに入る数字候補(ヒント)を表示する
    ColorON(&E) カラーモードに設定する
    ColorOFF(&O) カラーモードを解除する
    Anser(&P) 自動生成モードの解答を表示する
  4. Hint メニューです。
    親メニュー 子メニュー 説明
    Hint(&P)
    SteHint(&S) 可能性のある数字(ヒント)をカラー表示する
    PreHint(&C) 現ヒントを引き継いで数字候補(ヒント)を表示する
    HintOne(&O) グループ毎(行・列・3*3行・3*3列)の順に対を解析する
    HintAll(&A) グループ(行・列・3*3行・3*3列)を一度に対を解析する
    RunHint(&R) 候補が一個の数字(赤色)を確定する
    Think(&T) 数字候補を解析して確定する
    Thinking(&X)現ヒントを引き継いで解析する
  5. TestMode メニューです。
    親メニュー 子メニュー 説明
    TestMode(&T)
    Chenge(&C) 通常モード⇔テストモードに切り替える
    Play(&P) 現在の設定モードで問題を解く
    Terget(&G) チェーンを調べるために、ターゲットを設定する
    Chain(&H) 数字の連鎖(チェーン)を調べる
    DelHint(&D)破綻するヒントを削除する
    Search(&S) 数字の連鎖(チェーン)を探し出す
    SearchN(&N)Search を連続して実行する
  6. Help メニューです。
    親メニュー 子メニュー 説明
    Help(&H)
    Version(&V) バージョン情報を確認する
    Super(&S) 再帰関数を使って問題を解く

超初心者のプログラム入門(C# Frame Work)