diff options
Diffstat (limited to 'services/nuldoc/public/blog/posts/2022-04-09/phperkaigi-2022-tokens/index.html')
| -rw-r--r-- | services/nuldoc/public/blog/posts/2022-04-09/phperkaigi-2022-tokens/index.html | 419 |
1 files changed, 202 insertions, 217 deletions
diff --git a/services/nuldoc/public/blog/posts/2022-04-09/phperkaigi-2022-tokens/index.html b/services/nuldoc/public/blog/posts/2022-04-09/phperkaigi-2022-tokens/index.html index c9e83d70..3a8e0490 100644 --- a/services/nuldoc/public/blog/posts/2022-04-09/phperkaigi-2022-tokens/index.html +++ b/services/nuldoc/public/blog/posts/2022-04-09/phperkaigi-2022-tokens/index.html @@ -15,7 +15,7 @@ <meta name="Hatena::Bookmark" content="nocomment"> <link rel="icon" type="image/svg+xml" href="/favicon.svg"> <title>PHPerKaigi 2022 トークン問題の解説|REPL: Rest-Eat-Program Loop</title> - <link rel="stylesheet" href="/style.css?h=81dfc0b483beda175e3e17562faac7c9"> + <link rel="stylesheet" href="/style.css?h=c3724e2d900f13528c82005e79a8ec23"> </head> <body class="single"> <header class="header"> @@ -166,76 +166,75 @@ <div class="filename"> brainf_ck.php </div> - <pre class="highlight" style="background-color:#f5f5f5"><code><span style="color: #6e7781"><?php</span> - -<span style="color: #cf222e">declare</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #24292f;background-color: #f6f8fa">strict_types</span><span style="color: #0550ae">=</span><span style="color: #0550ae">0O1</span><span style="color: #24292f;background-color: #f6f8fa">);</span> - -<span style="color: #cf222e">namespace</span> <span style="color: #953800">Dgcircus\PHPerKaigi\Y2022</span><span style="color: #24292f;background-color: #f6f8fa">;</span> - -<span style="color: #6e7781">/** - * @todo - * Run this program to acquire a PHPer token. - */</span> - -<span style="color: #24292f;background-color: #f6f8fa">https</span><span style="color: #0550ae">://</span><span style="color: #24292f;background-color: #f6f8fa">creativecommons</span><span style="color: #0550ae">.</span><span style="color: #24292f;background-color: #f6f8fa">org</span><span style="color: #0550ae">/</span><span style="color: #24292f;background-color: #f6f8fa">publicdomain</span><span style="color: #0550ae">/</span><span style="color: #24292f;background-color: #f6f8fa">zero</span><span style="color: #0550ae">/</span><span style="color: #0550ae">1.0</span><span style="color: #0550ae">/</span> - -<span style="color: #8250df">\error_reporting</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">~+!</span><span style="color: #0a3069">'We are hiring!'</span><span style="color: #24292f;background-color: #f6f8fa">);</span> - -<span style="color: #0550ae">$z</span> <span style="color: #0550ae">=</span> <span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$f</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #0550ae">$f</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(...</span><span style="color: #0550ae">$xs</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">)(</span><span style="color: #0550ae">...</span><span style="color: #0550ae">$xs</span><span style="color: #24292f;background-color: #f6f8fa">)))(</span><span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #0550ae">$f</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(...</span><span style="color: #0550ae">$xs</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">)(</span><span style="color: #0550ae">...</span><span style="color: #0550ae">$xs</span><span style="color: #24292f;background-color: #f6f8fa">)));</span> -<span style="color: #0550ae">$id</span> <span style="color: #0550ae">=</span> <span style="color: #8250df">\spl_object_id</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">...</span><span style="color: #24292f;background-color: #f6f8fa">);</span> -<span style="color: #0550ae">$put</span> <span style="color: #0550ae">=</span> <span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$c</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #8250df">\printf</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0a3069">'%c'</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$c</span><span style="color: #24292f;background-color: #f6f8fa">);</span> -<span style="color: #0550ae">$mm</span> <span style="color: #0550ae">=</span> <span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$n</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #cf222e">new</span> <span style="color: #953800">\ArrayObject</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #8250df">\array_fill</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">+!!</span><span style="color: #24292f;background-color: #f6f8fa">[],</span> <span style="color: #0550ae">$n</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">));</span> - -<span style="color: #f6f8fa;background-color: #82071e">$👉</span> <span style="color: #0550ae">=</span> <span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$m</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$b</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$e</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">++</span><span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">++</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">];</span> -<span style="color: #f6f8fa;background-color: #82071e">$👈</span> <span style="color: #0550ae">=</span> <span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$m</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$b</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$e</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">--</span><span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">++</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">];</span> -<span style="color: #f6f8fa;background-color: #82071e">$👍</span> <span style="color: #0550ae">=</span> <span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$m</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$b</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$e</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">++</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">++</span><span style="color: #0550ae">$m</span><span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">]];</span> -<span style="color: #f6f8fa;background-color: #82071e">$👎</span> <span style="color: #0550ae">=</span> <span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$m</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$b</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$e</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">++</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">--</span><span style="color: #0550ae">$m</span><span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">]];</span> -<span style="color: #f6f8fa;background-color: #82071e">$📝</span> <span style="color: #0550ae">=</span> <span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$m</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$b</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$e</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">++</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$put</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$m</span><span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">])];</span> -<span style="color: #f6f8fa;background-color: #82071e">$🤡</span> <span style="color: #0550ae">=</span> <span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$m</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$b</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$e</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #cf222e">match</span> <span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$m</span><span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">])</span> <span style="color: #24292f;background-color: #f6f8fa">{</span> - <span style="color: #0550ae">+!!</span><span style="color: #24292f;background-color: #f6f8fa">[]</span> <span style="color: #0550ae">=></span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$z</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$loop</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$n</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #cf222e">match</span> <span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$id</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">]))</span> <span style="color: #24292f;background-color: #f6f8fa">{</span> - <span style="color: #0550ae">$b</span> <span style="color: #0550ae">=></span> <span style="color: #0550ae">$loop</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">++</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">++</span><span style="color: #0550ae">$n</span><span style="color: #24292f;background-color: #f6f8fa">),</span> - <span style="color: #0550ae">$e</span> <span style="color: #0550ae">=></span> <span style="color: #0550ae">$n</span> <span style="color: #0550ae">===</span> <span style="color: #0550ae">+!!</span><span style="color: #24292f;background-color: #f6f8fa">[]</span> <span style="color: #0550ae">?</span> <span style="color: #0550ae">++</span><span style="color: #0550ae">$pc</span> <span style="color: #0550ae">:</span> <span style="color: #0550ae">$loop</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">++</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">--</span><span style="color: #0550ae">$n</span><span style="color: #24292f;background-color: #f6f8fa">),</span> - <span style="color: #cf222e">default</span> <span style="color: #0550ae">=></span> <span style="color: #0550ae">$loop</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">++</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$n</span><span style="color: #24292f;background-color: #f6f8fa">),</span> - <span style="color: #24292f;background-color: #f6f8fa">})(</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">-!</span><span style="color: #24292f;background-color: #f6f8fa">[])],</span> - <span style="color: #cf222e">default</span> <span style="color: #0550ae">=></span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">++</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">],</span> -<span style="color: #24292f;background-color: #f6f8fa">};</span> -<span style="color: #f6f8fa;background-color: #82071e">$🎪</span> <span style="color: #0550ae">=</span> <span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$m</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$b</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$e</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #cf222e">match</span> <span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$m</span><span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">])</span> <span style="color: #24292f;background-color: #f6f8fa">{</span> - <span style="color: #0550ae">+!!</span><span style="color: #24292f;background-color: #f6f8fa">[]</span> <span style="color: #0550ae">=></span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">++</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">],</span> - <span style="color: #cf222e">default</span> <span style="color: #0550ae">=></span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$z</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$loop</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$n</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #cf222e">match</span> <span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$id</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">]))</span> <span style="color: #24292f;background-color: #f6f8fa">{</span> - <span style="color: #0550ae">$e</span> <span style="color: #0550ae">=></span> <span style="color: #0550ae">$loop</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">--</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">++</span><span style="color: #0550ae">$n</span><span style="color: #24292f;background-color: #f6f8fa">),</span> - <span style="color: #0550ae">$b</span> <span style="color: #0550ae">=></span> <span style="color: #0550ae">$n</span> <span style="color: #0550ae">===</span> <span style="color: #0550ae">+!!</span><span style="color: #24292f;background-color: #f6f8fa">[]</span> <span style="color: #0550ae">?</span> <span style="color: #0550ae">$pc</span><span style="color: #0550ae">+!</span><span style="color: #24292f;background-color: #f6f8fa">[]</span> <span style="color: #0550ae">:</span> <span style="color: #0550ae">$loop</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">--</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">--</span><span style="color: #0550ae">$n</span><span style="color: #24292f;background-color: #f6f8fa">),</span> - <span style="color: #cf222e">default</span> <span style="color: #0550ae">=></span> <span style="color: #0550ae">$loop</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">--</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$n</span><span style="color: #24292f;background-color: #f6f8fa">),</span> - <span style="color: #24292f;background-color: #f6f8fa">})(</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">-!</span><span style="color: #24292f;background-color: #f6f8fa">[])],</span> -<span style="color: #24292f;background-color: #f6f8fa">};</span> -<span style="color: #f6f8fa;background-color: #82071e">$🐘</span> <span style="color: #0550ae">=</span> <span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #0550ae">$z</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$loop</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$m</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$b</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$e</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> - <span style="color: #cf222e">isset</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">])</span> <span style="color: #0550ae">&&</span> <span style="color: #0550ae">$loop</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$m</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$b</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$e</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">...</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">](</span><span style="color: #0550ae">$m</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$b</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$e</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">)))</span> -<span style="color: #24292f;background-color: #f6f8fa">)(</span><span style="color: #0550ae">$mm</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">+!!</span><span style="color: #24292f;background-color: #f6f8fa">[],</span> <span style="color: #0550ae">+</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">!</span><span style="color: #24292f;background-color: #f6f8fa">[]</span><span style="color: #0550ae">.</span><span style="color: #0550ae">!</span><span style="color: #24292f;background-color: #f6f8fa">[])),</span> <span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$id</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #f6f8fa;background-color: #82071e">$🤡</span><span style="color: #24292f;background-color: #f6f8fa">),</span> <span style="color: #0550ae">$id</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #f6f8fa;background-color: #82071e">$🎪</span><span style="color: #24292f;background-color: #f6f8fa">),</span> <span style="color: #0550ae">+!!</span><span style="color: #24292f;background-color: #f6f8fa">[],</span> <span style="color: #0550ae">+!!</span><span style="color: #24292f;background-color: #f6f8fa">[]);</span> - -<span style="color: #f6f8fa;background-color: #82071e">$🐘</span><span style="color: #24292f;background-color: #f6f8fa">([</span> - <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> - <span style="color: #f6f8fa;background-color: #82071e">$🤡</span><span style="color: #24292f;background-color: #f6f8fa">,</span> - <span style="color: #f6f8fa;background-color: #82071e">$👉</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> - <span style="color: #f6f8fa;background-color: #82071e">$👉</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> - <span style="color: #f6f8fa;background-color: #82071e">$👉</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> - <span style="color: #f6f8fa;background-color: #82071e">$👉</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> - <span style="color: #f6f8fa;background-color: #82071e">$👈</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👈</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👈</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👈</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> - <span style="color: #f6f8fa;background-color: #82071e">$🎪</span><span style="color: #24292f;background-color: #f6f8fa">,</span> - <span style="color: #f6f8fa;background-color: #82071e">$👉</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$📝</span><span style="color: #24292f;background-color: #f6f8fa">,</span> - <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$📝</span><span style="color: #24292f;background-color: #f6f8fa">,</span> - <span style="color: #f6f8fa;background-color: #82071e">$👉</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$📝</span><span style="color: #24292f;background-color: #f6f8fa">,</span> - <span style="color: #f6f8fa;background-color: #82071e">$👉</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$📝</span><span style="color: #24292f;background-color: #f6f8fa">,</span> - <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$📝</span><span style="color: #24292f;background-color: #f6f8fa">,</span> - <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$📝</span><span style="color: #24292f;background-color: #f6f8fa">,</span> - <span style="color: #f6f8fa;background-color: #82071e">$👈</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$📝</span><span style="color: #24292f;background-color: #f6f8fa">,</span> - <span style="color: #f6f8fa;background-color: #82071e">$👉</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👉</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$📝</span><span style="color: #24292f;background-color: #f6f8fa">,</span> - <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$📝</span><span style="color: #24292f;background-color: #f6f8fa">,</span> - <span style="color: #f6f8fa;background-color: #82071e">$👈</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$📝</span><span style="color: #24292f;background-color: #f6f8fa">,</span> - <span style="color: #f6f8fa;background-color: #82071e">$👈</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$📝</span><span style="color: #24292f;background-color: #f6f8fa">,</span> - <span style="color: #f6f8fa;background-color: #82071e">$👉</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$📝</span><span style="color: #24292f;background-color: #f6f8fa">,</span> - <span style="color: #f6f8fa;background-color: #82071e">$👉</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$📝</span><span style="color: #24292f;background-color: #f6f8fa">,</span> - <span style="color: #f6f8fa;background-color: #82071e">$👈</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$📝</span><span style="color: #24292f;background-color: #f6f8fa">,</span> -<span style="color: #24292f;background-color: #f6f8fa">]);</span> -</code></pre> + <pre class="highlight" style="background-color:#f5f5f5"><code><div class="codeblock-line"><span style="color: #6e7781"><?php</span> +</div><div class="codeblock-line"> +</div><div class="codeblock-line"><span style="color: #cf222e">declare</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #24292f;background-color: #f6f8fa">strict_types</span><span style="color: #0550ae">=</span><span style="color: #0550ae">0O1</span><span style="color: #24292f;background-color: #f6f8fa">);</span> +</div><div class="codeblock-line"> +</div><div class="codeblock-line"><span style="color: #cf222e">namespace</span> <span style="color: #953800">Dgcircus\PHPerKaigi\Y2022</span><span style="color: #24292f;background-color: #f6f8fa">;</span> +</div><div class="codeblock-line"> +</div><div class="codeblock-line"><span style="color: #6e7781">/**</span> +</div><div class="codeblock-line"><span style="color: #6e7781"> * @todo</span> +</div><div class="codeblock-line"><span style="color: #6e7781"> * Run this program to acquire a PHPer token.</span> +</div><div class="codeblock-line"><span style="color: #6e7781"> */</span> +</div><div class="codeblock-line"> +</div><div class="codeblock-line"><span style="color: #24292f;background-color: #f6f8fa">https</span><span style="color: #0550ae">://</span><span style="color: #24292f;background-color: #f6f8fa">creativecommons</span><span style="color: #0550ae">.</span><span style="color: #24292f;background-color: #f6f8fa">org</span><span style="color: #0550ae">/</span><span style="color: #24292f;background-color: #f6f8fa">publicdomain</span><span style="color: #0550ae">/</span><span style="color: #24292f;background-color: #f6f8fa">zero</span><span style="color: #0550ae">/</span><span style="color: #0550ae">1.0</span><span style="color: #0550ae">/</span> +</div><div class="codeblock-line"> +</div><div class="codeblock-line"><span style="color: #8250df">\error_reporting</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">~+!</span><span style="color: #0a3069">'We are hiring!'</span><span style="color: #24292f;background-color: #f6f8fa">);</span> +</div><div class="codeblock-line"> +</div><div class="codeblock-line"><span style="color: #0550ae">$z</span> <span style="color: #0550ae">=</span> <span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$f</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #0550ae">$f</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(...</span><span style="color: #0550ae">$xs</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">)(</span><span style="color: #0550ae">...</span><span style="color: #0550ae">$xs</span><span style="color: #24292f;background-color: #f6f8fa">)))(</span><span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #0550ae">$f</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(...</span><span style="color: #0550ae">$xs</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">)(</span><span style="color: #0550ae">...</span><span style="color: #0550ae">$xs</span><span style="color: #24292f;background-color: #f6f8fa">)));</span> +</div><div class="codeblock-line"><span style="color: #0550ae">$id</span> <span style="color: #0550ae">=</span> <span style="color: #8250df">\spl_object_id</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">...</span><span style="color: #24292f;background-color: #f6f8fa">);</span> +</div><div class="codeblock-line"><span style="color: #0550ae">$put</span> <span style="color: #0550ae">=</span> <span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$c</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #8250df">\printf</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0a3069">'%c'</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$c</span><span style="color: #24292f;background-color: #f6f8fa">);</span> +</div><div class="codeblock-line"><span style="color: #0550ae">$mm</span> <span style="color: #0550ae">=</span> <span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$n</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #cf222e">new</span> <span style="color: #953800">\ArrayObject</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #8250df">\array_fill</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">+!!</span><span style="color: #24292f;background-color: #f6f8fa">[],</span> <span style="color: #0550ae">$n</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">));</span> +</div><div class="codeblock-line"> +</div><div class="codeblock-line"><span style="color: #f6f8fa;background-color: #82071e">$👉</span> <span style="color: #0550ae">=</span> <span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$m</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$b</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$e</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">++</span><span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">++</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">];</span> +</div><div class="codeblock-line"><span style="color: #f6f8fa;background-color: #82071e">$👈</span> <span style="color: #0550ae">=</span> <span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$m</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$b</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$e</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">--</span><span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">++</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">];</span> +</div><div class="codeblock-line"><span style="color: #f6f8fa;background-color: #82071e">$👍</span> <span style="color: #0550ae">=</span> <span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$m</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$b</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$e</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">++</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">++</span><span style="color: #0550ae">$m</span><span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">]];</span> +</div><div class="codeblock-line"><span style="color: #f6f8fa;background-color: #82071e">$👎</span> <span style="color: #0550ae">=</span> <span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$m</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$b</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$e</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">++</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">--</span><span style="color: #0550ae">$m</span><span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">]];</span> +</div><div class="codeblock-line"><span style="color: #f6f8fa;background-color: #82071e">$📝</span> <span style="color: #0550ae">=</span> <span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$m</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$b</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$e</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">++</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$put</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$m</span><span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">])];</span> +</div><div class="codeblock-line"><span style="color: #f6f8fa;background-color: #82071e">$🤡</span> <span style="color: #0550ae">=</span> <span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$m</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$b</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$e</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #cf222e">match</span> <span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$m</span><span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">])</span> <span style="color: #24292f;background-color: #f6f8fa">{</span> +</div><div class="codeblock-line"> <span style="color: #0550ae">+!!</span><span style="color: #24292f;background-color: #f6f8fa">[]</span> <span style="color: #0550ae">=></span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$z</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$loop</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$n</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #cf222e">match</span> <span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$id</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">]))</span> <span style="color: #24292f;background-color: #f6f8fa">{</span> +</div><div class="codeblock-line"> <span style="color: #0550ae">$b</span> <span style="color: #0550ae">=></span> <span style="color: #0550ae">$loop</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">++</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">++</span><span style="color: #0550ae">$n</span><span style="color: #24292f;background-color: #f6f8fa">),</span> +</div><div class="codeblock-line"> <span style="color: #0550ae">$e</span> <span style="color: #0550ae">=></span> <span style="color: #0550ae">$n</span> <span style="color: #0550ae">===</span> <span style="color: #0550ae">+!!</span><span style="color: #24292f;background-color: #f6f8fa">[]</span> <span style="color: #0550ae">?</span> <span style="color: #0550ae">++</span><span style="color: #0550ae">$pc</span> <span style="color: #0550ae">:</span> <span style="color: #0550ae">$loop</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">++</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">--</span><span style="color: #0550ae">$n</span><span style="color: #24292f;background-color: #f6f8fa">),</span> +</div><div class="codeblock-line"> <span style="color: #cf222e">default</span> <span style="color: #0550ae">=></span> <span style="color: #0550ae">$loop</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">++</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$n</span><span style="color: #24292f;background-color: #f6f8fa">),</span> +</div><div class="codeblock-line"> <span style="color: #24292f;background-color: #f6f8fa">})(</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">-!</span><span style="color: #24292f;background-color: #f6f8fa">[])],</span> +</div><div class="codeblock-line"> <span style="color: #cf222e">default</span> <span style="color: #0550ae">=></span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">++</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">],</span> +</div><div class="codeblock-line"><span style="color: #24292f;background-color: #f6f8fa">};</span> +</div><div class="codeblock-line"><span style="color: #f6f8fa;background-color: #82071e">$🎪</span> <span style="color: #0550ae">=</span> <span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$m</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$b</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$e</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #cf222e">match</span> <span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$m</span><span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">])</span> <span style="color: #24292f;background-color: #f6f8fa">{</span> +</div><div class="codeblock-line"> <span style="color: #0550ae">+!!</span><span style="color: #24292f;background-color: #f6f8fa">[]</span> <span style="color: #0550ae">=></span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">++</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">],</span> +</div><div class="codeblock-line"> <span style="color: #cf222e">default</span> <span style="color: #0550ae">=></span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$z</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$loop</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$n</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #cf222e">match</span> <span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$id</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">]))</span> <span style="color: #24292f;background-color: #f6f8fa">{</span> +</div><div class="codeblock-line"> <span style="color: #0550ae">$e</span> <span style="color: #0550ae">=></span> <span style="color: #0550ae">$loop</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">--</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">++</span><span style="color: #0550ae">$n</span><span style="color: #24292f;background-color: #f6f8fa">),</span> +</div><div class="codeblock-line"> <span style="color: #0550ae">$b</span> <span style="color: #0550ae">=></span> <span style="color: #0550ae">$n</span> <span style="color: #0550ae">===</span> <span style="color: #0550ae">+!!</span><span style="color: #24292f;background-color: #f6f8fa">[]</span> <span style="color: #0550ae">?</span> <span style="color: #0550ae">$pc</span><span style="color: #0550ae">+!</span><span style="color: #24292f;background-color: #f6f8fa">[]</span> <span style="color: #0550ae">:</span> <span style="color: #0550ae">$loop</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">--</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">--</span><span style="color: #0550ae">$n</span><span style="color: #24292f;background-color: #f6f8fa">),</span> +</div><div class="codeblock-line"> <span style="color: #cf222e">default</span> <span style="color: #0550ae">=></span> <span style="color: #0550ae">$loop</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">--</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$n</span><span style="color: #24292f;background-color: #f6f8fa">),</span> +</div><div class="codeblock-line"> <span style="color: #24292f;background-color: #f6f8fa">})(</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">-!</span><span style="color: #24292f;background-color: #f6f8fa">[])],</span> +</div><div class="codeblock-line"><span style="color: #24292f;background-color: #f6f8fa">};</span> +</div><div class="codeblock-line"><span style="color: #f6f8fa;background-color: #82071e">$🐘</span> <span style="color: #0550ae">=</span> <span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #0550ae">$z</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$loop</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$m</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$b</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$e</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> +</div><div class="codeblock-line"> <span style="color: #cf222e">isset</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">])</span> <span style="color: #0550ae">&&</span> <span style="color: #0550ae">$loop</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$m</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$b</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$e</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">...</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">](</span><span style="color: #0550ae">$m</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$b</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$e</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$mp</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$pc</span><span style="color: #24292f;background-color: #f6f8fa">)))</span> +</div><div class="codeblock-line"><span style="color: #24292f;background-color: #f6f8fa">)(</span><span style="color: #0550ae">$mm</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">+!!</span><span style="color: #24292f;background-color: #f6f8fa">[],</span> <span style="color: #0550ae">+</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">!</span><span style="color: #24292f;background-color: #f6f8fa">[]</span><span style="color: #0550ae">.</span><span style="color: #0550ae">!</span><span style="color: #24292f;background-color: #f6f8fa">[])),</span> <span style="color: #0550ae">$p</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$id</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #f6f8fa;background-color: #82071e">$🤡</span><span style="color: #24292f;background-color: #f6f8fa">),</span> <span style="color: #0550ae">$id</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #f6f8fa;background-color: #82071e">$🎪</span><span style="color: #24292f;background-color: #f6f8fa">),</span> <span style="color: #0550ae">+!!</span><span style="color: #24292f;background-color: #f6f8fa">[],</span> <span style="color: #0550ae">+!!</span><span style="color: #24292f;background-color: #f6f8fa">[]);</span> +</div><div class="codeblock-line"> +</div><div class="codeblock-line"><span style="color: #f6f8fa;background-color: #82071e">$🐘</span><span style="color: #24292f;background-color: #f6f8fa">([</span> +</div><div class="codeblock-line"> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> +</div><div class="codeblock-line"> <span style="color: #f6f8fa;background-color: #82071e">$🤡</span><span style="color: #24292f;background-color: #f6f8fa">,</span> +</div><div class="codeblock-line"> <span style="color: #f6f8fa;background-color: #82071e">$👉</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> +</div><div class="codeblock-line"> <span style="color: #f6f8fa;background-color: #82071e">$👉</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> +</div><div class="codeblock-line"> <span style="color: #f6f8fa;background-color: #82071e">$👉</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> +</div><div class="codeblock-line"> <span style="color: #f6f8fa;background-color: #82071e">$👉</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> +</div><div class="codeblock-line"> <span style="color: #f6f8fa;background-color: #82071e">$👈</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👈</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👈</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👈</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> +</div><div class="codeblock-line"> <span style="color: #f6f8fa;background-color: #82071e">$🎪</span><span style="color: #24292f;background-color: #f6f8fa">,</span> +</div><div class="codeblock-line"> <span style="color: #f6f8fa;background-color: #82071e">$👉</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$📝</span><span style="color: #24292f;background-color: #f6f8fa">,</span> +</div><div class="codeblock-line"> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$📝</span><span style="color: #24292f;background-color: #f6f8fa">,</span> +</div><div class="codeblock-line"> <span style="color: #f6f8fa;background-color: #82071e">$👉</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$📝</span><span style="color: #24292f;background-color: #f6f8fa">,</span> +</div><div class="codeblock-line"> <span style="color: #f6f8fa;background-color: #82071e">$👉</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$📝</span><span style="color: #24292f;background-color: #f6f8fa">,</span> +</div><div class="codeblock-line"> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$📝</span><span style="color: #24292f;background-color: #f6f8fa">,</span> +</div><div class="codeblock-line"> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$📝</span><span style="color: #24292f;background-color: #f6f8fa">,</span> +</div><div class="codeblock-line"> <span style="color: #f6f8fa;background-color: #82071e">$👈</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$📝</span><span style="color: #24292f;background-color: #f6f8fa">,</span> +</div><div class="codeblock-line"> <span style="color: #f6f8fa;background-color: #82071e">$👉</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👉</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$📝</span><span style="color: #24292f;background-color: #f6f8fa">,</span> +</div><div class="codeblock-line"> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$📝</span><span style="color: #24292f;background-color: #f6f8fa">,</span> +</div><div class="codeblock-line"> <span style="color: #f6f8fa;background-color: #82071e">$👈</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$📝</span><span style="color: #24292f;background-color: #f6f8fa">,</span> +</div><div class="codeblock-line"> <span style="color: #f6f8fa;background-color: #82071e">$👈</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$📝</span><span style="color: #24292f;background-color: #f6f8fa">,</span> +</div><div class="codeblock-line"> <span style="color: #f6f8fa;background-color: #82071e">$👉</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👍</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$📝</span><span style="color: #24292f;background-color: #f6f8fa">,</span> +</div><div class="codeblock-line"> <span style="color: #f6f8fa;background-color: #82071e">$👉</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$👎</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$📝</span><span style="color: #24292f;background-color: #f6f8fa">,</span> +</div><div class="codeblock-line"> <span style="color: #f6f8fa;background-color: #82071e">$👈</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #f6f8fa;background-color: #82071e">$📝</span><span style="color: #24292f;background-color: #f6f8fa">,</span> +</div><div class="codeblock-line"><span style="color: #24292f;background-color: #f6f8fa">]);</span></div></code></pre> </div> <p> この問題は、単に適切なバージョンの PHP で動かせばトークンが得られる。 @@ -260,29 +259,28 @@ なお、brainf*ck プログラムを普通の書き方で書くと、次のようになる。 </p> <div class="codeblock"> - <pre class="highlight" style="background-color:#f5f5f5"><code>+ + + + + + + + + + -[ - > + + + - > + + + + + - > + + + + + + + + + + + + - > + + + + + + + + + + - < < < < - -] -> + + + + + . -- - . -> - - - . -> - - - . -- - . -- . -< . -> > - - . -+ + + + + + + . -< - - - - . -< . -> + + . -> - . -< . -</code></pre> + <pre class="highlight" style="background-color:#f5f5f5"><code><div class="codeblock-line">+ + + + + + + + + + +</div><div class="codeblock-line">[ +</div><div class="codeblock-line"> > + + + +</div><div class="codeblock-line"> > + + + + + +</div><div class="codeblock-line"> > + + + + + + + + + + + + +</div><div class="codeblock-line"> > + + + + + + + + + + +</div><div class="codeblock-line"> < < < < - +</div><div class="codeblock-line">] +</div><div class="codeblock-line">> + + + + + . +</div><div class="codeblock-line">- - . +</div><div class="codeblock-line">> - - - . +</div><div class="codeblock-line">> - - - . +</div><div class="codeblock-line">- - . +</div><div class="codeblock-line">- . +</div><div class="codeblock-line">< . +</div><div class="codeblock-line">> > - - . +</div><div class="codeblock-line">+ + + + + + + . +</div><div class="codeblock-line">< - - - - . +</div><div class="codeblock-line">< . +</div><div class="codeblock-line">> + + . +</div><div class="codeblock-line">> - . +</div><div class="codeblock-line">< .</div></code></pre> </div> <p> 実行結果はこちら: <a class="url" href="https://ideone.com/22VWmb" rel="noreferrer" target="_blank">https://ideone.com/22VWmb</a> @@ -338,8 +336,7 @@ ソースコードのライセンスを示したこの部分だが、 </p> <div class="codeblock"> - <pre class="highlight" style="background-color:#f5f5f5"><code><span style="color: #24292f;background-color: #f6f8fa">https</span><span style="color: #0550ae">://</span><span style="color: #24292f;background-color: #f6f8fa">creativecommons</span><span style="color: #0550ae">.</span><span style="color: #24292f;background-color: #f6f8fa">org</span><span style="color: #0550ae">/</span><span style="color: #24292f;background-color: #f6f8fa">publicdomain</span><span style="color: #0550ae">/</span><span style="color: #24292f;background-color: #f6f8fa">zero</span><span style="color: #0550ae">/</span><span style="color: #0550ae">1.0</span><span style="color: #0550ae">/</span> -</code></pre> + <pre class="highlight" style="background-color:#f5f5f5"><code><div class="codeblock-line"><span style="color: #24292f;background-color: #f6f8fa">https</span><span style="color: #0550ae">://</span><span style="color: #24292f;background-color: #f6f8fa">creativecommons</span><span style="color: #0550ae">.</span><span style="color: #24292f;background-color: #f6f8fa">org</span><span style="color: #0550ae">/</span><span style="color: #24292f;background-color: #f6f8fa">publicdomain</span><span style="color: #0550ae">/</span><span style="color: #24292f;background-color: #f6f8fa">zero</span><span style="color: #0550ae">/</span><span style="color: #0550ae">1.0</span><span style="color: #0550ae">/</span></div></code></pre> </div> <p> 完全に合法な PHP のコードである。 <code>https:</code> 部分はラベル、<code>//</code> 以降は行コメントになっている。 @@ -351,12 +348,11 @@ ソースコード中に、ほとんど数値リテラルが書かれていないことにお気づきだろうか。PHP では、型変換を利用することで任意の整数を作り出すことができる。 </p> <div class="codeblock"> - <pre class="highlight" style="background-color:#f5f5f5"><code><span style="color: #953800">assert</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">0</span> <span style="color: #0550ae">===</span> <span style="color: #0550ae">+!!</span><span style="color: #24292f;background-color: #f6f8fa">[]);</span> -<span style="color: #953800">assert</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">1</span> <span style="color: #0550ae">===</span> <span style="color: #0550ae">+!</span><span style="color: #24292f;background-color: #f6f8fa">[]);</span> -<span style="color: #953800">assert</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">2</span> <span style="color: #0550ae">===</span> <span style="color: #0550ae">!</span><span style="color: #24292f;background-color: #f6f8fa">[]</span><span style="color: #0550ae">+!</span><span style="color: #24292f;background-color: #f6f8fa">[]);</span> -<span style="color: #953800">assert</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">3</span> <span style="color: #0550ae">===</span> <span style="color: #0550ae">!</span><span style="color: #24292f;background-color: #f6f8fa">[]</span><span style="color: #0550ae">+!</span><span style="color: #24292f;background-color: #f6f8fa">[]</span><span style="color: #0550ae">+!</span><span style="color: #24292f;background-color: #f6f8fa">[]);</span> -<span style="color: #953800">assert</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">10</span> <span style="color: #0550ae">===</span> <span style="color: #0550ae">+</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">!</span><span style="color: #24292f;background-color: #f6f8fa">[]</span><span style="color: #0550ae">.</span><span style="color: #0550ae">+!!</span><span style="color: #24292f;background-color: #f6f8fa">[]));</span> -</code></pre> + <pre class="highlight" style="background-color:#f5f5f5"><code><div class="codeblock-line"><span style="color: #953800">assert</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">0</span> <span style="color: #0550ae">===</span> <span style="color: #0550ae">+!!</span><span style="color: #24292f;background-color: #f6f8fa">[]);</span> +</div><div class="codeblock-line"><span style="color: #953800">assert</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">1</span> <span style="color: #0550ae">===</span> <span style="color: #0550ae">+!</span><span style="color: #24292f;background-color: #f6f8fa">[]);</span> +</div><div class="codeblock-line"><span style="color: #953800">assert</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">2</span> <span style="color: #0550ae">===</span> <span style="color: #0550ae">!</span><span style="color: #24292f;background-color: #f6f8fa">[]</span><span style="color: #0550ae">+!</span><span style="color: #24292f;background-color: #f6f8fa">[]);</span> +</div><div class="codeblock-line"><span style="color: #953800">assert</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">3</span> <span style="color: #0550ae">===</span> <span style="color: #0550ae">!</span><span style="color: #24292f;background-color: #f6f8fa">[]</span><span style="color: #0550ae">+!</span><span style="color: #24292f;background-color: #f6f8fa">[]</span><span style="color: #0550ae">+!</span><span style="color: #24292f;background-color: #f6f8fa">[]);</span> +</div><div class="codeblock-line"><span style="color: #953800">assert</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">10</span> <span style="color: #0550ae">===</span> <span style="color: #0550ae">+</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">!</span><span style="color: #24292f;background-color: #f6f8fa">[]</span><span style="color: #0550ae">.</span><span style="color: #0550ae">+!!</span><span style="color: #24292f;background-color: #f6f8fa">[]));</span></div></code></pre> </div> <p> <code>[]</code> に <code>!</code> を適用すると <code>true</code> が返ってくる。それに <code>+</code> を適用すると、<code>bool</code> から <code>int</code> ヘの型変換が走り、<code>1</code> が生成される。<code>10</code> はさらにトリッキーだ。まず <code>1</code> と <code>0</code> を作り、<code>.</code> で文字列として結合する (<code>'10'</code>)。これに <code>+</code> を適用すると、<code>string</code> から <code>int</code> への型変換が走り、<code>10</code> が生まれる (コード量に頓着しないなら、<code>1</code> を 10 個足し合わせてももちろん 10 が作れる)。 @@ -394,41 +390,40 @@ <div class="filename"> riddle.php </div> - <pre class="highlight" style="background-color:#f5f5f5"><code><span style="color: #6e7781"><?php</span> - -<span style="color: #6e7781">/********************************************************* - * This program displays a PHPer token. * - * Guess 'N'. * - * * - * Hints: * - * - N itself has no special meaning, e.g., 42, 8128, * - * it is selected at random. * - * - Each element of $token represents a single letter. * - * - One letter consists of 5x5 cells. * - * - Remember, the output is a complete PHPer token. * - * * - * License: * - * https://creativecommons.org/publicdomain/zero/1.0/ * - *********************************************************/</span> -<span style="color: #cf222e">const</span> <span style="color: #953800">N</span> <span style="color: #0550ae">=</span> <span style="color: #0550ae">0</span> <span style="color: #6e7781">/* Change it to your answer. */</span><span style="color: #24292f;background-color: #f6f8fa">;</span> -<span style="color: #953800">assert</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">0</span> <span style="color: #0550ae"><=</span> <span style="color: #953800">N</span> <span style="color: #0550ae">&&</span> <span style="color: #953800">N</span> <span style="color: #0550ae"><=</span> <span style="color: #0550ae">0b11111_11111_11111_11111_11111</span><span style="color: #24292f;background-color: #f6f8fa">);</span> - -<span style="color: #0550ae">$token</span> <span style="color: #0550ae">=</span> <span style="color: #24292f;background-color: #f6f8fa">[</span> - <span style="color: #0550ae">0x14B499C</span><span style="color: #24292f;background-color: #f6f8fa">,</span> - <span style="color: #0550ae">0x0BE34CC</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x01C9C69</span><span style="color: #24292f;background-color: #f6f8fa">,</span> - <span style="color: #0550ae">0x0ECA069</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x01C2449</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x0FDB166</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x01C9C69</span><span style="color: #24292f;background-color: #f6f8fa">,</span> - <span style="color: #0550ae">0x01C1C66</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x0FC1C47</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x01C1C66</span><span style="color: #24292f;background-color: #f6f8fa">,</span> - <span style="color: #0550ae">0x10C5858</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1E4E3B8</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1A2F2F8</span><span style="color: #24292f;background-color: #f6f8fa">,</span> -<span style="color: #24292f;background-color: #f6f8fa">];</span> -<span style="color: #cf222e">foreach</span> <span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$token</span> <span style="color: #cf222e">as</span> <span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #24292f;background-color: #f6f8fa">{</span> - <span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #0550ae">$x</span> <span style="color: #0550ae">^</span> <span style="color: #953800">N</span><span style="color: #24292f;background-color: #f6f8fa">;</span> - - <span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #953800">sprintf</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0a3069">'%025b'</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">);</span> - <span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #953800">str_replace</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #24292f;background-color: #f6f8fa">search</span><span style="color: #0550ae">:</span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0a3069">'0'</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0a3069">'1'</span><span style="color: #24292f;background-color: #f6f8fa">],</span> <span style="color: #24292f;background-color: #f6f8fa">replace</span><span style="color: #0550ae">:</span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0a3069">' '</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0a3069">'#'</span><span style="color: #24292f;background-color: #f6f8fa">],</span> <span style="color: #24292f;background-color: #f6f8fa">subject</span><span style="color: #0550ae">:</span> <span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">);</span> - <span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #953800">implode</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0a3069">"</span><span style="color: #0a3069">\n</span><span style="color: #0a3069">"</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #953800">str_split</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #24292f;background-color: #f6f8fa">length</span><span style="color: #0550ae">:</span> <span style="color: #0550ae">5</span><span style="color: #24292f;background-color: #f6f8fa">));</span> - <span style="color: #cf222e">echo</span> <span style="color: #0a3069">"</span><span style="color: #24292f">{</span><span style="color: #0550ae">$x</span><span style="color: #24292f">}</span><span style="color: #0a3069">\n\n</span><span style="color: #0a3069">"</span><span style="color: #24292f;background-color: #f6f8fa">;</span> -<span style="color: #24292f;background-color: #f6f8fa">}</span> -</code></pre> + <pre class="highlight" style="background-color:#f5f5f5"><code><div class="codeblock-line"><span style="color: #6e7781"><?php</span> +</div><div class="codeblock-line"> +</div><div class="codeblock-line"><span style="color: #6e7781">/*********************************************************</span> +</div><div class="codeblock-line"><span style="color: #6e7781"> * This program displays a PHPer token. *</span> +</div><div class="codeblock-line"><span style="color: #6e7781"> * Guess 'N'. *</span> +</div><div class="codeblock-line"><span style="color: #6e7781"> * *</span> +</div><div class="codeblock-line"><span style="color: #6e7781"> * Hints: *</span> +</div><div class="codeblock-line"><span style="color: #6e7781"> * - N itself has no special meaning, e.g., 42, 8128, *</span> +</div><div class="codeblock-line"><span style="color: #6e7781"> * it is selected at random. *</span> +</div><div class="codeblock-line"><span style="color: #6e7781"> * - Each element of $token represents a single letter. *</span> +</div><div class="codeblock-line"><span style="color: #6e7781"> * - One letter consists of 5x5 cells. *</span> +</div><div class="codeblock-line"><span style="color: #6e7781"> * - Remember, the output is a complete PHPer token. *</span> +</div><div class="codeblock-line"><span style="color: #6e7781"> * *</span> +</div><div class="codeblock-line"><span style="color: #6e7781"> * License: *</span> +</div><div class="codeblock-line"><span style="color: #6e7781"> * https://creativecommons.org/publicdomain/zero/1.0/ *</span> +</div><div class="codeblock-line"><span style="color: #6e7781"> *********************************************************/</span> +</div><div class="codeblock-line"><span style="color: #cf222e">const</span> <span style="color: #953800">N</span> <span style="color: #0550ae">=</span> <span style="color: #0550ae">0</span> <span style="color: #6e7781">/* Change it to your answer. */</span><span style="color: #24292f;background-color: #f6f8fa">;</span> +</div><div class="codeblock-line"><span style="color: #953800">assert</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">0</span> <span style="color: #0550ae"><=</span> <span style="color: #953800">N</span> <span style="color: #0550ae">&&</span> <span style="color: #953800">N</span> <span style="color: #0550ae"><=</span> <span style="color: #0550ae">0b11111_11111_11111_11111_11111</span><span style="color: #24292f;background-color: #f6f8fa">);</span> +</div><div class="codeblock-line"> +</div><div class="codeblock-line"><span style="color: #0550ae">$token</span> <span style="color: #0550ae">=</span> <span style="color: #24292f;background-color: #f6f8fa">[</span> +</div><div class="codeblock-line"> <span style="color: #0550ae">0x14B499C</span><span style="color: #24292f;background-color: #f6f8fa">,</span> +</div><div class="codeblock-line"> <span style="color: #0550ae">0x0BE34CC</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x01C9C69</span><span style="color: #24292f;background-color: #f6f8fa">,</span> +</div><div class="codeblock-line"> <span style="color: #0550ae">0x0ECA069</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x01C2449</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x0FDB166</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x01C9C69</span><span style="color: #24292f;background-color: #f6f8fa">,</span> +</div><div class="codeblock-line"> <span style="color: #0550ae">0x01C1C66</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x0FC1C47</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x01C1C66</span><span style="color: #24292f;background-color: #f6f8fa">,</span> +</div><div class="codeblock-line"> <span style="color: #0550ae">0x10C5858</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1E4E3B8</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1A2F2F8</span><span style="color: #24292f;background-color: #f6f8fa">,</span> +</div><div class="codeblock-line"><span style="color: #24292f;background-color: #f6f8fa">];</span> +</div><div class="codeblock-line"><span style="color: #cf222e">foreach</span> <span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$token</span> <span style="color: #cf222e">as</span> <span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #24292f;background-color: #f6f8fa">{</span> +</div><div class="codeblock-line"> <span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #0550ae">$x</span> <span style="color: #0550ae">^</span> <span style="color: #953800">N</span><span style="color: #24292f;background-color: #f6f8fa">;</span> +</div><div class="codeblock-line"> +</div><div class="codeblock-line"> <span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #953800">sprintf</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0a3069">'%025b'</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">);</span> +</div><div class="codeblock-line"> <span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #953800">str_replace</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #24292f;background-color: #f6f8fa">search</span><span style="color: #0550ae">:</span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0a3069">'0'</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0a3069">'1'</span><span style="color: #24292f;background-color: #f6f8fa">],</span> <span style="color: #24292f;background-color: #f6f8fa">replace</span><span style="color: #0550ae">:</span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0a3069">' '</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0a3069">'#'</span><span style="color: #24292f;background-color: #f6f8fa">],</span> <span style="color: #24292f;background-color: #f6f8fa">subject</span><span style="color: #0550ae">:</span> <span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">);</span> +</div><div class="codeblock-line"> <span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #953800">implode</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0a3069">"</span><span style="color: #0a3069">\n</span><span style="color: #0a3069">"</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #953800">str_split</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #24292f;background-color: #f6f8fa">length</span><span style="color: #0550ae">:</span> <span style="color: #0550ae">5</span><span style="color: #24292f;background-color: #f6f8fa">));</span> +</div><div class="codeblock-line"> <span style="color: #cf222e">echo</span> <span style="color: #0a3069">"</span><span style="color: #24292f">{</span><span style="color: #0550ae">$x</span><span style="color: #24292f">}</span><span style="color: #0a3069">\n\n</span><span style="color: #0a3069">"</span><span style="color: #24292f;background-color: #f6f8fa">;</span> +</div><div class="codeblock-line"><span style="color: #24292f;background-color: #f6f8fa">}</span></div></code></pre> </div> <p> さて、この問題はさきほどのように単純に実行しただけでは、謎のブロックが表示されるだけでトークンは得られない。トークンを得るためには、ソースコードを読み、定数 <code>N</code> を特定する必要がある。 @@ -442,38 +437,33 @@ まずはソースコードを読んでいく。 </p> <div class="codeblock"> - <pre class="highlight" style="background-color:#f5f5f5"><code><span style="color: #0550ae">$token</span> <span style="color: #0550ae">=</span> <span style="color: #24292f;background-color: #f6f8fa">[</span> - <span style="color: #6e7781">// 略</span> -<span style="color: #24292f;background-color: #f6f8fa">];</span> -</code></pre> + <pre class="highlight" style="background-color:#f5f5f5"><code><div class="codeblock-line"><span style="color: #0550ae">$token</span> <span style="color: #0550ae">=</span> <span style="color: #24292f;background-color: #f6f8fa">[</span> +</div><div class="codeblock-line"> <span style="color: #6e7781">// 略</span> +</div><div class="codeblock-line"><span style="color: #24292f;background-color: #f6f8fa">];</span></div></code></pre> </div> <p> 数値からなる <code>$token</code> があり、各要素をループしている。 </p> <div class="codeblock"> - <pre class="highlight" style="background-color:#f5f5f5"><code><span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #0550ae">$x</span> <span style="color: #0550ae">^</span> <span style="color: #953800">N</span><span style="color: #24292f;background-color: #f6f8fa">;</span> -</code></pre> + <pre class="highlight" style="background-color:#f5f5f5"><code><div class="codeblock-line"><span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #0550ae">$x</span> <span style="color: #0550ae">^</span> <span style="color: #953800">N</span><span style="color: #24292f;background-color: #f6f8fa">;</span></div></code></pre> </div> <p> まずは排他的論理和 (xor) を取り、 </p> <div class="codeblock"> - <pre class="highlight" style="background-color:#f5f5f5"><code><span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #953800">sprintf</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0a3069">'%025b'</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">);</span> -</code></pre> + <pre class="highlight" style="background-color:#f5f5f5"><code><div class="codeblock-line"><span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #953800">sprintf</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0a3069">'%025b'</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">);</span></div></code></pre> </div> <p> 二進数に変換して、 </p> <div class="codeblock"> - <pre class="highlight" style="background-color:#f5f5f5"><code><span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #953800">str_replace</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #24292f;background-color: #f6f8fa">search</span><span style="color: #0550ae">:</span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0a3069">'0'</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0a3069">'1'</span><span style="color: #24292f;background-color: #f6f8fa">],</span> <span style="color: #24292f;background-color: #f6f8fa">replace</span><span style="color: #0550ae">:</span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0a3069">' '</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0a3069">'#'</span><span style="color: #24292f;background-color: #f6f8fa">],</span> <span style="color: #24292f;background-color: #f6f8fa">subject</span><span style="color: #0550ae">:</span> <span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">);</span> -</code></pre> + <pre class="highlight" style="background-color:#f5f5f5"><code><div class="codeblock-line"><span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #953800">str_replace</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #24292f;background-color: #f6f8fa">search</span><span style="color: #0550ae">:</span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0a3069">'0'</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0a3069">'1'</span><span style="color: #24292f;background-color: #f6f8fa">],</span> <span style="color: #24292f;background-color: #f6f8fa">replace</span><span style="color: #0550ae">:</span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0a3069">' '</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0a3069">'#'</span><span style="color: #24292f;background-color: #f6f8fa">],</span> <span style="color: #24292f;background-color: #f6f8fa">subject</span><span style="color: #0550ae">:</span> <span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">);</span></div></code></pre> </div> <p> 0 を空白に、1 を <code>#</code> にし、 </p> <div class="codeblock"> - <pre class="highlight" style="background-color:#f5f5f5"><code><span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #953800">implode</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0a3069">"</span><span style="color: #0a3069">\n</span><span style="color: #0a3069">"</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #953800">str_split</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #24292f;background-color: #f6f8fa">length</span><span style="color: #0550ae">:</span> <span style="color: #0550ae">5</span><span style="color: #24292f;background-color: #f6f8fa">));</span> -</code></pre> + <pre class="highlight" style="background-color:#f5f5f5"><code><div class="codeblock-line"><span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #953800">implode</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0a3069">"</span><span style="color: #0a3069">\n</span><span style="color: #0a3069">"</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #953800">str_split</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #24292f;background-color: #f6f8fa">length</span><span style="color: #0550ae">:</span> <span style="color: #0550ae">5</span><span style="color: #24292f;background-color: #f6f8fa">));</span></div></code></pre> </div> <p> 5文字ごとに区切ったあと、改行で結合している。 @@ -511,52 +501,49 @@ <code>N</code> は高々 </p> <div class="codeblock"> - <pre class="highlight" style="background-color:#f5f5f5"><code><span style="color: #953800">assert</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">0</span> <span style="color: #0550ae"><=</span> <span style="color: #953800">N</span> <span style="color: #0550ae">&&</span> <span style="color: #953800">N</span> <span style="color: #0550ae"><=</span> <span style="color: #0550ae">0b11111_11111_11111_11111_11111</span><span style="color: #24292f;background-color: #f6f8fa">);</span> -</code></pre> + <pre class="highlight" style="background-color:#f5f5f5"><code><div class="codeblock-line"><span style="color: #953800">assert</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">0</span> <span style="color: #0550ae"><=</span> <span style="color: #953800">N</span> <span style="color: #0550ae">&&</span> <span style="color: #953800">N</span> <span style="color: #0550ae"><=</span> <span style="color: #0550ae">0b11111_11111_11111_11111_11111</span><span style="color: #24292f;background-color: #f6f8fa">);</span></div></code></pre> </div> <p> なのでブルートフォースしてもよいが、ここではブルートフォースしない方法を紹介する。 </p> <div class="codeblock"> - <pre class="highlight" style="background-color:#f5f5f5"><code><span style="color: #6e7781"><?php</span> - -<span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #0550ae">0x14B499C</span><span style="color: #24292f;background-color: #f6f8fa">;</span> - -<span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #0550ae">$x</span> <span style="color: #0550ae">^</span> <span style="color: #953800">N</span><span style="color: #24292f;background-color: #f6f8fa">;</span> - -<span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #953800">sprintf</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0a3069">'%025b'</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">);</span> -<span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #953800">str_replace</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #24292f;background-color: #f6f8fa">search</span><span style="color: #0550ae">:</span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0a3069">'0'</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0a3069">'1'</span><span style="color: #24292f;background-color: #f6f8fa">],</span> <span style="color: #24292f;background-color: #f6f8fa">replace</span><span style="color: #0550ae">:</span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0a3069">' '</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0a3069">'#'</span><span style="color: #24292f;background-color: #f6f8fa">],</span> <span style="color: #24292f;background-color: #f6f8fa">subject</span><span style="color: #0550ae">:</span> <span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">);</span> -<span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #953800">implode</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0a3069">"</span><span style="color: #0a3069">\n</span><span style="color: #0a3069">"</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #953800">str_split</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #24292f;background-color: #f6f8fa">length</span><span style="color: #0550ae">:</span> <span style="color: #0550ae">5</span><span style="color: #24292f;background-color: #f6f8fa">));</span> - -<span style="color: #953800">assert</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$x</span> <span style="color: #0550ae">===</span> -<span style="color: #0a3069">" # # </span><span style="color: #0a3069">\n</span><span style="color: #0a3069">"</span> <span style="color: #0550ae">.</span> -<span style="color: #0a3069">"#####</span><span style="color: #0a3069">\n</span><span style="color: #0a3069">"</span> <span style="color: #0550ae">.</span> -<span style="color: #0a3069">" # # </span><span style="color: #0a3069">\n</span><span style="color: #0a3069">"</span> <span style="color: #0550ae">.</span> -<span style="color: #0a3069">"#####</span><span style="color: #0a3069">\n</span><span style="color: #0a3069">"</span> <span style="color: #0550ae">.</span> -<span style="color: #0a3069">" # # "</span><span style="color: #24292f;background-color: #f6f8fa">);</span> -</code></pre> + <pre class="highlight" style="background-color:#f5f5f5"><code><div class="codeblock-line"><span style="color: #6e7781"><?php</span> +</div><div class="codeblock-line"> +</div><div class="codeblock-line"><span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #0550ae">0x14B499C</span><span style="color: #24292f;background-color: #f6f8fa">;</span> +</div><div class="codeblock-line"> +</div><div class="codeblock-line"><span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #0550ae">$x</span> <span style="color: #0550ae">^</span> <span style="color: #953800">N</span><span style="color: #24292f;background-color: #f6f8fa">;</span> +</div><div class="codeblock-line"> +</div><div class="codeblock-line"><span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #953800">sprintf</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0a3069">'%025b'</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">);</span> +</div><div class="codeblock-line"><span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #953800">str_replace</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #24292f;background-color: #f6f8fa">search</span><span style="color: #0550ae">:</span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0a3069">'0'</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0a3069">'1'</span><span style="color: #24292f;background-color: #f6f8fa">],</span> <span style="color: #24292f;background-color: #f6f8fa">replace</span><span style="color: #0550ae">:</span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0a3069">' '</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0a3069">'#'</span><span style="color: #24292f;background-color: #f6f8fa">],</span> <span style="color: #24292f;background-color: #f6f8fa">subject</span><span style="color: #0550ae">:</span> <span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">);</span> +</div><div class="codeblock-line"><span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #953800">implode</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0a3069">"</span><span style="color: #0a3069">\n</span><span style="color: #0a3069">"</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #953800">str_split</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #24292f;background-color: #f6f8fa">length</span><span style="color: #0550ae">:</span> <span style="color: #0550ae">5</span><span style="color: #24292f;background-color: #f6f8fa">));</span> +</div><div class="codeblock-line"> +</div><div class="codeblock-line"><span style="color: #953800">assert</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$x</span> <span style="color: #0550ae">===</span> +</div><div class="codeblock-line"><span style="color: #0a3069">" # # </span><span style="color: #0a3069">\n</span><span style="color: #0a3069">"</span> <span style="color: #0550ae">.</span> +</div><div class="codeblock-line"><span style="color: #0a3069">"#####</span><span style="color: #0a3069">\n</span><span style="color: #0a3069">"</span> <span style="color: #0550ae">.</span> +</div><div class="codeblock-line"><span style="color: #0a3069">" # # </span><span style="color: #0a3069">\n</span><span style="color: #0a3069">"</span> <span style="color: #0550ae">.</span> +</div><div class="codeblock-line"><span style="color: #0a3069">"#####</span><span style="color: #0a3069">\n</span><span style="color: #0a3069">"</span> <span style="color: #0550ae">.</span> +</div><div class="codeblock-line"><span style="color: #0a3069">" # # "</span><span style="color: #24292f;background-color: #f6f8fa">);</span></div></code></pre> </div> <p> この一連の変換に対する逆変換を考えると、次のようになる。 </p> <div class="codeblock"> - <pre class="highlight" style="background-color:#f5f5f5"><code><span style="color: #6e7781"><?php</span> - -<span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> -<span style="color: #0a3069">" # # </span><span style="color: #0a3069">\n</span><span style="color: #0a3069">"</span> <span style="color: #0550ae">.</span> -<span style="color: #0a3069">"#####</span><span style="color: #0a3069">\n</span><span style="color: #0a3069">"</span> <span style="color: #0550ae">.</span> -<span style="color: #0a3069">" # # </span><span style="color: #0a3069">\n</span><span style="color: #0a3069">"</span> <span style="color: #0550ae">.</span> -<span style="color: #0a3069">"#####</span><span style="color: #0a3069">\n</span><span style="color: #0a3069">"</span> <span style="color: #0550ae">.</span> -<span style="color: #0a3069">" # # "</span><span style="color: #24292f;background-color: #f6f8fa">;</span> - -<span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #953800">implode</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0a3069">''</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #953800">explode</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0a3069">"</span><span style="color: #0a3069">\n</span><span style="color: #0a3069">"</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">));</span> -<span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #953800">str_replace</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #24292f;background-color: #f6f8fa">search</span><span style="color: #0550ae">:</span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0a3069">' '</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0a3069">'#'</span><span style="color: #24292f;background-color: #f6f8fa">],</span> <span style="color: #24292f;background-color: #f6f8fa">replace</span><span style="color: #0550ae">:</span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0a3069">'0'</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0a3069">'1'</span><span style="color: #24292f;background-color: #f6f8fa">],</span> <span style="color: #24292f;background-color: #f6f8fa">subject</span><span style="color: #0550ae">:</span> <span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">);</span> -<span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #953800">bindec</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">);</span> - -<span style="color: #0550ae">$n</span> <span style="color: #0550ae">=</span> <span style="color: #0550ae">$x</span> <span style="color: #0550ae">^</span> <span style="color: #0550ae">0x14B499C</span><span style="color: #24292f;background-color: #f6f8fa">;</span> - -<span style="color: #cf222e">echo</span> <span style="color: #0a3069">"N = </span><span style="color: #0550ae">$n</span><span style="color: #0a3069">\n</span><span style="color: #0a3069">"</span><span style="color: #24292f;background-color: #f6f8fa">;</span> -</code></pre> + <pre class="highlight" style="background-color:#f5f5f5"><code><div class="codeblock-line"><span style="color: #6e7781"><?php</span> +</div><div class="codeblock-line"> +</div><div class="codeblock-line"><span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> +</div><div class="codeblock-line"><span style="color: #0a3069">" # # </span><span style="color: #0a3069">\n</span><span style="color: #0a3069">"</span> <span style="color: #0550ae">.</span> +</div><div class="codeblock-line"><span style="color: #0a3069">"#####</span><span style="color: #0a3069">\n</span><span style="color: #0a3069">"</span> <span style="color: #0550ae">.</span> +</div><div class="codeblock-line"><span style="color: #0a3069">" # # </span><span style="color: #0a3069">\n</span><span style="color: #0a3069">"</span> <span style="color: #0550ae">.</span> +</div><div class="codeblock-line"><span style="color: #0a3069">"#####</span><span style="color: #0a3069">\n</span><span style="color: #0a3069">"</span> <span style="color: #0550ae">.</span> +</div><div class="codeblock-line"><span style="color: #0a3069">" # # "</span><span style="color: #24292f;background-color: #f6f8fa">;</span> +</div><div class="codeblock-line"> +</div><div class="codeblock-line"><span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #953800">implode</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0a3069">''</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #953800">explode</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0a3069">"</span><span style="color: #0a3069">\n</span><span style="color: #0a3069">"</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">));</span> +</div><div class="codeblock-line"><span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #953800">str_replace</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #24292f;background-color: #f6f8fa">search</span><span style="color: #0550ae">:</span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0a3069">' '</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0a3069">'#'</span><span style="color: #24292f;background-color: #f6f8fa">],</span> <span style="color: #24292f;background-color: #f6f8fa">replace</span><span style="color: #0550ae">:</span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0a3069">'0'</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0a3069">'1'</span><span style="color: #24292f;background-color: #f6f8fa">],</span> <span style="color: #24292f;background-color: #f6f8fa">subject</span><span style="color: #0550ae">:</span> <span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">);</span> +</div><div class="codeblock-line"><span style="color: #0550ae">$x</span> <span style="color: #0550ae">=</span> <span style="color: #953800">bindec</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">);</span> +</div><div class="codeblock-line"> +</div><div class="codeblock-line"><span style="color: #0550ae">$n</span> <span style="color: #0550ae">=</span> <span style="color: #0550ae">$x</span> <span style="color: #0550ae">^</span> <span style="color: #0550ae">0x14B499C</span><span style="color: #24292f;background-color: #f6f8fa">;</span> +</div><div class="codeblock-line"> +</div><div class="codeblock-line"><span style="color: #cf222e">echo</span> <span style="color: #0a3069">"N = </span><span style="color: #0550ae">$n</span><span style="color: #0a3069">\n</span><span style="color: #0a3069">"</span><span style="color: #24292f;background-color: #f6f8fa">;</span></div></code></pre> </div> <p> これを実行すると、<code>N</code> が得られる。 @@ -572,43 +559,41 @@ <div class="filename"> toquine.php </div> - <pre class="highlight" style="background-color:#f5f5f5"><code><span style="color: #6e7781"><?php</span> - -<span style="color: #6e7781">// License: https://creativecommons.org/publicdomain/zero/1.0/</span> -<span style="color: #6e7781">// This is a quine-like program to generate a PHPer token.</span> -<span style="color: #6e7781">// Execute it like this: php toquine.php | php | php | php | ...</span> - -<span style="color: #0550ae">$s</span> <span style="color: #0550ae">=</span> <span style="color: #0a3069"><<<'Q' -<?cuc -// Yvprafr: uggcf://perngvirpbzzbaf.bet/choyvpqbznva/mreb/1.0/ -// Guvf vf n dhvar-yvxr cebtenz gb trarengr n CUCre gbxra. -// Rkrphgr vg yvxr guvf: cuc gbdhvar.cuc | cuc | cuc | cuc | ... -%f$f = %f; -$f = fge_ebg13($f); $kf = [ -%f, -]; -$g = ahyy.snyfr; sbe ($v = 0; $v <= vagqvi(__YVAR__-035,6); ++$v) vs (!vffrg($kf[$v])) oernx; ryfr -$g .= vzcybqr("\a", fge_fcyvg(fge_ercynpr(['0','1'], [' ','##'], fcevags(pue(37) . '025o', $kf[$v])), 012)) . "\a\a"; -$jf = neenl_znc(sa($j) => vzcybqr(', ', $j), neenl_puhax(neenl_znc(sa($k) => fcevags('0k' . pue(37) . '07K', $k), $kf), 10)); -cevags($f, $g, fge_ebg13("<<<'Q'\a{$f}\aQ"), vzcybqr(",\a", $jf)); -Q;</span> -<span style="color: #0550ae">$s</span> <span style="color: #0550ae">=</span> <span style="color: #953800">str_rot13</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$s</span><span style="color: #24292f;background-color: #f6f8fa">);</span> <span style="color: #0550ae">$xs</span> <span style="color: #0550ae">=</span> <span style="color: #24292f;background-color: #f6f8fa">[</span> -<span style="color: #0550ae">0x0AFABEA</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1F294A7</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1F2109F</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1F294A7</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x0002800</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1F2109F</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x0117041</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1F294A7</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1FAD6B5</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1F295B7</span><span style="color: #24292f;background-color: #f6f8fa">,</span> -<span style="color: #0550ae">0x010FC21</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1FAD6B5</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1151151</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x010FC21</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1F294A7</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1F295B7</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1FAD6B5</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1F294A7</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1F295B7</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1F8C63F</span><span style="color: #24292f;background-color: #f6f8fa">,</span> -<span style="color: #0550ae">0x1F8C631</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1FAD6B5</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x17AD6BD</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x17AD6BD</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1F8C63F</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1F295B7</span><span style="color: #24292f;background-color: #f6f8fa">,</span> -<span style="color: #24292f;background-color: #f6f8fa">];</span> -<span style="color: #0550ae">$t</span> <span style="color: #0550ae">=</span> <span style="color: #0550ae">null</span><span style="color: #0550ae">.</span><span style="color: #0550ae">false</span><span style="color: #24292f;background-color: #f6f8fa">;</span> <span style="color: #cf222e">for</span> <span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$i</span> <span style="color: #0550ae">=</span> <span style="color: #0550ae">0</span><span style="color: #24292f;background-color: #f6f8fa">;</span> <span style="color: #0550ae">$i</span> <span style="color: #0550ae"><=</span> <span style="color: #953800">intdiv</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #cf222e">__LINE__</span><span style="color: #0550ae">-</span><span style="color: #0550ae">035</span><span style="color: #24292f;background-color: #f6f8fa">,</span><span style="color: #0550ae">6</span><span style="color: #24292f;background-color: #f6f8fa">);</span> <span style="color: #0550ae">++</span><span style="color: #0550ae">$i</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #cf222e">if</span> <span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">!</span><span style="color: #cf222e">isset</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$xs</span><span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$i</span><span style="color: #24292f;background-color: #f6f8fa">]))</span> <span style="color: #cf222e">break</span><span style="color: #24292f;background-color: #f6f8fa">;</span> <span style="color: #cf222e">else</span> -<span style="color: #0550ae">$t</span> <span style="color: #0550ae">.</span><span style="color: #0550ae">=</span> <span style="color: #953800">implode</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0a3069">"</span><span style="color: #0a3069">\n</span><span style="color: #0a3069">"</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #953800">str_split</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #953800">str_replace</span><span style="color: #24292f;background-color: #f6f8fa">([</span><span style="color: #0a3069">'0'</span><span style="color: #24292f;background-color: #f6f8fa">,</span><span style="color: #0a3069">'1'</span><span style="color: #24292f;background-color: #f6f8fa">],</span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0a3069">' '</span><span style="color: #24292f;background-color: #f6f8fa">,</span><span style="color: #0a3069">'##'</span><span style="color: #24292f;background-color: #f6f8fa">],</span> <span style="color: #953800">sprintf</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #953800">chr</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">37</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">.</span> <span style="color: #0a3069">'025b'</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$xs</span><span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$i</span><span style="color: #24292f;background-color: #f6f8fa">])),</span> <span style="color: #0550ae">012</span><span style="color: #24292f;background-color: #f6f8fa">))</span> <span style="color: #0550ae">.</span> <span style="color: #0a3069">"</span><span style="color: #0a3069">\n\n</span><span style="color: #0a3069">"</span><span style="color: #24292f;background-color: #f6f8fa">;</span> -<span style="color: #0550ae">$ws</span> <span style="color: #0550ae">=</span> <span style="color: #953800">array_map</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$w</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #953800">implode</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0a3069">', '</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$w</span><span style="color: #24292f;background-color: #f6f8fa">),</span> <span style="color: #953800">array_chunk</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #953800">array_map</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #953800">sprintf</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0a3069">'0x'</span> <span style="color: #0550ae">.</span> <span style="color: #953800">chr</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">37</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">.</span> <span style="color: #0a3069">'07X'</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">),</span> <span style="color: #0550ae">$xs</span><span style="color: #24292f;background-color: #f6f8fa">),</span> <span style="color: #0550ae">10</span><span style="color: #24292f;background-color: #f6f8fa">));</span> -<span style="color: #953800">printf</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$s</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$t</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #953800">str_rot13</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0a3069">"<<<'D'</span><span style="color: #0a3069">\n</span><span style="color: #24292f">{</span><span style="color: #0550ae">$s</span><span style="color: #24292f">}</span><span style="color: #0a3069">\n</span><span style="color: #0a3069">D"</span><span style="color: #24292f;background-color: #f6f8fa">),</span> <span style="color: #953800">implode</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0a3069">",</span><span style="color: #0a3069">\n</span><span style="color: #0a3069">"</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$ws</span><span style="color: #24292f;background-color: #f6f8fa">));</span> -</code></pre> + <pre class="highlight" style="background-color:#f5f5f5"><code><div class="codeblock-line"><span style="color: #6e7781"><?php</span> +</div><div class="codeblock-line"> +</div><div class="codeblock-line"><span style="color: #6e7781">// License: https://creativecommons.org/publicdomain/zero/1.0/</span> +</div><div class="codeblock-line"><span style="color: #6e7781">// This is a quine-like program to generate a PHPer token.</span> +</div><div class="codeblock-line"><span style="color: #6e7781">// Execute it like this: php toquine.php | php | php | php | ...</span> +</div><div class="codeblock-line"> +</div><div class="codeblock-line"><span style="color: #0550ae">$s</span> <span style="color: #0550ae">=</span> <span style="color: #0a3069"><<<'Q'</span> +</div><div class="codeblock-line"><span style="color: #0a3069"><?cuc</span> +</div><div class="codeblock-line"><span style="color: #0a3069">// Yvprafr: uggcf://perngvirpbzzbaf.bet/choyvpqbznva/mreb/1.0/</span> +</div><div class="codeblock-line"><span style="color: #0a3069">// Guvf vf n dhvar-yvxr cebtenz gb trarengr n CUCre gbxra.</span> +</div><div class="codeblock-line"><span style="color: #0a3069">// Rkrphgr vg yvxr guvf: cuc gbdhvar.cuc | cuc | cuc | cuc | ...</span> +</div><div class="codeblock-line"><span style="color: #0a3069">%f$f = %f;</span> +</div><div class="codeblock-line"><span style="color: #0a3069">$f = fge_ebg13($f); $kf = [</span> +</div><div class="codeblock-line"><span style="color: #0a3069">%f,</span> +</div><div class="codeblock-line"><span style="color: #0a3069">];</span> +</div><div class="codeblock-line"><span style="color: #0a3069">$g = ahyy.snyfr; sbe ($v = 0; $v <= vagqvi(__YVAR__-035,6); ++$v) vs (!vffrg($kf[$v])) oernx; ryfr</span> +</div><div class="codeblock-line"><span style="color: #0a3069">$g .= vzcybqr("\a", fge_fcyvg(fge_ercynpr(['0','1'], [' ','##'], fcevags(pue(37) . '025o', $kf[$v])), 012)) . "\a\a";</span> +</div><div class="codeblock-line"><span style="color: #0a3069">$jf = neenl_znc(sa($j) => vzcybqr(', ', $j), neenl_puhax(neenl_znc(sa($k) => fcevags('0k' . pue(37) . '07K', $k), $kf), 10));</span> +</div><div class="codeblock-line"><span style="color: #0a3069">cevags($f, $g, fge_ebg13("<<<'Q'\a{$f}\aQ"), vzcybqr(",\a", $jf));</span> +</div><div class="codeblock-line"><span style="color: #0a3069">Q;</span> +</div><div class="codeblock-line"><span style="color: #0550ae">$s</span> <span style="color: #0550ae">=</span> <span style="color: #953800">str_rot13</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$s</span><span style="color: #24292f;background-color: #f6f8fa">);</span> <span style="color: #0550ae">$xs</span> <span style="color: #0550ae">=</span> <span style="color: #24292f;background-color: #f6f8fa">[</span> +</div><div class="codeblock-line"><span style="color: #0550ae">0x0AFABEA</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1F294A7</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1F2109F</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1F294A7</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x0002800</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1F2109F</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x0117041</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1F294A7</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1FAD6B5</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1F295B7</span><span style="color: #24292f;background-color: #f6f8fa">,</span> +</div><div class="codeblock-line"><span style="color: #0550ae">0x010FC21</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1FAD6B5</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1151151</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x010FC21</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1F294A7</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1F295B7</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1FAD6B5</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1F294A7</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1F295B7</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1F8C63F</span><span style="color: #24292f;background-color: #f6f8fa">,</span> +</div><div class="codeblock-line"><span style="color: #0550ae">0x1F8C631</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1FAD6B5</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x17AD6BD</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x17AD6BD</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1F8C63F</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">0x1F295B7</span><span style="color: #24292f;background-color: #f6f8fa">,</span> +</div><div class="codeblock-line"><span style="color: #24292f;background-color: #f6f8fa">];</span> +</div><div class="codeblock-line"><span style="color: #0550ae">$t</span> <span style="color: #0550ae">=</span> <span style="color: #0550ae">null</span><span style="color: #0550ae">.</span><span style="color: #0550ae">false</span><span style="color: #24292f;background-color: #f6f8fa">;</span> <span style="color: #cf222e">for</span> <span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$i</span> <span style="color: #0550ae">=</span> <span style="color: #0550ae">0</span><span style="color: #24292f;background-color: #f6f8fa">;</span> <span style="color: #0550ae">$i</span> <span style="color: #0550ae"><=</span> <span style="color: #953800">intdiv</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #cf222e">__LINE__</span><span style="color: #0550ae">-</span><span style="color: #0550ae">035</span><span style="color: #24292f;background-color: #f6f8fa">,</span><span style="color: #0550ae">6</span><span style="color: #24292f;background-color: #f6f8fa">);</span> <span style="color: #0550ae">++</span><span style="color: #0550ae">$i</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #cf222e">if</span> <span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">!</span><span style="color: #cf222e">isset</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$xs</span><span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$i</span><span style="color: #24292f;background-color: #f6f8fa">]))</span> <span style="color: #cf222e">break</span><span style="color: #24292f;background-color: #f6f8fa">;</span> <span style="color: #cf222e">else</span> +</div><div class="codeblock-line"><span style="color: #0550ae">$t</span> <span style="color: #0550ae">.</span><span style="color: #0550ae">=</span> <span style="color: #953800">implode</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0a3069">"</span><span style="color: #0a3069">\n</span><span style="color: #0a3069">"</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #953800">str_split</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #953800">str_replace</span><span style="color: #24292f;background-color: #f6f8fa">([</span><span style="color: #0a3069">'0'</span><span style="color: #24292f;background-color: #f6f8fa">,</span><span style="color: #0a3069">'1'</span><span style="color: #24292f;background-color: #f6f8fa">],</span> <span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0a3069">' '</span><span style="color: #24292f;background-color: #f6f8fa">,</span><span style="color: #0a3069">'##'</span><span style="color: #24292f;background-color: #f6f8fa">],</span> <span style="color: #953800">sprintf</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #953800">chr</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">37</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">.</span> <span style="color: #0a3069">'025b'</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$xs</span><span style="color: #24292f;background-color: #f6f8fa">[</span><span style="color: #0550ae">$i</span><span style="color: #24292f;background-color: #f6f8fa">])),</span> <span style="color: #0550ae">012</span><span style="color: #24292f;background-color: #f6f8fa">))</span> <span style="color: #0550ae">.</span> <span style="color: #0a3069">"</span><span style="color: #0a3069">\n\n</span><span style="color: #0a3069">"</span><span style="color: #24292f;background-color: #f6f8fa">;</span> +</div><div class="codeblock-line"><span style="color: #0550ae">$ws</span> <span style="color: #0550ae">=</span> <span style="color: #953800">array_map</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$w</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #953800">implode</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0a3069">', '</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$w</span><span style="color: #24292f;background-color: #f6f8fa">),</span> <span style="color: #953800">array_chunk</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #953800">array_map</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #cf222e">fn</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">=></span> <span style="color: #953800">sprintf</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0a3069">'0x'</span> <span style="color: #0550ae">.</span> <span style="color: #953800">chr</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">37</span><span style="color: #24292f;background-color: #f6f8fa">)</span> <span style="color: #0550ae">.</span> <span style="color: #0a3069">'07X'</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$x</span><span style="color: #24292f;background-color: #f6f8fa">),</span> <span style="color: #0550ae">$xs</span><span style="color: #24292f;background-color: #f6f8fa">),</span> <span style="color: #0550ae">10</span><span style="color: #24292f;background-color: #f6f8fa">));</span> +</div><div class="codeblock-line"><span style="color: #953800">printf</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0550ae">$s</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$t</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #953800">str_rot13</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0a3069">"<<<'D'</span><span style="color: #0a3069">\n</span><span style="color: #24292f">{</span><span style="color: #0550ae">$s</span><span style="color: #24292f">}</span><span style="color: #0a3069">\n</span><span style="color: #0a3069">D"</span><span style="color: #24292f;background-color: #f6f8fa">),</span> <span style="color: #953800">implode</span><span style="color: #24292f;background-color: #f6f8fa">(</span><span style="color: #0a3069">",</span><span style="color: #0a3069">\n</span><span style="color: #0a3069">"</span><span style="color: #24292f;background-color: #f6f8fa">,</span> <span style="color: #0550ae">$ws</span><span style="color: #24292f;background-color: #f6f8fa">));</span></div></code></pre> </div> <p> コメントにもあるとおり、次のようにして実行すれば答えがでてくる。 </p> <div class="codeblock"> - <pre class="highlight" style="background-color:#f5f5f5"><code><span style="color: #24292f;background-color: #f6f8fa">$</span><span style="color: #24292f;background-color: #f6f8fa"> </span>php toquine.php | php | php | php | ... -</code></pre> + <pre class="highlight" style="background-color:#f5f5f5"><code><div class="codeblock-line"><span style="color: #24292f;background-color: #f6f8fa">$</span><span style="color: #24292f;background-color: #f6f8fa"> </span>php toquine.php | php | php | php | ...</div></code></pre> </div> <p> 実際にはもう少しパイプで繋げなければならない。 |
