ジャンボ合体ナンプレを解く(解法プログラム) 忘備録

(将来 プログラムを変更するときに備え 記録を残す)

フナハシ学習塾 学習ゲームの広場

学習ゲームの広場 > ゲームindex > ジャンボ合体ナンプレを解く


変数

合体エリアは次のように番地をふってある (ヨコ40 ×タテ20)
0 1 2 3 4 ・・・ 36 37 38 39
40 41 42 43 44 ・・・ 76 77 78 79
80 81 82 83 84 ・・・ 116 117 118 119
・・・
760 761 762 763 764 ・・・ 796 797 798 799


zmn[ ] ナンプレ番号管理 合体エリアの41番地に1番ナンプレを置いたとき zmn[41]=1
zmt[ ] その番地のナンプレタイプ 上記の場合 zmt[41]=1 +ななめのとき zmt[41]=2
zmc[ ] その番地の重なり枚数 上記の場合
zmc[41]=1,zmc[42]=1,zmc[43]=1,
zmc[81]=1,zmc[82]=1,zmc[83]=1
zmc[121]=1,zmc[122]=1,zmc[123]=1
zma[ ] ナンプレ番号から合体アドレスを知る 上記の場合 zma[1]=41
zco[ ] zmc[] の重なり枚数を色で表示するカラー
zt3[ ] 対称3組用データ 1番目のデータは
zt3[6],zt3[7],zt3[8],zt3[9],zt3[10],zt3[11] の6個のデータ
zt3_count 対称3組用のデータ数
zt6[ ] 対称6組用データ 1番目のデータは
zt6[12],zt6[13],zt6[14],zt6[15],zt6[16],zt6[17],zt6[18],zt6[19],zt6[20],zt6[21],zt6[22],zt6[23] の12個のデータ
zt6_count 対称6組用データ数
zkm[ ] 重なり番地管理 例えば sag[81] (1番目のナンプレの左上スタート番地) の場合
zkm[81*10] に重なり数、zkm[81*10+1] から zkm[81*10+9] の間に相手の重なり番地が入る
zdm[ ] ナンプレが重なっている番地を1にする 問題表示、問題読込用
blk[ ] 追加ブロックのアドレス格納 1番目のナンプレが+ななめの場合
blk[60*1+1] から blk[60*1+9] と、 blk[60*1+11] から blk[60*1+19] に +ななめの番地格納
blk_count[ ] 追加ブロックの個数 。 1番目のナンプレが+ななめの場合
blk_count[1]=2 となる。 追加ブロックがあればこれに加算される
lim このプログラムで合体できる合体数 制作時100 (200にしてもさしつかえなし)
a_chk 合体再入力用=1
opn[ ] ナンプレを開いたとき 1 にする
o_count 未開ナンプレの数

map[ ] 数字格納 1番目のナンプレは map[81] から map[161]
sag[ ] 数字格納と作業用 番地は map[ ] と同じ
cmp[ ] 奇数偶数など 1=奇数、2=偶数、3=小さい数、4=大きい数 番地は map[ ] と同じ
cnm[ ] (単位ナンプレの)奇数偶数などの数 1から4は上記の奇数偶数など
5 〜 8 は追加ブロック用
bmp[ ] 追加ブロック格納 1番目のナンプレは bmp[81] から bmp[161]
snum[ ] 数字セット用
tnum[ ] 対称情報作業用
n_num 合体ナンプレ数
npn 作業時ナンプレの番号
b_num 奇数偶数、追加ブロックなど選択用
z_chk 全体の状態 1=合体入力、 2=数字入力、 3=計算中、 4=計算終了
n_chk z_chk = 2 の数字入力のとき、 n_chk=1 数字、 n_chk=2 奇数偶数など
m_chk メッセージを表示させる=1
sel_num 数字入力のとき、選択数
loop 計算中=1
bco[ ] 奇数偶数などでナンプレのバック色用

r_chk 履歴運用 1=履歴に残す
r_count 履歴数
rst[ ] 履歴用配列
txt_1 テキスト Undo 用
txt_2 テキスト Undo 用

tz_chk
ti_chk
ty_chk
tk_chk
tr_chk
tk2_chk
tr2_chk
tr2s_chk
tt3_chk
tt6_chk
タイマー管理

zt3_n 対称3組作業用
zt6_n 対称6組作業用
tmp[ ] 対称作業 (排除用)
p_ck 論理計算で解が1個見つかったとき=1
ppm 論理計算開始番地
rom[ ] 論理計算用 一度調べた番地の snum[ ] を記憶 ssag[ ] へ変換用
rn2_chk ronri2() 用分岐
atj[ ] 解答手順格納
ats[ ] 解答手順のプログラム識別用アルファベット
np_count 解答完了ナンプレ数
end_count 単位ナンプレで、必要解答数
ans_count 総解答数
do_count タイマー用
p_count くりかえし用
owa[ ] 計算状態 1計算途中、2計算途中、3完了
ssag[ ] あぶり出し用
anum[ ]
hjo[ ] 仮置用
hjo_count
ksag[ ] sag[ ] 一時記憶用
kad[ ] 仮置アドレスと数値
knn[ ]
kad_count 仮置総数
kans_count ans_count一時記憶先
oas[ ] 別解あり=1
oksag[ ] 解が1個見つかり、別解調査のとき、一時記憶先
oksag[ ] - ksag[ ] oatj[ ] - atj[ ] oans_count - ans_count
oatj[ ]
oans_count

