aboutsummaryrefslogtreecommitdiffhomepage
path: root/public/posts/2022-04-09/phperkaigi-2022-tokens/index.html
diff options
context:
space:
mode:
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.html30
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>&lt;?php
declare(strict_types=0O1);
@@ -165,7 +165,7 @@
なお、brainf*ck プログラムを普通の書き方で書くと、次のようになる。
</p>
- <pre class="monospaced">
+ <pre class="monospaced highlight">
<code>+ + + + + + + + + +
[
&gt; + + +
@@ -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>&lt;?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(&apos;%025b&apos;, $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: [&apos;0&apos;, &apos;1&apos;], replace: [&apos; &apos;, &apos;#&apos;], 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(&quot;\n&quot;, 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 &lt;= N &amp;&amp; N &lt;= 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>&lt;?php
$x = 0x14B499C;
@@ -505,7 +505,7 @@ assert(10 === +(![].+!![]));</code>
この一連の変換に対する逆変換を考えると、次のようになる。
</p>
- <pre language="php" linenumbering="unnumbered">
+ <pre class="highlight" language="php" linenumbering="unnumbered">
<code>&lt;?php
$x =
@@ -536,7 +536,7 @@ echo &quot;N = $n\n&quot;;</code>
ソースコードはこちら。
</p>
- <pre language="php" linenumbering="unnumbered">
+ <pre class="highlight" language="php" linenumbering="unnumbered">
<code>&lt;?php
// License: https://creativecommons.org/publicdomain/zero/1.0/
@@ -572,7 +572,7 @@ echo &quot;N = $n\n&quot;;</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>