・細江さんから頂いたLightsOutの解を求める、EXELファイル
| ■考察1(33,554,432通りの組合せ) |
1.同じ場所を偶数回押しても意味が無い。(押さなかったと同じ)
2.押す順番は関係ない。(解答は2次元マップのオンオフで表現可)
つまり、ライツアウトの解は、全25マスについて押すか押さないかの、2の25乗=33,554,432通りを調べれば解が得られます。
| ■考察2(32通りの組合せ) |
| ■考察3(8通りの組合せ) |
|
|
|
|
ここで最上段の左側の2マスに着目してみてください。これは2進数の4通りパターンが網羅されています。この事から上段左側の2マスの押下パターンは適当に固定してしまっても解が得られることを意味します。(最適解の保証は無くなるけど)
つまり、上段左側の2マスを00と固定してしまっても解が得られるし、また、解が1つ見つかれば上の4パターンの押下法を重ねることによって4通りの解が得られる。ということです。
結局、最上段の残りの右3マスだけでの組み合せ(8通り)を調べれば、解を見付けることが出来るのです。
| ■考察4(一発で解を求める) |
|
|
| ■考察5(検証) |
あ=0
い=0
う=(B+C+G+H+I+K+L+O+Q+T+W+X) mod2
え=(A+B+C+K+L+M+Q+S+W+X+Y) mod2
お=(A+C+D+K+M+N+P+T+V+W+X) mod2
か=(A) mod 2
き=・・・・省略・・・・
|
せ=(C+D+E+I) mod2
|
[あ]と[い]が0と言うのは考察3で書いた通りです。さて、試しに[せ]が短い式なのでそれを検証してみます。
最初に立てられる連立方程式の[C,D,E,I]の関係式は次のようになります。
C=(い+う+え+く)mod2
D=(う+え+お+け)mod2
E=(え+お+こ)mod2
I=(え+く+け+こ+せ)mod2
この4つの式を「mod2」のルールで右辺・左辺をそれぞれ加算します。(排他的論理和)
つまり偶数個あるものは消滅し奇数個あるものは1個だけ残るという計算になります。その結果は、
(C+D+E+I)mod2 =(い+せ)mod2
ここで[い]=0なので、せ=(C+D+E+I) mod2 となります。総ての式が同様にして検証できます。
| ■考察6(連立方程式を解く) |
|
|
式1: あい−え−−−−− A−−−−−−−− 式2: あいう−お−−−− −B−−−−−−− 式3: −いう−−か−−− −−C−−−−−− 式4: あ−−えお−き−− −−−D−−−−− 式5: −い−えおか−く− −−−−E−−−− 式6: −−う−おか−−け −−−−−F−−− 式7: −−−え−−きく− −−−−−−G−− 式8: −−−−お−きくけ −−−−−−−H− 式9: −−−−−か−くけ −−−−−−−−I この連立式を解いて下の様な形の連立式に変換したいと言う訳です。 式1: あ−−−−−−−− ????????? 式2: −い−−−−−−− ????????? 式3: −−う−−−−−− ????????? 式4: −−−え−−−−− ????????? 式5: −−−−お−−−− ????????? 式6: −−−−−か−−− ????????? 式7: −−−−−−き−− ????????? 式8: −−−−−−−く− ????????? 式9: −−−−−−−−け ????????? さて、[あ]は式1,2,4にあります。式1だけを残して式2,4の[あ]を消すには、 式1 xor 式2 → 式2と 式1 xor 式4 → 式4のmod2による加算を行います。 つまり左辺・右辺それぞれの「排他的論理和」です。 式1: あい−え−−−−− A−−−−−−−− 式2: あいう−お−−−− −B−−−−−−− ↓ ↓ 式2: −−うえお−−−− AB−−−−−−− そして、 式1: あい−え−−−−− A−−−−−−−− 式4: あ−−えお−き−− −−−D−−−−− ↓ ↓ 式4: −い−−お−き−− A−−D−−−−− その結果、次のようになります。[あ]が式1だけになりました。 式1: あい−え−−−−− A−−−−−−−− 式2: −−うえお−−−− AB−−−−−−− 式3: −いう−−か−−− −−C−−−−−− 式4: −い−−お−き−− A−−D−−−−− 式5: −い−えおか−く− −−−−E−−−− 式6: −−う−おか−−け −−−−−F−−− 式7: −−−え−−きく− −−−−−−G−− 式8: −−−−お−きくけ −−−−−−−H− 式9: −−−−−か−くけ −−−−−−−−I 次に[い]ですが、式2には[い]が無いので[い]のある式3と交換します。 式1にも[い]がありますが、式1は[あ]を残す為の式なので式1と交換してはいけません。 式1: あい−え−−−−− A−−−−−−−− 式2: −いう−−か−−− −−C−−−−−− ←┐ 式3: −−うえお−−−− AB−−−−−−− ←┘ 式4: −い−−お−き−− A−−D−−−−− 式5: −い−えおか−く− −−−−E−−−− 式6: −−う−おか−−け −−−−−F−−− 式7: −−−え−−きく− −−−−−−G−− 式8: −−−−お−きくけ −−−−−−−H− 式9: −−−−−か−くけ −−−−−−−−I では、式2以外の式から[い]を消すために、式2 xor 式1 → 式1,式2 xor 式4 → 式4、式2 xor 式5 → 式5の 排他的論理和を行います。その結果、[い]があるのは式2だけとなりました。 式1: あ−うえ−か−−− A−C−−−−−− 式2: −いう−−か−−− −−C−−−−−− 式3: −−うえお−−−− AB−−−−−−− 式4: −−う−おかき−− A−CD−−−−− 式5: −−うえお−−く− −−C−E−−−− 式6: −−う−おか−−け −−−−−F−−− 式7: −−−え−−きく− −−−−−−G−− 式8: −−−−お−きくけ −−−−−−−H− 式9: −−−−−か−くけ −−−−−−−−I 以下同様にして最終的にはこのような結果となります。 式1: あ−−−−−−−− A−C−−FGH− 式2: −い−−−−−−− −−−−E−GHI 式3: −−う−−−−−− A−CD−−−HI 式4: −−−え−−−−− −−C−EF−−I 式5: −−−−お−−−− −B−DEF−H− 式6: −−−−−か−−− A−−DE−G−− 式7: −−−−−−き−− AB−−−FG−I 式8: −−−−−−−く− ABC−E−−−− 式9: −−−−−−−−け −BCD−−G−I
| ■考察7(5×5ライツアウトの結果) |
式 1: 1-----------------------5 -BCD---H-J---NO----T----- 式 2: -2---------------------4- AB-DE-G-----MNO---S------ 式 3: --3--------------------45 A-CDEF-HI---MN-PQRST-V--- 式 4: ---4-------------------4- ABC---G---------Q---UVW-- 式 5: ----5-------------------5 -BC-EF----K-M-O--R-TUV--- 式 6: -----6-----------------45 --C-E-GH-J--M-----ST----- 式 7: ------7------------------ -B-D-FG-IJ---N-PQR---V--- 式 8: -------8---------------45 A-C--F-HI-----OP-R-TU-W-- 式 9: --------9---------------- --C---GHI-K--NOP--S--VW-- 式10: ---------0-------------45 A----FG---K-M-O-QR-T--W-- 式11: ----------1------------4- ----E---IJ--M-OPQRS--V--- 式12: -----------2-----------4- ----------------Q---UVW-- 式13: ------------3------------ -BC-EF---JK-MN---R--UV--- 式14: -------------4---------4- ABC---G-I---MNO---S------ 式15: --------------5--------4- AB--E--HIJK--NOPQ-S-U---- 式16: ---------------6-------45 --C---GHI-K---OP-R-TU-W-- 式17: ----------------7-------- --CD--G--JKL--O-QRS---W-- 式18: -----------------8-----45 --C-E-GH-JK-M--PQ-STU---- 式19: ------------------9------ -BC--F--I-K--NO-QRS---W-- 式20: -------------------0---45 A-C-EF-H-J-----P-R-TU-W-- 式21: --------------------1---5 ---DE--H---LM-OP-R-TUV--- 式22: ---------------------2-4- --CDE-G-I-KLM-------UVW-- 式23: ----------------------345 ---D---HIJ-L---PQ-ST-V--- 式24: ------------------------- -BCD-F-H-JKL-NOP-R-T-VWX- 式25: ------------------------- A-C-EF-H-J-----P-R-TU-W-Y式24と式25の左辺が消えてしまいました。これでは一意に解を得ることは出来ません。
この2つの式は何を意味しているかと言うと「解の存在条件」を示しています。解が存在する為にはこの2つの式が共に0でなければなりません。
そのどちらかでも計算結果が1なら解は存在しないことになります。
式24: 0 = (B+C+D+F+H+J+K+L+N+O+P+R+T+V+W+X) mod 2 式25: 0 = (A+C+E+F+H+J+P+R+T+U+W+Y) mod 2そしてさらに最後の2マスはオンでもオフでも構わないということも意味します。これは、細江さんの解き方の図を逆さまにしたものと同じですね。
また、この2つの式は計算結果が0になる式であることから、下から3段目以上の計算式に重ねても正しい計算式になります。
つまり、それぞれのマスには4通りの計算式(計算結果は同じ)があることになります。項数が一番少なくなるものをそれぞれ選んでおけばベターですね。
蛇足になるかも知れませんが最後の2マスに0と入れておくよりも、素直に式24と式25を入れておけば、そこを見ただけで解の正誤を知ることが出来ます。
| ■考察8(最適解を求める) |
最後の2マスは4通りの決め方がありますので、その4通りの解の中に必ず最適解が見つかることになります。
尚、一般的には「2の条件式数乗」通りの解があることになります。
式 1: 1---------------------- -5-BCD---H-J---NO----T----- 式 2: -2--------------------- 4-AB-DE-G-----MNO---S------ 式 3: --3-------------------- 45A-CDEF-HI---MN-PQRST-V--- 式 4: ---4------------------- 4-ABC---G---------Q---UVW-- 式 5: ----5------------------ -5-BC-EF----K-M-O--R-TUV--- 式 6: -----6----------------- 45--C-E-GH-J--M-----ST----- 式 7: ------7---------------- ---B-D-FG-IJ---N-PQR---V--- 式 8: -------8--------------- 45A-C--F-HI-----OP-R-TU-W-- 式 9: --------9-------------- ----C---GHI-K--NOP--S--VW-- 式10: ---------0------------- 45A----FG---K-M-O-QR-T--W-- 式11: ----------1------------ 4-----E---IJ--M-OPQRS--V--- 式12: -----------2----------- 4-----------------Q---UVW-- 式13: ------------3---------- ---BC-EF---JK-MN---R--UV--- 式14: -------------4--------- 4-ABC---G-I---MNO---S------ 式15: --------------5-------- 4-AB--E--HIJK--NOPQ-S-U---- 式16: ---------------6------- 45--C---GHI-K---OP-R-TU-W-- 式17: ----------------7------ ----CD--G--JKL--O-QRS---W-- 式18: -----------------8----- 45--C-E-GH-JK-M--PQ-STU---- 式19: ------------------9---- ---BC--F--I-K--NO-QRS---W-- 式20: -------------------0--- 45A-C-EF-H-J-----P-R-TU-W-- 式21: --------------------1-- -5---DE--H---LM-OP-R-TUV--- 式22: ---------------------2- 4---CDE-G-I-KLM-------UVW-- 式23: ----------------------3 45---D---HIJ-L---PQ-ST-V--- 式24: ----------------------- ---BCD-F-H-JKL-NOP-R-T-VWX- 式25: ----------------------- --A-C-EF-H-J-----P-R-TU-W-Y
|
|
|
| ■考察9(連立式をプログラムで解く) |
ライツアウトに良く似たパズルに「8めくり」というのがあるそうですが、deepgreenさんは、32×32の8めくりを従来方式のプログラムを書いたら76時間で解を出したそうですが、この連立式を使う方式に変えるとわずか3秒で解いてしまったそうです。(もちろん連立式を解くのに要した時間を含みます)
その詳しい情報はdeepgreenさん本人のホームページで見ることが出来ます。
正に驚異的なアルゴリズムだったと言う訳です。
| ■おわりに |
(*1) 私の書いたプログラム(C言語)は、ここ (高速ビット処理版)
(*2) deepgreenさんのホームページは、ここ
※ このライツアウトはグラフ理論を使って高速に解くことも出来るようです。ここ (青木史郎さんの卒論)
※ トミーから発売されている3カラー版ライツアウトの計算解法をエクセルで作ってみました。ここ
ホームページへ戻る 開発ノートメニューへ戻る