(」・ω・)」うー!(/・ω・)/にゃー!encode

(」・ω・)」うー!(/・ω・)/にゃー!encodeの説明。

(」・ω・)」うー!(/・ω・)/にゃー!encodeは、JavaScriptを(」・ω・)」うー!(/・ω・)/にゃー!に変換する。

このJavaScript

alert("(」・ω・)」うー!(/・ω・)/にゃー!")

は、以下のようになる。

使用する文字

JavaScriptには非ASCII文字も使えるけど、意外に厳しくて、記号は使えないし、数字は識別子の先頭には使えない。(全角左括弧)も、(右鉤括弧)も、(片仮名中点)も、(全角右括弧)も使えない。

そこで、代わりに、(カナダ先住民族音節のMO)と、(古いハングル字母)を使う。/は通常のスラッシュと、くの字点の上半分)。括弧は全て半角の括弧。

基本となる顔文字は、

 (ᒧᆞωᆞ).ᒧうー

と、
 (〳ᆞωᆞ).〳にゃー 。

JavaScriptとしては、変数 ᒧᆞωᆞ と 〳ᆞωᆞ のプロパティにアクセスしていて、長音符の数や全角半角を変えることで、複数の変数を表せる。

また、[〜] を目立たないようにできるかと思い、

 [(ᆞωᆞᒪ)

と、

 (コᆞωᆞ)]

を使っている。
事前に、 ᆞωᆞᒪ と コᆞωᆞ は0や空文字列にしている。

スクリプトの実行方法

記号だけのJavaScriptプログラミングの基本原理記号だけのJavaScriptプログラミングの原理 その2に書いてある。要は、

code = (123)["constructor"]["constructor"]("return '\"+1+0+1+"\"+……+"'");
(123)["constructor"]["constructor"](code)();

を実行すれば良い。

↑の変換後のスクリプトの変数やプロパティの名前を置き換えると、↓のようになる。

_ = /・ω・/,                   //  正規表現
n0 = -!!/・ω・/.にゃー,        //  -!!undefined = 0
n1 = - -!n0,                    //  = 1
n2 = n1- -!n0,                  //  = 2
n3 = n2- -n1,                   //  = 3
n4 = n3- -!n0,                  //  = 4
n5 = n4- -n1,                   //  = 5
n6 = n5- -!n0,                  //  = 6
n7 = n6- -n1,                   //  = 7
n8 = n7- -!n0,                  //  = 8
n9 = n8- -n1,                   //  = 9
ー = '',                         //  = ""
s_true = !n0+ー,                 //  = "true"
s_false = !n1+ー,                //  = "false"
s_object = {這いよれ:!n1}+ー,    //  = "[object Object]"
s_undefined = _.」ニャル子さん+ー,//  = "undefined"
s_a = s_false[n1],              //  = "a"
s_b = s_object[n2],             //  = "b"
s_c = s_object[n5],             //  = "c"
s_d = s_undefined[n2],          //  = "d"
s_e = s_true[n3],               //  = "e"
s_f = s_false[0],               //  = "f"
s_n = s_undefined[n1],          //  = "n"
s_o = s_object[n1],             //  = "o"
s_r = s_true[n1],               //  = "r"
s_s = s_false[n3],              //  = "s"
s_t = s_true[0],                //  = "t"
s_u = s_undefined[0],           //  = "u"
s_tmp = /""ω""/+/\\ω\\/,      //  = "/""ω""//\\ω\\"
s_quot = s_tmp[n1],             //  = """
s_bs = s_tmp[n9],               //  = "\"
s_bsu = s_bs+s_u,               //  = "\u"
s_bsu0 = s_bsu+n0+n0,           //  = "\u00"
s_constructor =                 //  = "constructor"
    s_c+s_o+s_n+s_s+s_t+s_r+s_u+s_c+s_t+s_o+s_r,
s_code =                        //  = "return"\u0061\u006c\u0065\u0072\u0074\u0028\u0022\u0028\u300d\u30fb\u03c9\u30fb\u0029\u300d\u3046\u30fc\u0021\u0028\u002f\u30fb\u03c9\u30fb\u0029\u002f\u306b\u3083\u30fc\u0021\u0022\u0029""
    s_r+s_e+s_t+s_u+s_r+s_n+s_quot+s_bsu0+n6+n1+s_bsu0+n6+s_c+s_bsu0+n6+n5+s_bsu0+n7+n2+s_bsu0+n7+n4+s_bsu0+n2+n8+s_bsu0+n2+n2+s_bsu0+n2+n8+s_bsu+n3+n0+n0+s_d+s_bsu+n3+n0+s_f+s_b+s_bsu+n0+n3+s_c+n9+s_bsu+n3+n0+s_f+s_b+s_bsu0+n2+n9+s_bsu+n3+n0+n0+s_d+s_bsu+n3+n0+n4+n6+s_bsu+n3+n0+s_f+s_c+s_bsu0+n2+n1+s_bsu0+n2+n8+s_bsu0+n2+s_f+s_bsu+n3+n0+s_f+s_b+s_bsu+n0+n3+s_c+n9+s_bsu+n3+n0+s_f+s_b+s_bsu0+n2+n9+s_bsu0+n2+s_f+s_bsu+n3+n0+n6+s_b+s_bsu+n3+n0+n8+n3+s_bsu+n3+n0+s_f+s_c+s_bsu0+n2+n1+s_bsu0+n2+n2+s_bsu0+n2+n9+s_quot,
s_constructor =                 //  Function
    n0[s_constructor][s_constructor],
s_code =                        //  = "alert("(」・ω・)」うー!(/・ω・)/にゃー!")"
    s_constructor(s_code)(0),
s_code =                        //  実行
    s_constructor(s_code)(0),