さらに禍々しく配列参照&練習
/**
* Copyright 12346 ( http://wonderfl.net/user/12346 )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/3Rsv
*/
// forked from bkzen's 黒魔術の説明書
// forked from bkzen's もっと禍々しくしてみた
// forked from Kaede's 禍々しい配列参照
package {
import flash.display.Sprite;
dynamic public class FlashTest extends Sprite {
public function FlashTest() {
var $:*=this;
/*
fork元の復習
this["f"] = "constructor";
this["fa"] = this.graphics;
this["t"] = String.fromCharCode;
this["fa"].beginFill(0);
this["fa"].drawCircle(100, 100, 100);
これが
0[this, "f"] = "constructor";
0[this, "fa"] = this["graphics"];
0[this, "t"] = ""["constructor"]["fromCharCode"];
0[this["fa"], "beginFill"](0)[this["fa"], "drawCircle"](100, 100, 100);
こうなっちゃうって話がありましたね。
そこで2、3行目の代入処理に無意味な禍々しさを注入...
obj1.prop1=obj2.prop2;
を読みにくいけど等価な式に書き換え。
something[obj1]="prop1"[obj2,"prop2"];
右辺の処理後、スタックに ↑ の"prop1"が使われずに残ってしまい、左辺の処理時にobj1とprop1を使ってしまうので、
obj1["prop1"]=obj2["prop2"];
な感じに実行されちゃいます。ぐへへへ・・・
/*左上の円*/
0[this, "f"] = "constructor";
0[this] = "fa"[this,"graphics"];
0[this] = "t"[""["constructor"],"fromCharCode"];
0[this["fa"], "beginFill"](0)[this["fa"], "drawCircle"](100, 100, 100);
/*--------------------------------------------------
やりたかったことは以上です。
でもこれだけじゃ個人的につまらないので、bkzenさんの黒魔術を
自己流に納得しつつ練習してみますw
読み飽きなかった方のみ先へお付き合いください(非推奨)
まず、this["f"]とか取得するために毎回$[/./(!{})]とかって書くのが読みにくく感じたので、
"f" -> "[object FlashTest]"
"fa" -> "[object Object]"
"t" -> ""
と書き換えてみると、
$[/./(!{})] -> $[$]
$[/../(!{})] -> $[{}]
$[/./(!!{})] -> $[[]]
ちょっとだけ読みやすくなりました?逆効果?
/*右上の円*/
$[$, $] = "constructor";
$[$] = {}[this,"graphics"];
$[$] = [][""["constructor"],"fromCharCode"];
$[$[{}], "beginFill"](255)[$[{}], "drawCircle"](300, 100, 100);
/*
続いてfork元と同様に記号以外を書き換えますが、
数値表現もちょっとだけ自己流に。
(~$)で-1、(~~$)で0が作れちゃったのでこれで表記します。
~$>>>~$ : 1
~$<<~$ : -2147483648
~$>>>$ : 4294967295
これくらいあればすべての数字をそれなりに短めに書けるはず・・・
んで・・・hとwの変換が思いつかない!
/*左下の円*/
$[$,$]=<>{/./(/.. /({}))}{/.$/(/../({}))}{/./(/./([]))}{/./(/..$/(!$))}{/.../(!!$)}{/../(/.. /({}))}{/.$/(/../({}))}{/.$/(/../(!!$))}</>;
$[$]={}[$,<>{/.$/(/ .../(/./[$[$]]))}{/.$/(/../(!!$))}{/.$/(/../(!$))}{/./(/..$/(/./[$[$]]))}{/./(/......$/($[$[$]]))}{/./(/....$/([][$]))}{/./(/.. /({}))}{/./(/..$/(!$))}</>];
$[$]=[][""[$[$]],<>{/./(!$)}{/.$/(/../(!!$))}{/.$/(/../({}))}{/.$/(/ .../((~([][$]))[$[$]]))}{/.$/(/ ./($[$[$]][$[$]]))}{/./(/......$/($[$[$]]))}{/.$/(/../(!$))}{/.$/(/../(!!$))}{/.$/(/ ./($[$[$]][$[$]]))}{/.$/(/../({}))}{/.$/([][$])}{/.$/(!$)}</>];
$[$[{}],<>{/.$/(/.../({}))}{/.$/(!$)}{/.$/(/ .../(/./[$[$]]))}{/./(/....$/([][$]))}{/./(/./([]))}{/.$/(/ ./($[$[$]]))}{/./(/....$/([][$]))}{/..$/(/./([]))}</>]
(~$>>>[<>{/.$/(/../(~$<<~$))}{/./(~$>>>$)}</>][~~$]<<[<>{/.$/(~$<<~$)}</>][~~$])//beginFillの引数 緑=255<<8=-1>>>24<<8
[$[{}],<>{/.$/([][$])}{/.$/(/../(!!$))}{/.$/(/../(!$))}{$[[]](<>{~$>>>~$}{~$>>>~$}{/./(/..$/(~$>>>$))}</>)}{/.$/(/ ./($[$[$]][$[$]]))}{/./(/....$/([][$]))}{/.$/(/../(!!$))}{/./(/.. /($))}{/.$/(/./([]))}{/.$/(!$)}</>]
(<>{~$>>>~$}{~~$}{~~$}</>,<>{/./(/....$/(~$<<~$))}{~~$}{~~$}</>,<>{~$>>>~$}{~~$}{~~$}</>);//drawCircleの引数100,300,100
}
}
}