GREE CODE QUESTとやら

去る2/19、参加していなかった(ここ重要)企業説明会があって、たまたまその場で余ったタンブラーをGREEの人からもらいました。で、ちょっと興味が湧いたので調べてみたところ、こういうの(Careers at GREE | お探しの情報が見つかりません)、やってるらしいですね。2014年新卒向け。

ただでさえ2014年新卒でない人間が、素のタンブラーだけもらってもどうにも始末に困るので、挑戦したよという記録にブログにメモしておきます。
まあ、解いている途中で、対象となっているコード自体が2/18以前にもうとっくにWeb上に流出しているのを確認したので、ここでやるのはただのダメ押しでしかないです。ご愁傷さま。

とりあえず回答するにあたって用意したのはGoogle Chromeのみ。使い勝手のためにNinja Kitを導入。
タンブラーに印字されているコードをひたすら打ち込む。Ninja KitのJSLintとbeautifierで難読状態を脱してインデント等読みやすい状態へと変化させる。

数値の上限下限を制限してついでに四捨五入して整数値にまるめる関数zと4×4行列の掛け算を行う関数Mの定義されている部分を境に、便宜上前半・後半と呼び分けることにする。
前半は2次元配列Pをバッファに、計算結果を2次元配列Cにひたすら格納するパート。後半はCを利用して、Webサイト内に含まれるすべての画像ファイルを対象にフィルタをかけるパート。onloadに代入されているので、読み込み終了時に無名関数が走る。

前半終了時点でのCの中身はこうなる。

[[0,0,1,1,1,2,2,2,2,3,3,3,3,4,4,4,5,5,5,5,6,6,7,7,7,8,8,9,9,10,10,11,11,12,12,13,14,14,15,16,16,17,18,18,19,20,21,21,22,23,24,25,26,27,27,28,29,30,31,32,33,34,35,36,37,38,39,41,42,43,44,46,47,48,49,51,52,54,55,56,58,59,60,62,63,65,66,68,69,70,72,73,75,76,78,79,80,82,83,85,87,88,89,91,92,94,95,97,99,100,102,103,105,106,108,109,111,113,114,116,117,119,120,122,124,125,127,128,129,131,132,134,136,138,139,141,142,144,145,147,149,150,152,153,155,156,158,159,161,163,164,166,167,169,170,172,174,175,177,178,179,181,182,184,186,187,188,190,191,193,194,195,197,199,200,201,203,204,205,207,208,209,211,212,213,214,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,232,233,234,235,236,236,237,238,238,239,240,241,241,242,242,243,243,244,245,245,246,246,247,247,248,248,248,249,249,249,250,250,250,251,251,251,251,252,252,252,252,253,253,253,253,253,254,254,254,254,254,255,255],[0,2,2,4,5,6,7,8,9,10,11,12,13,14,16,17,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,32,33,34,35,36,37,38,39,40,40,41,42,43,44,45,46,46,47,48,49,49,50,51,51,52,53,53,53,54,54,55,55,55,55,55,55,55,54,54,54,53,52,52,51,50,49,49,48,47,46,45,45,44,43,42,42,41,41,40,40,40,39,39,40,40,40,41,41,42,42,43,44,44,45,46,47,48,49,50,52,53,54,55,56,58,60,61,63,64,66,67,69,70,73,74,76,78,80,82,84,86,89,91,93,96,98,101,103,106,110,113,115,118,121,124,126,129,133,135,138,140,143,145,148,150,153,155,157,159,161,162,164,165,167,168,170,171,172,173,174,175,176,177,178,179,180,181,181,182,183,184,185,185,186,187,188,189,190,191,191,192,193,194,195,196,198,199,199,200,201,202,203,204,206,207,208,209,210,210,211,212,214,215,216,217,217,218,219,220,222,223,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,240,241,242,243,244,245,246,247,248,249,250,251,252,253,253,255],[1,3,5,8,10,13,15,17,19,22,25,26,29,31,34,36,38,40,43,44,47,49,50,52,54,56,57,59,61,62,63,64,65,66,67,67,67,67,67,67,67,67,67,66,65,65,64,64,63,62,62,61,60,60,59,58,58,58,57,57,57,57,57,57,57,57,58,58,59,60,60,61,62,63,64,64,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,83,84,85,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,110,111,112,112,113,113,114,114,114,114,114,114,114,114,113,113,112,112,111,111,110,109,109,108,107,106,106,105,104,103,103,102,101,101,100,100,100,99,99,99,99,99,99,99,99,99,99,99,99,100,100,100,100,101,101,101,101,102,102,103,104,104,105,105,106,107,108,109,110,111,112,113,114,116,117,119,121,122,124,126,128,129,131,133,136,138,140,142,145,147,149,151,154,156,159,161,163,166,168,170,173,175,177,180,182,184,186,188,191,193,195,197,200,202,204,207,209,211,214,216,218,220,223,226,228,230,232,235,237,239,242,244,247,249,251,255],[1,3,4,6,8,10,12,13,15,17,19,20,22,24,26,28,30,32,34,35,37,40,41,43,45,48,49,51,53,55,58,60,62,64,66,68,72,74,77,80,82,85,88,91,94,97,100,103,105,108,111,113,117,119,122,124,126,128,130,132,134,135,136,137,138,139,140,140,140,140,140,140,139,139,138,138,137,136,135,134,133,132,131,130,128,127,126,125,124,123,122,121,120,120,119,118,118,117,117,117,116,116,116,116,116,116,116,115,115,115,115,115,115,115,115,115,114,114,114,114,113,113,113,112,111,111,110,110,109,108,107,106,104,103,102,101,99,98,97,95,93,92,90,89,87,85,84,82,80,79,77,76,74,73,71,70,68,67,66,65,64,63,61,60,58,57,56,55,53,52,51,49,48,46,45,44,43,42,41,40,39,38,37,37,37,36,36,36,36,36,37,38,38,39,40,41,43,45,46,48,50,51,53,56,58,61,63,66,68,71,73,76,80,83,86,89,92,95,98,101,105,108,112,115,118,122,125,129,133,137,140,145,149,154,157,162,166,170,175,179,183,188,193,197,202,205,210,216,220,225,229,234,239,243,248,255]]

元の画像のRGB値を取り出して、Rに対してはC[1]、Gに対してはC[2]、Bに対してはC[3]を適用してフィルタすることで、画像の色を変化させるコードというのが実際の動作ですね。

となると、問題になるのはこのフィルタ自体がいったい何のフィルタなのかということ。効果がかかった画像を見る限り、セピア調にでもしたかったんじゃないかと思うんですが、青いところにあんまり効いてないので、何なんですかね。肌色に対しては紫がかった色調になって気持ち悪いし。

いじょ。