diff options
Diffstat (limited to 'public/posts/2022-04-09/phperkaigi-2022-tokens/index.html')
| -rw-r--r-- | public/posts/2022-04-09/phperkaigi-2022-tokens/index.html | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/public/posts/2022-04-09/phperkaigi-2022-tokens/index.html b/public/posts/2022-04-09/phperkaigi-2022-tokens/index.html index aee9c7c..d16739b 100644 --- a/public/posts/2022-04-09/phperkaigi-2022-tokens/index.html +++ b/public/posts/2022-04-09/phperkaigi-2022-tokens/index.html @@ -66,7 +66,7 @@ ソースコードはこちら。実行には PHP 8.1 以上が必要なので注意。 </p> - <pre language="php" linenumbering="unnumbered"> + <pre class="highlight" language="php" linenumbering="unnumbered"> <code><?php declare(strict_types=0O1); @@ -165,7 +165,7 @@ なお、brainf*ck プログラムを普通の書き方で書くと、次のようになる。 </p> - <pre class="monospaced"> + <pre class="monospaced highlight"> <code>+ + + + + + + + + + [ > + + + @@ -271,7 +271,7 @@ ソースコードのライセンスを示したこの部分だが、 </p> - <pre language="php" linenumbering="unnumbered"> + <pre class="highlight" language="php" linenumbering="unnumbered"> <code>https://creativecommons.org/publicdomain/zero/1.0/</code> </pre> @@ -286,7 +286,7 @@ ソースコード中に、ほとんど数値リテラルが書かれていないことにお気づきだろうか。 PHP では、型変換を利用することで任意の整数を作り出すことができる。 </p> - <pre language="php" linenumbering="unnumbered"> + <pre class="highlight" language="php" linenumbering="unnumbered"> <code>assert(0 === +!![]); assert(1 === +![]); assert(2 === ![]+![]); @@ -333,7 +333,7 @@ assert(10 === +(![].+!![]));</code> ソースコードはこちら。実行には PHP 8.0 以上が必要なので注意。 </p> - <pre language="php" linenumbering="unnumbered"> + <pre class="highlight" language="php" linenumbering="unnumbered"> <code><?php /********************************************************* @@ -384,7 +384,7 @@ assert(10 === +(![].+!![]));</code> まずはソースコードを読んでいく。 </p> - <pre language="php" linenumbering="unnumbered"> + <pre class="highlight" language="php" linenumbering="unnumbered"> <code>$token = [ // 略 ];</code> @@ -394,7 +394,7 @@ assert(10 === +(![].+!![]));</code> 数値からなる<code>$token</code>があり、各要素をループしている。 </p> - <pre language="php" linenumbering="unnumbered"> + <pre class="highlight" language="php" linenumbering="unnumbered"> <code> $x = $x ^ N;</code> </pre> @@ -402,7 +402,7 @@ assert(10 === +(![].+!![]));</code> まずは排他的論理和 (xor) を取り、 </p> - <pre language="php" linenumbering="unnumbered"> + <pre class="highlight" language="php" linenumbering="unnumbered"> <code> $x = sprintf('%025b', $x);</code> </pre> @@ -410,7 +410,7 @@ assert(10 === +(![].+!![]));</code> 二進数に変換して、 </p> - <pre language="php" linenumbering="unnumbered"> + <pre class="highlight" language="php" linenumbering="unnumbered"> <code> $x = str_replace(search: ['0', '1'], replace: [' ', '#'], subject: $x);</code> </pre> @@ -418,7 +418,7 @@ assert(10 === +(![].+!![]));</code> 0 を空白に、1 を<code>#</code>にし、 </p> - <pre language="php" linenumbering="unnumbered"> + <pre class="highlight" language="php" linenumbering="unnumbered"> <code> $x = implode("\n", str_split($x, length: 5));</code> </pre> @@ -474,7 +474,7 @@ assert(10 === +(![].+!![]));</code> <code>N</code>は高々 </p> - <pre language="php" linenumbering="unnumbered"> + <pre class="highlight" language="php" linenumbering="unnumbered"> <code>assert(0 <= N && N <= 0b11111_11111_11111_11111_11111);</code> </pre> @@ -482,7 +482,7 @@ assert(10 === +(![].+!![]));</code> なのでブルートフォースしてもよいが、ここではブルートフォースしない方法を紹介する。 </p> - <pre language="php" linenumbering="unnumbered"> + <pre class="highlight" language="php" linenumbering="unnumbered"> <code><?php $x = 0x14B499C; @@ -505,7 +505,7 @@ assert(10 === +(![].+!![]));</code> この一連の変換に対する逆変換を考えると、次のようになる。 </p> - <pre language="php" linenumbering="unnumbered"> + <pre class="highlight" language="php" linenumbering="unnumbered"> <code><?php $x = @@ -536,7 +536,7 @@ echo "N = $n\n";</code> ソースコードはこちら。 </p> - <pre language="php" linenumbering="unnumbered"> + <pre class="highlight" language="php" linenumbering="unnumbered"> <code><?php // License: https://creativecommons.org/publicdomain/zero/1.0/ @@ -572,7 +572,7 @@ echo "N = $n\n";</code> コメントにもあるとおり、次のようにして実行すれば答えがでてくる。 </p> - <pre language="shell-session" linenumbering="unnumbered"> + <pre class="highlight" language="shell-session" linenumbering="unnumbered"> <code>$ php toquine.php | php | php | php | ...</code> </pre> |
