じゃばのひまつぶし:ExcelVBAによる競馬ソフト自作教室とJRA-VAN登録ソフト(おずたんシリーズ)のサポートサイトです。
タラレバ倶楽部ページ<Excel VBAであれこれ作ろう>
<番外編:ナンプレ解析ソフトの作り方>
解析フローチャート
 
NumberPlace_2

(更新:2019-04-28)

本ページを閉じる場合は右上のクローズボタン[×]で閉じてください。

ここから実際のプログラムを説明していきます。自作に興味のない方と脳トレのためにナンプレを解く方は飛ばしてください。
また競馬ソフトに役立つ内容かどうかはわかりません。無駄ではないと思いますが・・・
扱う数字が「1〜9」までで、変則的な処理が少ないので、競馬ソフトよりは簡単と思います。
フローチャート

フローチャートを作るほどのプログラムではないですが、後の整理のためにまとめておくと便利です。
右図は前ページの手順をフローチャート図にしたものです。
一番重要なのは「1か所に特定できる数値検出・記入」の部分で、特定できる数値がある限り繰り返します。
メインの「1か所に特定できる数値検出・記入」を行うフローチャートは右図です(前図の「解析開始(Do-Loop)」と「特定できる数値はあるか?」の部分を含む)。
実際のプログラムがこの通りになっているわけではありませんが、考え方の流れです。
前述のフローチャートで「ブロックの有効組合せ表を作る(初回のみ)」という部分の実行例は下図。
特定できる数値がなくなると全ブロックに入る候補数値を調べ、その組合せを"Special"シートに展開します。

下図の例では、青字・赤字の数値までは「1か所に特定できる数値」があり、ブロック9のみ埋まりますが、完成できずに中断します。ブロック9以外のブロックには空白があり、空白の数だけ入る候補数値の数があります。ブロック6では2つの候補[7,8]、ブロック8も2つ[1,8]・・・・・ブロック4は5つの候補[1,4,7,8,9]があります。各ブロックに入りうる数値の組合せは下記のように候補数で決まります。全組合せ数=候補数値数X(候補数値数−1)X(候補数値数−2)X・・・X1
全組合せ数=候補数値数X(候補数値数−1)X(候補数値数−2)X・・・X1

候補数値の数と全組合せ数
2個・・・2通り
3個・・・6通り(3X2X1)
4個・・・24通り(4X3X2X1)
5個・・・120通り(5X4X3X2X1)
6個・・・720通り(6X5X4X3X2X1)
7個・・・5040通り(7X6X5X4X3X2X1)
8個・・・40320通り(8X7X6X5X4X3X2X1)
9個・・・362880通り(9X8X7X6X5X4X3X2X1)

すべての組合せを調べると膨大な数ですが、実際にはナンプレルールで使えない組合せがあるので、それらを除いた有効な組合せを例のように"Special"シートに展開していきます。上図の例ではブロック4の組合せが17通りで最大となります。組合せ数の少ない順にブロックごとにこの組合せを空白セルに当てはめて出現回数が1回の候補を探し続けます。途中で行き詰れば次の組合せ、そのブロックの全組合せを実行しても完成しなければ、次のブロックへと進めていきます。

(注)9個のセルがすべて空白の場合は、有効組合せの数を計算するだけでもかなり時間がかかるので、通常は8個までの空白ブロックを対象にします。9個の空白のブロックも組合せ数を計算するときはシートの「空白8個まで(デフォル)」ボタンをクリックします。
難易度の低いナンプレ問題で、ブロックすべてが空白の例もありますが、デフォルトのままで解析できます。超難問の場合でも8個までのデフォルトのままで行けると思います。解析できなかった場合は9個まで含めたらいいと思いますが、今まで9個まで行った例はありません。感覚的には7個までで対応できると思います。


 Copyright(C):Jaba 2000-