ホームページへ戻る

驚異のライツアウト解法ロジック

■ライツアウトと不思議なエクセルファイル

 ライツアウトは、5×5の形に並んだライトをあるルールに従ってすべて消灯 (lights out) させることを目的としたパズルゲームです。
 Tiger Toysや、日本ではタカラから1995年に発売されて有名になりました。あるルールとは、「あるライトを押すと、それ自身とその上下左右のライトが一緒に反転する」というものです。 (このパズルで遊べます→)

 細江万太郎さんという方から、このライツアウトの解を一発で求められる計算式が存在すること教わりました。その解法をご紹介したいと思います。
 尚、細江さんからは、計算式が書き込んであるだけのエクセルファイル(LightsOutソルバー)を頂きました。

 ・LightsOutの解を求める、エクセルファイル (lout.xls)


ソースコード lout.js

■考察1(33,554,432通りの組合せ)

 ライツアウトを解く為の基本原則はこのようなものです。

1.同じ場所を偶数回押しても意味が無い。(押さなかったと同じ)
2.押す順番は関係ない。(解答は2次元マップのオンオフで表現可)

 つまり、ライツアウトの解は、全25マスについて押すか押さないかの、2の25乗=33,554,432通りを調べれば解が得られます。

■考察2(32通りの組合せ)

 最上段5マスの押下パターンを決めてしまうと2段目以降は選択の余地なく押下パターンが決定されてしまいます。
つまり、実際は2の5乗=32通りだけを調べれば良いのです。

■考察3(8通りの組合せ)

「ある複数ボタンを押すと何も押さないのと同じ」という組み合わせがあります。 ライツアウトの全探索は32通りだけなので、その特殊な押下パターンは簡単に見つけられます。それは下図です。

    (0:押さない 1:押す)

ここで最上段の左側の2マスに着目してみてください。これは2進数の4通りパターンが網羅されています。この事から上段左側の2マスの押下パターンは適当に固定してしまっても解が得られることを意味します。(最適解の保証は無くなるけど)
つまり、上段左側の2マスを00と固定してしまっても解が得られるし、また、解が1つ見つかれば上の4パターンの押下法を重ねることによって4通りの解が得られる。ということです。
結局、最上段の残りの右3マスだけでの組み合せ(2の3乗=8通り)を調べれば、解を見つけることが出来るのです。

■考察4(一発で解を求める)

 下図の問題面[]のライトをオンオフできるのは押下法の[あ,い,か]です。この関係を下の計算式に表現する事が出来ます。
ここで、問題面の[A]から[Y]の値は、0=消灯,1=点灯、押下法の[あ]から[の]の値は0=押さない,1=押す とします。
 尚、最後に得られる計算式に一般性を持たせる為この関係式は問題面が総て消灯した状態で作ります。

問題面
押下法


  A=(あ+い+か)mod2   [mod2は、2で割った余りを求める]
  B=(あ+い+う+き)mod2
       |
  Y=(と+ね+の)mod2

同様にして[B]から[Y]についても計算式が作れ合計25個の連立方程式が出来る訳です。求めたい未知数は[あ]から[の]の25個です。
つまり、この連立方程式は解けるかも知れません。実は解けます。これで得られた結果の式を使えば、ライツアウトは一発で解を求められることになります。

■考察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(連立方程式を解く)

 連立方程式を解く説明を簡単にする為に3×3で考えます。

問題面
押下法


先ず、問題面のライトに影響を与えることの出来る関係式を作ります。今後はこのような略式表現で連立式を表すことにします。

 式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

結果が一意に決定されました。これは3×3のライツアウトどんな問題面でも必ず解が存在し、しかも解は1種類だけということになります。
と言うのは、本来の5×5の場合だと、このような綺麗な結果にはならないのです。

■考察7(5×5ライツアウトの結果)

 本来の5×5ライツアウトを上と同様に連立式を解くと下図のようになります。
ここで、[あいうえお・・]は[12345・・(1桁目のみ)]として表します。

 式 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左辺が消えてしまいました。これでは一意に解を得ることは出来ません。
確かに5×5のライツアウトには問題によっては解が無い場合があるし解が複数あったりもします。

 この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段目以上の右側2列にゴミのように残ってしまったものもになりますので、これで計算式が完成したことになります。

 また、この2つの式は計算結果が0になる式であることから、下から3段目以上の計算式に重ねても正しい計算式になります。
つまり、それぞれのマスには4通りの計算式(計算結果は同じ)があることになります。項数が一番少なくなるものをそれぞれ選んでおけばベターですね。

 蛇足になるかも知れませんが最後の2マスにと入れておくよりも、素直に式24式25を入れておけば、そこを見ただけで解の正誤を知ることが出来ます。

■考察8(最適解を求める)

 最後の2マスは何でも良いのだから解の存在条件が成立さえしていれば解は必ず4種類(解の対称性を無視)あることになります。
この最後の2マスを0以外にするならば下から3段目以上の計算式も変わってきます。
左辺の右2列を右辺に移行する必要があります。つまり計算式は最後の2マスが何であるのかを参照することになります。

最後の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

 ところで、下図は解の存在条件式を示す問題面でのパターン図ですが、何故か考察3で示したある複数ボタンを押すと何も押さないのと同じという押下面でのパターンと一致しています。 一般的なN×Mライツアウトで試してみても両者は必ず一致するのです。もし、必ず一致するのであれば最後の2マスを00と固定して1つの解を求め、後は下図のパターンを排他的論理和で重ねることで4つの解を作る事もできます。
しかし、本当に両者のパターンはどんな場合も必ず一致するのか?? その疑問はdeepgreenさん(*2)のHPで解き明かされています。

式24
式25
(式24 xor 式25)

■考察9(連立式をプログラムで解く)

 連立式をいちいち手で解くのは面倒なので、考察6に書いた通りの手順で解くプログラム(掃き出し法)を作っておけば楽です。(*1)
では、そのプログラムの仕事量はどの程度のものでしょう。N×Nのライツアウトを従来の方法で解くなら、2のN乗通りのパターンを生成しますが、
この方法なら二重のN×N回ループの中で簡単な計算をするだけです。Nの値に従ってN乗レベルの増加量が2乗レベルの増加量で済みます。
Nが大きくなればなるほど驚異的な高速化が実現されることになります。プログラムをビット演算処理で書けばもっと高速になるでしょう。

 ライツアウトに良く似たパズルに「8めくり」というのがあるそうですが、deepgreenさんは、32×32の8めくりを従来方式のプログラムを書いたら76時間で解を出したそうですが、この連立式を使う方式に変えるとわずか3秒で解いてしまったそうです。(もちろん連立式を解くのに要した時間を含みます)
その詳しい情報はdeepgreenさん本人のホームページで見ることが出来ます。

正に驚異的なアルゴリズムだったと言う訳です。

■おわりに

 細江さんはプログラムを書けないそうです。プログラムを書ける人なら32通りを調べるだけで良いと判った段階でサラッとプログラムを書いておしまいです。
さらに突っ込んだ解析をすれば、こんな素晴らしいロジックに出会えたなんて反省ものです。細江さんどうも有難うございました。
 そして、この考え方をプログラムを使ってさらに明確に解析し、また、連立方程式の解き方までも教えて頂きましたdeepgreenさんにも心から深く感謝いたします。

 (*1) 私の書いたプログラム(C言語)は、ここ (高速ビット処理版)
 (*2) deepgreenさんのホームページは、ここ

 3色版ライツアウトもあります 


ホームページへ戻る