In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

さらに禍々しく配列参照&練習

Get Adobe Flash player
by 12346 02 Jun 2011
/**
 * 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

        }
    }
}