日月離反
ちょっと今回は趣味の悪い日記をやめといてライツアウトの解法について考えてみたいと思います.ちなみにライツアウトというのは10年ほど前に流行ったパズルゲームでして,5×5のマス目に配置されたボタンを押して,点灯しているボタンの明かりをすべて消したところでクリアとなります.ボタンを押すとそのボタン自身と上下左右の明かりのon/offの状態が反転します.もうすでに前時代的なゲームとなってしまったので,たいていライツアウトについて語り尽くされた感がありますが,暇なので書きます.
もし知らない人がいたら,まずはJaap's Puzzle Page/Lights Outで遊んでみるのが手っ取り早いと思います.少し下にスクロールしたところにあるJavaScript Lights Out (Classic)というリンクをクリックすれば遊べます.下の方まで歴代ライツアウトが勢揃いです.
ゲームの数学的考察についても,Jaap's Puzzle Page/The Mathematics of Lights Outが文句なしにおすすめです.徹底した分析に圧巻です.日本語では驚異のライツアウト解法ロジックというものがあるようです.プログラマー的視点で書かれてます.
で,牛刀鶏後じゃなくてなんとかというやつで,今回は先月末から惚れ込んでいるGAPという非常に強力な代数計算ソフトでライツアウトsolverを作成して*1みたわけです.それを使ってライツアウトというゲームの構造を見ていきます.
本記事は線型代数の教養(大学初年度程度;連立一次方程式の解空間及び固有値問題のさわり)レベルを読者に想定します.想定とか偉そうに言っておりますが,要するに自分がその程度だってことです.数式の嫌いな人は,はじめの「ライツアウトの万能手順」の章だけ見てください.そこを読めば誰でもライツアウトの幹部クラスになれます.ぼくは数学は好きですが苦手なので間違いを含む可能性は大いにありますのでご注意ください.
ではまず導入として,ライツアウトが確実に解ける方法を紹介する.
ライツアウトの万能手順
万能とはいっても人力で解く場合の万能である.まさかすべての解法パターンを載せて,全部暗記しろとは言わない.そのかわり,解くことが出来るすべての5×5マスの問題に対応可能な表を,今回作ったsolverを使って用意してみた.
この章をきっちりマスターすれば,きみもライツアウトの幹部クラスになれるだろう.そしてライツアウトに飽きることだろう.しかし必ずしも,というよりほとんどの場合最短手順ではないので,最短手を試行錯誤する淫靡な老後の楽しみはまだまだ残されている.そこは安心してほしい.それでも「あらゆる最短手順を制覇できなきゃ読む価値なし」と思う人は,この章のあとに「ライツアウトのマクロビオティックダイエット」の章を読むとよい.紙と鉛筆とにゅうろんさえあれば,どんな問題もその最短手順を知ることができる.そこまでマスターできれば,きみはもうライツアウトの大統領クラスだ.では解説に入る.
以下の表の一行の点灯パターン(■:on / □:off)の意味は,最下段にライトを寄せてきたときの状態をあらわしている.一番下までライトを寄せる方法は,点灯しているライトの真下を押していけば誰でも簡単にできる.できたらあとはすぐ下にある手順通りに押して解けばよい.解けるのは以下の7パターンのみで,表に当てはまらないものがでてきたら,はじめから解けない問題だったと思ってよい.
□ □ ■ ■ ■ | □ ■ □ ■ □ | □ ■ ■ □ ■ | ■ □ □ □ ■ |
□ □ □ ■ □ □ □ ■ ■ ■ □ ■ □ □ □ ■ ■ □ ■ ■ □ ■ □ □ □ |
□ □ ■ ■ ■ □ ■ □ ■ □ ■ ■ ■ □ □ □ □ □ □ □ ■ ■ ■ □ □ |
■ □ □ □ □ ■ ■ □ □ □ ■ □ ■ □ □ □ ■ ■ ■ □ □ □ □ □ ■ |
□ □ □ ■ ■ □ □ ■ □ □ □ ■ ■ □ ■ ■ □ ■ □ ■ ■ ■ □ □ □ |
■ ■ ■ □ □ | ■ ■ □ ■ ■ | ■ □ ■ ■ □ | |
□ ■ □ □ □ ■ ■ ■ □ □ □ □ □ ■ □ ■ ■ □ ■ ■ □ □ □ ■ □ |
□ □ ■ □ □ □ ■ ■ ■ □ ■ □ □ □ ■ ■ □ ■ □ ■ □ □ ■ □ □ |
□ □ □ □ ■ □ □ □ ■ ■ □ □ ■ □ ■ □ ■ ■ ■ □ ■ □ □ □ □ |
これをいんさつしてぽけっとにでもしのばせておけば,どんなもんだいがでてきてもへっちゃら!めにもとまらぬはやさでといて,まわりのおともだちをあっといわせてやろう.さゆうがはんてんしているぱたーんは,こたえもはんてんしているだけだよ.かしこいきみならあんきもかのうだ!
にゅうろんがたりないきみにはもっとかんたんなほうほうがあるよ.
行:1-5,列:A-Eとして見たとき…手順1-5を繰り返すうちにすべてのライトが魔法のように消えます.途中で余計なことを考えてはいけません.あなたの行いが正しければ,2巡目までにすべて消えるはずです.
- 1段目で点灯中のライトの真下を押してを1段目を全部消す
- 2段目以降も同様にして4段目まで行い,5段目だけにライトが残るようにする*2
- A5が点灯しているとき : D1とE1を押す
- B5が点灯しているとき : B1とE1を押す
- C5が点灯しているとき : D1を押す
ライツアウトの問題設定
唐突だが,ライツアウトは有限体*3上で,
の形の非同次方程式を解く問題である*4.具体的に,m×nの盤面の総数mn個のボタンそれぞれに左上から右下まで行ごとに1,2,3,...,mnと番号をつけていったとき,このは与えられた問題を表すmn次元列ベクトルで,それぞれのon/offの状態が1/0に対応しているものである.も同様の対応で,それぞれのボタンを押す回数を示す同次元の列ベクトルである.実際はボタンを2回押せば元の状態に戻るので,その要素は"1:押す"か"0:押さない"の値しかとらない*5ことがわかる.は全消灯の状態を示す同次元の零ベクトルである.そしては,盤面に対するライトのon/offの作用を1/0で表したmn×mn行列である.これらの性質のため,問題をの中で扱えば非常に都合がよくなる.言葉ではよく分からないと思われるので簡単な2×2の実例を見てみる.
1 | 2 |
3 | 4 |
赤い部分が点灯しているボタンを示す.当然,我々がやるべきことはを全部消すことである.この場合は以下のように書ける.
Aを行ごとに見てもらえばわかるが,1行目は左上のボタン-1を押したときの盤面全体への作用,つまりライトが反転するボタン-1,2,3は1,影響しないボタン-4は0で表されているものである.2行目も同様にボタン-2を押したときで,3行目以降も同じである.グラフ理論を知っているなら,Aはボタンへの作用をノードへのリンクとして表現した隣接行列だと見てもらえばよい.盤面との対応がわかりやすいよう,もう少し計算を進める.の演算は下表の通りである.
+ | 0 | 1 |    | * | 0 | 1 |
---|---|---|---|---|---|---|
0 | 0 | 1 |    | 0 | 0 | 0 |
1 | 1 | 0 |    | 1 | 0 | 1 |
が示すボタンをすべて押し終えたときのボタン-1の状態は,ボタン-1,2,3を押した回数に依存した結果である.これが0なら消えている状態である.これを満たすを見つけることは,上の方程式を解いていることに他ならない.の内容をに一致させればである.
こんなややこしいことをせずとも,問題を見ればひと目で解は明らかにであるので,ひとまず解が直感と一致することを確かめてみればよい.また,det(A)=1と正則なのでを計算しても解が求まる.2×2の場合はたまたまである*6.
すべてのm×nのゲームで行列Aが正則なら,どんな問題に対しても解は必ずuniqueに定まる.偉そうな言い方をすれば,線型写像が全単射であり,すべての問題と解が一対一に対応するということである.もしそうなら何も苦労することはないが,それほど都合のよいゲームではない.実は,ライツアウトの標準的なサイズである5×5は解に自由度があり,問題とその解が1対4の対応となっている*7.同時に,これは解が存在しない問題もあるという事実を示している.次の章からは,この点に着目してその構造を探る.
ライツアウトのヌルスペ
ライツアウトというゲームのまさに“核”をなす性質をこの章で述べる.以降では,特に断らない限り5×5のライツアウトについて述べることにする.
一般に,このゲームのような関係を表すAをブロック行列として見ると,n×n三重対角行列Tとn×n単位行列Iのブロックをm×mグリッドの三重対角線上に配置した,
となる形をしている.具体的に5×5の場合のを以下にライトのパターンとして示す.
■ ■ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ ■ ■ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ ■ ■ ■ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ ■ ■ ■ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ ■ ■ ■ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ ■ ■ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ ■ ■ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ ■ ■ ■ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ ■ ■ ■ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ ■ ■ ■ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ ■ ■ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ ■ ■ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ ■ ■ ■ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ ■ ■ ■ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ ■ ■ ■ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ ■ ■ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ ■ ■ |
見ての通りAは,ボタン総数mn=25で25×25の対称行列である.また,である.この場合det(A)=0であり逆元が存在しない.つまり解は問題次第で,不定(解が複数存在する)または不能(解けない)になる.続いてGAPでAの階数(rank)を計算してみるとrank(A)=23で,2本のベクトルが余分(線型従属)であることがわかる.この事実から,の部分空間となるAのカーネル(零空間;null space)
の次元はdim(KerA)=25-23=2であることがわかる.ただ空間といっても有限体であるので,2つの基底の線型和はそれぞれ使うか使わない場合の組み合わせ数を考えるだけで,元の総数はたったのである.KerAのすべての元は零元を除けば全部で以下の3つ.
■ ■ □ ■ ■ □ □ □ □ □ ■ ■ □ ■ ■ □ □ □ □ □ ■ ■ □ ■ ■ |
■ □ ■ □ ■ ■ □ ■ □ ■ □ □ □ □ □ ■ □ ■ □ ■ ■ □ ■ □ ■ |
□ ■ ■ ■ □ ■ □ ■ □ ■ ■ ■ □ ■ ■ ■ □ ■ □ ■ □ ■ ■ ■ □ |
これらのパターンを左からと名付ける.ただしはKerAの線型独立な2つの元,つまり基底で,だけはそれらの線型結合であることに注意.実はこれら3つのパターンが,ライツアウトの解法において非常に重要な役割を果たす.他のサイトで"quiet patterns"や「0解」などと呼ばれているのは,まさにこのKerAのことである.
非同次方程式の解は,を満たす特殊解とKerAの任意の元の線形結合で表せる.便宜上,零ベクトルをとしてに含めたとすれば,特殊解が存在する場合にの解は,以下のように4通りの解として簡単に書ける.
が成り立つので,
であり,たしかに解である.また,任意のライトパターンのとき,どののパターンを押しても,
であるので,ボタンを何も押さなかった場合と同じになる.実際には,のボタンを押せば,すべてのライトに対して偶数回スイッチが作用していることになるので,ライトパターンは不変である.
便利なことに,KerAのパターンは与えられた問題が解けるかどうかの簡単なチェックにも使える.
theorem-1:
対称なゲームにおいて,ある問題が与えられたとき,(i) すべてのに対しが成り立つ.
問題を解くが存在する.(ii) となるが,少なくとも1つ存在する.
問題を解くは存在しない.
これは5×5ライツアウトに限らず一般に成り立つ.対称なゲームというのは,が対称行列であることを言っている*8.これは5×5に限らず,任意のpでm×nのライツアウト一般に成り立つ.この性質はの対称性に依るものである
(i)について、十分条件は明らかなので必要条件を示す。
proof:
上記の性質を満たす集合を考える.このは任意の係数と,に対して,
がいえるのでの部分空間となる.
より,に対し,
が成り立つのでが言える.
また、
より、が言える。
より,において,ならば,なので,となるようなを選び,にできる.
以上より,ある問題が与えられたときのの解の存在はと同値であることが示せた.(ii)は(i)と同じ内容である.
念のため確認しておくが,実際はすべてのについて積をしらみつぶしに調べる必要はない.すべての基底についてとの積がすべて0になることさえ確認すれば,それら基底の任意の線型和との積も必ず0である.5×5の例で示すなら,
パズルを解く際にはあまり有用ではないかもしれないが,以下の定理も示しておく.
theorem-2:
どんなm×nライツアウトも,すべてのライトがonのときは必ず解ける.
Aが正則であるものについては解を持つことが明らかなので,Aが正則でないものについて証明する.その下準備として,
lemma:
はどれもとなる成分を必ず偶数個含む.
proof:
1,2,...,i,...,mn個の中のあるi番目のボタンについて考える.
すべてボタンを押し終えたとき,i番目のボタンのライトが消えているためには,i番目のボタンとその上下左右に隣接するボタンが押された回数が偶数回(通常ライツアウトの場合は0,2,4回のいずれか)でなければならない.
上記は,あるi番目のボタンにスイッチが作用した回数の総和,つまりのi行目の要素のことであり,これが
となることを言っている.これがすべてのiで成り立っているのでである.
ならば,もしあるの成分が1であったとき,i番目のボタンの四方に隣接する奇数個のボタンも押されているはずである.
この関係を捉えるため,の中で1を持つ成分の添え字を集めた集合
をつくる.またの元の総数をと書くことにする.
上記のような集合の要素をそれぞれ接点(vertices)と見なしてボタンの隣接関係を辺(edges)としてあらわす無向グラフを作ったとき,すべての接点で奇数個の辺を持つグラフの形が得られる.
これらすべての辺の総数を数えることにする.
ある接点が持つ奇数個の辺の数をとすると,
である.前に1/2が付いているのは重複して数えた分を除くためである.辺の総数は必ず整数なので,は2で割り切れるはずである.奇数同士の和が2で割り切れるためには,接点の総数が必ず偶数でなければならない.
したがっての中でとなる成分の総数は偶数個である.
lemmaより,
すべてのライトがon,つまり与えられた問題がならば,
が成り立つ.よって,theorem-1の(i)に示した条件を満たす.
問題が全点灯(ライトがすべてon)ならどんなm×nライツアウトでも解を持つ.
以上の事実を特に5×5ライツアウトに関するものとしてまとめると,
- 解をひとつ見つけたとき,KerAの3つのパターンを足しあわせれば4通りのすべての解がつくれる.
- 問題と解が1対4対応となることから,解ける問題の総数はである.これはrank(A)=23であることからも明らかで,5×5の盤面で反転可能なパターンとは,23の線型独立なベクトルの通りの線型和のことである.
- どののパターンを押しても状況を変えない.
- KerAのすべての基底と問題の積がすべて0であれば解がある.もし,どれかひとつでも0でないものがあれば解けない問題である.
- 上記の判定方法はどちらかといえばコンピュータ向けであるので,人の目でやる場合は,(結局同じを計算をしていることになるが)KerAのパターンの左からふたつを見ながら,与えられた問題のパターンと重なる部分の個数を数え,すべて偶数個なら解ける,また,どれか一つでも奇数個になるパターンがあったら解けないものと判定すればよい.
- どんなm×nライツアウトでもすべてのライトがonなら必ず解ける.
これだけ重要な事実がKerAからわんさか掘り出せるのだから,よっぽどのことである.
ライツアウトのマクロビオティックダイエット
ここまではこんぴゅーたーをふんだんに使いましたが,この章はあくまで人力解答にこだわります.紙と鉛筆とにゅうろんを用意してください.いそふらぼんはいりません.
5×5のライツアウトで,ある解をひとつ見つければ,あとはKerAの3つのパターンを足しあわせることですべての解が表せることは前の章で述べた.つまり,最初の章で紹介した万能手順と,前章の方法を併せて使えばよい.
まず,万能手順で解を1つ見つけ,それにKerAの3パターンを足したものの中で,最短のものを選ぶというのがおおまかな流れである.実に単純明快である.一応具体的な方法を述べるが,工夫次第でもっと効率のよいやり方があるかもしれない.
-
- 5×5のマス目を紙に書く.
- 万能手順のいずれかの方法を使ってすべてのライトを消す.
- そのとき押したボタンに対応するマスに正の字なりを書いて押した回数を記録しておく.
- 奇数回だったマスをすべて塗りつぶす(これが4つの解のひとつ).
- 手元のマス目とKerAの3つのパターンを重ねて比較する.
- 「塗りつぶしたマスに重なる個数」から「塗りつぶしていないマスに重なる個数」を引く.これを3つのKerAのパターンについて計算.(慣れれば一番重なる部分が多くなりそうなものだけやってもよい)
- 計算結果が一番大きくなるものをひとつ選び(0以下なら最初の解が最短),重ねた部分を反転させれば最短手順完成.
おそらくないが,暇と要望があれば図解入りにするかもしれない.
ライツアウトのアイスペ
ほかに,興味深い現象として問題とその解が同じになる,つまり最初に点灯していたボタンを押すだけで解けてしまうパターンがある.これを考えてみることにしよう.この問題はの解を求めることに相当し,当然(最初から全部消えている状態)はその自明な解のひとつである.
式を見て分かる通り,これはでのときの固有ベクトルを求める問題そのものである.したがってこの解空間Ker(A+I)とは,の固有値に対応する固有空間のことである.に属するものを「固有反転パターン」のと呼ぶことにする.
任意の固有反転パターンを使えばとしてを反転したパターンが現れる.ということは,もし問題であったなら
となるので,最初にライトが点いていた部分を押すだけで解ける.またもし現在の盤面のライトの状態があるであったとき,
となる.これはつまり,の固有反転パターンにあたる部分の点灯状態を,他の部分に影響を与えることなくそっくりそのまま反転できるということである.
のすべての元は,以下の5パターン(基底)の通りの組み合わせ(線型和)で作れる.自明な解となる零ベクトル除けば全部で31通りある.
□ □ □ □ ■ □ □ □ ■ □ □ □ ■ □ □ □ ■ □ □ □ ■ □ □ □ □ |
□ □ □ ■ □ □ □ ■ □ ■ □ ■ □ ■ □ ■ □ ■ □ □ □ ■ □ □ □ |
□ □ ■ □ □ □ ■ □ ■ □ ■ □ ■ □ ■ □ ■ □ ■ □ □ □ ■ □ □ |
□ ■ □ □ □ ■ □ ■ □ □ □ ■ □ ■ □ □ □ ■ □ ■ □ □ □ ■ □ |
■ □ □ □ □ □ ■ □ □ □ □ □ ■ □ □ □ □ □ ■ □ □ □ □ □ ■ |
□ □ □ □ ■ □ □ □ ■ □ □ □ ■ □ □ □ ■ □ □ □ ■ □ □ □ □ |
□ □ □ ■ □ □ □ ■ □ ■ □ ■ □ ■ □ ■ □ ■ □ □ □ ■ □ □ □ |
□ □ □ ■ ■ □ □ ■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ □ □ ■ ■ □ □ □ |
□ □ ■ □ □ □ ■ □ ■ □ ■ □ ■ □ ■ □ ■ □ ■ □ □ □ ■ □ □ |
□ □ ■ □ ■ □ ■ □ □ □ ■ □ □ □ ■ □ □ □ ■ □ ■ □ ■ □ □ |
□ □ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ □ □ |
□ □ ■ ■ ■ □ ■ ■ □ ■ ■ ■ □ ■ ■ ■ □ ■ ■ □ ■ ■ ■ □ □ |
□ ■ □ □ □ ■ □ ■ □ □ □ ■ □ ■ □ □ □ ■ □ ■ □ □ □ ■ □ |
□ ■ □ □ ■ ■ □ ■ ■ □ □ ■ ■ ■ □ □ ■ ■ □ ■ ■ □ □ ■ □ |
□ ■ □ ■ □ ■ □ □ □ ■ □ □ □ □ □ ■ □ □ □ ■ □ ■ □ ■ □ |
□ ■ □ ■ ■ ■ □ □ ■ ■ □ □ ■ □ □ ■ ■ □ □ ■ ■ ■ □ ■ □ |
□ ■ ■ □ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ □ ■ ■ □ |
□ ■ ■ □ ■ ■ ■ ■ □ □ ■ ■ □ ■ ■ □ □ ■ ■ ■ ■ □ ■ ■ □ |
□ ■ ■ ■ □ ■ ■ □ ■ ■ ■ □ ■ □ ■ ■ ■ □ ■ ■ □ ■ ■ ■ □ |
□ ■ ■ ■ ■ ■ ■ □ □ ■ ■ □ □ □ ■ ■ □ □ ■ ■ ■ ■ ■ ■ □ |
■ □ □ □ □ □ ■ □ □ □ □ □ ■ □ □ □ □ □ ■ □ □ □ □ □ ■ |
■ □ □ □ ■ □ ■ □ ■ □ □ □ □ □ □ □ ■ □ ■ □ ■ □ □ □ ■ |
■ □ □ ■ □ □ ■ ■ □ ■ □ ■ ■ ■ □ ■ □ ■ ■ □ □ ■ □ □ ■ |
■ □ □ ■ ■ □ ■ ■ ■ ■ □ ■ □ ■ □ ■ ■ ■ ■ □ ■ ■ □ □ ■ |
■ □ ■ □ □ □ □ □ ■ □ ■ □ □ □ ■ □ ■ □ □ □ □ □ ■ □ ■ |
■ □ ■ □ ■ □ □ □ □ □ ■ □ ■ □ ■ □ □ □ □ □ ■ □ ■ □ ■ |
■ □ ■ ■ □ □ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ □ □ ■ ■ □ ■ |
■ □ ■ ■ ■ □ □ ■ □ ■ ■ ■ ■ ■ ■ ■ □ ■ □ □ ■ ■ ■ □ ■ |
■ ■ □ □ □ ■ ■ ■ □ □ □ ■ ■ ■ □ □ □ ■ ■ ■ □ □ □ ■ ■ |
■ ■ □ □ ■ ■ ■ ■ ■ □ □ ■ □ ■ □ □ ■ ■ ■ ■ ■ □ □ ■ ■ |
■ ■ □ ■ □ ■ ■ □ □ ■ □ □ ■ □ □ ■ □ □ ■ ■ □ ■ □ ■ ■ |
■ ■ □ ■ ■ ■ ■ □ ■ ■ □ □ □ □ □ ■ ■ □ ■ ■ ■ ■ □ ■ ■ |
■ ■ ■ □ □ ■ □ ■ ■ □ ■ ■ □ ■ ■ □ ■ ■ □ ■ □ □ ■ ■ ■ |
■ ■ ■ □ ■ ■ □ ■ □ □ ■ ■ ■ ■ ■ □ □ ■ □ ■ ■ □ ■ ■ ■ |
■ ■ ■ ■ □ ■ □ □ ■ ■ ■ □ □ □ ■ ■ ■ □ □ ■ □ ■ ■ ■ ■ |
■ ■ ■ ■ ■ ■ □ □ □ ■ ■ □ ■ □ ■ ■ □ □ □ ■ ■ ■ ■ ■ ■ |
References: ライツアウトの参考資料たち
- Jaap's Puzzle Page/The Mathematics of Lights Out
http://www.geocities.com/jaapsch/puzzles/lomath.htm
- Setting Switches in a Grid (1995) / J. Goldwasser, W. Klostermeyer, G. Trapp, and C.-Q. Zhang
http://citeseer.ist.psu.edu/goldwasser95setting.html
- 驚異のライツアウト解法ロジック
http://www.ic-net.or.jp/home/takaken/nt/light/light2.html
- Lights Out VB clone
http://dalila.sip.ucm.es/~cpareja/lo/
Appendix-1: ライツアウトの残尿感
そろそろ疲れてきた.でもまだここで扱いきれなかった話題はいくつもある.
- 消灯→赤→緑→消灯→赤→…の3状態をとるようなライツアウト
単にの上で連立方程式を解いてやるだけです.5状態,7状態だろうと解けます.が,例えばなどが素数でない場合は面倒だったのでもう無視してます.
- m×nライツアウトの一般化
任意のm×nゲームを解くだけならたいした仕事ではありません.が存在するなら楽に解けますし,存在しない場合も複数の解を求めればよいだけです.理論面での一般化路線として,mとnをパラメータとする解の存在条件や自由度,また最短手順などに関するライツアウト定理を打ち立てるようなことは,ぼくには力不足で到底できません.このあたり興味のある人はJaapsのページを見てください.
勉強不足です.
Appendix-2: ライツアウトの旅路の果て
あまり大規模なライツアウトに挑戦しようとすると,パズルの楽しみなどどうでもよくなり,ただ解の幾何学紋様を眺めることだけが唯一の(uniqueな)楽しみになってきます.また,ライトの状態が3〜7段階ともなると,解の模様を塗り分けてプリントして部屋に飾っておきたくなります.そこで,興味深い現象を最後にひとつ紹介しておわりにしようと思います.塗り分けが面倒なのでカラフルなものは紹介しません.
■ □ ■ □ □ ■ ■ ■ □ □ □ □ ■ ■ □ □ □ ■ ■ □ ■ ■ □ □ □ ■ ■ □ □ □ □ ■ □ ■ ■ ■ □ □ □ ■ ■ ■ □ ■ □ □ □ □ □ ■ □ ■ ■ ■ ■ □ ■ ■ □ □ □ ■ ■ □ □ □ □ ■ ■ ■ □ □ ■ □ ■ □ □ ■ ■ ■ □ □ □ ■ □ ■ ■ □ □ ■ □ □ □ □ □ ■ □ ■ ■ ■ □ ■ ■ ■ □ ■ □ □ □ ■ □ ■ ■ ■ □ ■ □ □ □ □ □ ■ □ ■ ■ ■ □ □ □ ■ ■ ■ □ ■ □ ■ □ □ ■ ■ □ ■ □ □ □ □ □ ■ □ □ ■ ■ □ ■ □ ■ □ ■ ■ □ □ ■ ■ ■ □ □ □ ■ ■ □ ■ □ □ □ ■ □ ■ ■ □ ■ □ □ □ ■ □ ■ ■ □ ■ ■ ■ ■ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ □ □ ■ □ ■ □ □ □ ■ □ ■ ■ □ ■ □ □ □ ■ □ ■ ■ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ ■ ■ □ ■ □ ■ □ ■ ■ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ ■ ■ ■ □ □ □ ■ ■ ■ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ ■ ■ ■ □ ■ ■ ■ □ ■ □ □ ■ ■ □ □ □ ■ ■ □ ■ ■ □ □ □ ■ ■ ■ □ □ ■ □ ■ □ □ ■ ■ ■ □ ■ ■ ■ □ ■ □ □ □ □ □ ■ □ ■ ■ ■ □ ■ □ □ □ □ □ ■ □ ■ ■ ■ □ ■ ■ ■ □ □ ■ □ ■ □ □ ■ ■ ■ □ □ □ ■ ■ □ ■ ■ □ □ □ ■ ■ □ □ ■ □ ■ ■ ■ □ ■ ■ ■ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ ■ ■ ■ □ □ □ ■ ■ ■ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ ■ ■ □ ■ □ ■ □ ■ ■ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ ■ ■ □ ■ □ □ □ ■ □ ■ ■ □ ■ □ □ □ ■ □ ■ □ □ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ ■ ■ ■ ■ □ ■ ■ □ ■ □ □ □ ■ □ ■ ■ □ ■ □ □ □ ■ □ ■ ■ □ □ □ ■ ■ ■ □ □ ■ ■ □ ■ □ ■ □ ■ ■ □ □ ■ □ □ □ □ □ ■ □ ■ ■ □ □ ■ □ ■ □ ■ ■ ■ □ □ □ ■ ■ ■ □ ■ □ □ □ □ □ ■ □ ■ ■ ■ □ ■ □ □ □ ■ □ ■ ■ ■ □ ■ ■ ■ □ ■ □ □ □ □ □ ■ □ □ ■ ■ □ ■ □ □ □ ■ ■ ■ □ □ ■ □ ■ □ □ ■ ■ ■ □ □ □ □ ■ ■ □ □ □ ■ ■ □ ■ ■ ■ ■ □ ■ □ □ □ □ □ ■ □ ■ ■ ■ □ □ □ ■ ■ ■ □ ■ □ □ □ □ ■ ■ □ □ □ ■ ■ □ ■ ■ □ □ □ ■ ■ □ □ □ □ ■ ■ ■ □ □ ■ □ ■ |
上のパターンは9×3ライツアウトのを求めたものです.まるでミステリーサークルのようです.オマケで15×3と4×16ライツアウトのを画像にしたものも右下につけときます.
(つづくかも)
*1:こんな大袈裟なソフトをわざわざ使わなくても単なる掃き出し法のプログラムを書けば済む話だが,GAPなら有限体やベクトル空間の扱いが非常に楽だし,発展的な使い方も期待できそうなので使ってみた.
*2:これをchasingと呼ぶそうです.
*3:簡単に言えば,演算が{0,1}の中で閉じた集合のこと.プログラマー的には通常の和(+)と積(*)の演算が排他的論理和(xor)と論理積(and)に置き換わったと思えばよい.
*4:つまりのもとではと見なせるのでを解いても同じになるが,のときはとなり一般性を失うのでと見るのが好ましい.また,「ボタンを押す」+(on)「問題面」=(makes)「ライトが全部消える」という意味合いでも自然な表記である.
*5:2の倍数回押しても0回に等しいということである.また解法は押す順序に関係しないというきわめて重要な性質もある.
*6:もしふつうの行列計算ソフトなどを使って(計算機的)実数の中でまともに逆元を求めたらが出てきてしまい,うまい具合に整数解を得られない.あとからdet(A)を掛けて丸めるか,の方程式を解いてから,最後にmod 2をとる必要がある.余因子行列を求めてもよい.が正則ならこの方法で解いても特に問題ない.
*7:3×3や6×6や7×7ならばAは正則である.一方,4×4や5×5なら正則でない.また,とんでもないことに,4×4の場合は16通りの解が存在する.
*8:symmetric,reflexiveな性質を持つゲーム一般について言及したものがJaapsのページにある.