gr_chk 1=グループ仮置
gans_count ans_count 記憶
gsag[ ] sag 記憶
gad_count グループ仮置カウント
gad[ ] グループ仮置アドレスと数値
gnn[ ]

ex_map[ ] エクセル用データとして表示するためのマップ
ex_x 合体の一番左のx座標  zma[ ] から算出
ex_y 合体の一番上のy座標   同上
ex_lenx 合体全体のヨコの長さ(文字数) エクセル用
ex_leny 合体全体のタテの長さ(文字数)  同上

プログラムの進行

組合せ
対称アドレス 3組、6組 作成
重なり番地 作成

  ↓

計算
1) 対称3組計算
    ##A--%  ## 解答数。 A 対称3組を表す。 -- 実行パーセント数字。
2) 対称6組計算
    ##B--%  ## 解答数。 B 対称6組を表す。 -- 実行パーセント数字。
3) 論理計算
    ##_n?    ## 解答数。 ? 計算中のナンプレ番号。
      ここで、 一つでもナンプレが解ければ、 1)へもどる。

4) 仮置計算 (論理計算だけで解答が得られないとき)
    n?_$$   ? 計算中のナンプレ番号。 $$ 仮置進行状況 減数カウント
      ここで、 一つでもナンプレが解ければ、 1)へもどる。

  ↓

解答
組合せエリアの数字をクリックすれば、その番号のナンプレの解答を表示。

 【前】 【次】 のボタンでも解答のナンプレを変更できる。


40合体サンプル問題  ナンプレのテキストエリアに貼り付け、【問題読込】を押す 表示に10秒以上かかります
jmu00408920=1201124112811321136114011441202120612101214121812221284128812921296130013041366137013741378138214481452145614601464153015341538154216121616162016241694169817021/45081300090005080204070005000900030100020600040003070005000007000000020400090900030007/95081700090008010702050003000600050100070800050001070004000001000000000900020600010004/18081700080002030402090001000500060200070800040006090003000005000000000500030600020007/80081700040009030706050001000300020400010600020005070005000005000000000200030400090001/14081700010008030704050001000400080300040600090002050002000005000000000200090800040007/96081200060001080309040009000500010500020400030006030008000005000000000700030600010007/18081200060007090304010008000600010900050300010002050003060007000100000107030400090006/29063050002000000400060800010003020005000004000000070900020100080004/99063070004000000300090400090007090007000001000000000100080600020001/82063070008000000400070100030006040009000005000000000900050300020004/46063070009000000200070700040006010006000002000000000300020800090001/82063030001000000700080400080001050009000001000000000300010800060009/88063010002000000400080700030006020009000009000000000900070400060008/97063030004000000600080500070009070003000009000000060700020300010006/62063070004000000900080100040002050001000003000000000700030400020009/53063070001000000300040200060001090004000001000000000900070400020009/56063070005000000100050500030002060009000007000000000800070200040005/57063020007000000900020300080005070001000004000000000600080800030001/36072090008008030000500000500060900010007040009010001000400000703050500080002/77063060005000000800060400030007030001000008000000010300040700040008/58063080001000000300010400090007060002000001000000000500090600020004/35063050008000000300070900060002080001000006000000000400060700030001/70063070006000000500070100020009040003000006000000000700030500010008/67063070002000000400070100030005050008000004000000000900050700060004/99063070006000000300080400020006020005000006000000070400090800010003/26063030001000000900050800040007040002000001000000000600030500080002/58063050007000000800070100020005030004000002000000000200050900070003/77063050006000000700050400030006050002000001000000000600080800020007/72072030008007010000900000800030600040002040003090003000100000302050200050009/07063050003000000200010400060003030007000002000000010500030700040002/73063050004000000600070200030009090005000004000000000700030100020008/06063040009000000800070300050009040006000006000000000900030500010006/05063070002000000100050900050002020004000004000000000700020100030006/41063090002000000700090200050003010006000007000000090400060400020009/18063020004000000900010500030002040008000007000000000100040100060003/36063060005000000700030200010008050004000007000000000800040800040001/43072090003005070000400000500010400010002060007080007000900000902040600070005/67063080004000000100090400090002020007060005000800070908040200050003/23063030005000000800090300050001010003050005000200060302080700040006/25063010002000000900050400020003010007020002000800060105070900030004/201111111111111111111111111111111111111111>40ジャンボ合体解法
人力で解くと8時間以上かかる?