memo:ルービックキューブ

自分用メモ。ルービックキューブ。左手で持って右手で回す。天、地、東西南北の面。東と天とを交互に回す。回転の方向を右ひねり左ひねりで表現。東から最初に、右・右・左・右・右・右右・左・右右・左・左・右・左・左・左左・右・左左。天と東だけ回すので忙しい。俗に言う角っこのキューブを対にして1/3ずつ回す。他のキューブは結果的に動かない。2*2*2でも3*3*3でも4*4*4でも5*5*5でも同じで副作用なし。

よく見ると群論の言葉で簡単に表現できる可能性があると思った。天の右ひねりをt,左ヒネリはt(3)だがt(-1)でも良かろう。東はeだったりe(-1)だったり。ひっくりかえすのはe(2)だろう。supとかで記述するのがめんどい。

Aという作用とBという作用があった時に、ABA(-1)B(-1)は基本のようだ。上の前半部分の「右・右・左・右・右・右右・左・右右」と後半の「左・左・右・左・左・左左・右・左左。」は鏡対象だ。前半の「右・右・左・右・右・右右・左・右右」は、さらに「右・右・左・左」+「左左」+「・」+「右・右右・左・右右」となっている。ABA(-1)B(-1)と、間になにか挟んでCDC(-1)D(-1)のような感じ。要するに、個々のABA(-1)B(-1)の素辺の副作用を互いにキャンセルするような形式で組み合わせている印象だ。上の分解で真ん中にひとつだけペアになっていない?「左左」があるのが面白く、これが鏡の「右右」で相殺されているのも面白い。

こうしてコーナーキューブだけをぐるぐるするわけだが、天と東だけ使ってこうしろと云われたら、世界や日本でのきなみにいるルービックキューブを15秒で解いてしまうプレイヤー達でも困るのではあるまいか。詰みルービックキューブで限定詰めである。

群論で統制できる遊びってあんまりなさそうな気があらためてしたので、思いつき的に。こういうのをよしなしごとというのだろうか。コンピュータによるルービックキューブの最短解のアルゴリズムがあるのだとどこかに書いてあったような気がするのだが、手元に資料がないので確認できない。機械による最短解は人間のやり方と全く異なるので、モニタで見ている人は最期の最期まで「こんなんで解いてるんかよ!」と疑問に思うらしい。最期の数手でようやく人間の目にも色がそろい始めるのである。このアルゴリズム群論で作ったらしい。

ええと、群論じゃなくて手探りで自前で作ったサブルーチンを。キューブを東と西とを両手で挟むようにかかえて。そうすると東西の真ん中の列が手でふれていないことになる。これを中抜き手前に1/4回転。その後天を右に1/4回転。ここまでをセットで4回繰り返す。さらにここまでの手順を左右ひっくりかえしてもう一度行う。これもデザイン作るときには便利なのだが早時の人たちはもうちっと手順が少ないやりかたを使う。でも俺なんかにそんな手順は覚えられないのである。自前のものならいつでもこうやって手順が出てくる。まあこれも副作用キャンセル系。今日の日記の冒頭の手順と、今書いた手順はともに、キューブの位置はあっているが向きがオカシイ時に使うもの。

XML(XHTML)ではどうなのか。

12/9のコメント欄に書いていて、ふと気になってWinIE用のXMLファイルを作ってみたもの。

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet 
     href="http://www.microsoft.com/" type="text/css"?>
<!DOCTYPE html:html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11-flat.dtd" [
 <!ENTITY % NS.prefixed "INCLUDE">
 <!ENTITY % xhtml-prefw-redecl.mod "">
 <!ENTITY % xhtml-postfw-redecl.mod "">
 <!ENTITY % XHTML.prefix "html">
]>
<!-- saved from url=(0014)about:internet -->
<html:html xmlns:html="http://www.w3.org/1999/xhtml" xml:lang="ja">
<html:head>
<html:meta http-equiv="Content-Type" content="application/xml; charset=utf-8"/>
<html:title>title</html:title>
<html:script type="text/javascript">
<!-- // --><![CDATA[
        alert(document.styleSheets(0).cssText);
// ]]>
</html:script>
</html:head>
<html:body>
<html:h1>Heading</html:h1>
<html:p>Paragraph</html:p>
</html:body>
</html:html>

はてなダイアリーの簡易記法の仕様をよく知らなかったので上記コードの一部が文字化けしておりました。訂正させて頂きます。お知らせいただいた方、ありがとうございました。

攻撃者が用意する罠ページの特性は@import,addimport,link要素,などが考えられていましたが上で見るように、xml-stylesheetでも同様でした。攻撃者は通常便宜性を考えて、addimportを使うと考えられますが、防衛側としてはそればかり気にしていても駄目っぽいのと、開いちゃいけないのはHTMLファイルばかりではないよなあという点と。

IEでは、XMLでもスタイルシートのインポートにあたって同じ仕組みを使っているようなのでビックリしました…不思議千万です。いいのかなぁ?

やはりユーザとして確実な防衛としては、攻撃者にstyleSheetsコレクションを触らせなければ良いのであって、すなわちJavaScriptオフで…ということになります。追記:DOMを触れるのはJavaScriptばかりではないそうです。Javaアプレットでも可能だそうです。出口さえ押さえてしまえば良い。入り口でimportされてもしかたがありません。だってスクリプトオフでもスタイルシートオフでも読まれるのですから。Firefoxでは上記のXMLで、抜かれるHTMLファイルをあえて指定したスタイルシートの読み込みの時点でMimeTypeが違うから駄目よ〜ん、と云われました。さすがだ。IEもそうすれば良いのに。パッチが出るならその辺かな?ん?コンテントネゴシエーション?大丈夫のような気がするのだけれど…駄目ですか?

なお、私がXMLファイルなどいちから作れるはずもありません。古林 寛さんのおつくりになったXHTMLのサンプル、創作料理の覚書 … ぽかぽか夢工房をガッツリコピーさせて頂きました。もうしわけありません。