== jspuzzle (Web 100pts) == 次のように空欄に番号を付ける。 {{{ ({<1> :function(){ this[<2> ] = (new Function( <3> + <4> + <5> ))(); var pattern = <6>; var r = new RegExp( pattern ); this[ r[ <7> ]( pattern ) ][ <8> ]( 1 ); }})[ <9>[ <10> ]() ](); }}} 次のような順序で考えた。 1. `<1>`と`<9>[<10>]()`は等しくないと中の関数は呼び出されない。このような組み合わせは`<1>:"function"`, `<9>:"Function"`, `<10>:"toLowerCase"` しかないので、この3つは確定する。 2. `r[<7>](pattern)]`も`<2>`と等しいと嬉しい。regexpに対する関数呼び出しなので<7>はおそらく`exec`。この時、<6>が通常の文字列だとr.exec(pattern)が配列になってしまう。そのため、`<6>`は自分自身にマッチしない‘"^[\w]$"‘となる。 3. この時、`r[”exec"](pattern)]`はnullになるため、`<2>`は`"null"`で確定する。 4. <3> <4> <5>について、何かを返却するので、`<3>`は`"return"`で確定。その後に空白が必要なので、`<4>`も`"/*^_^*/"`になる。 5. <8>でalertが呼び出されるようにするために、`<5>`を`"this"`にして、`<8>`を`"alert"`にする。これによって最終的に、`this.alert(1)`となる。