summaryrefslogtreecommitdiffhomepage
path: root/vhosts/blog/public/posts/2022-10-23/phperkaigi-2023-unused-token-quiz-1
diff options
context:
space:
mode:
Diffstat (limited to 'vhosts/blog/public/posts/2022-10-23/phperkaigi-2023-unused-token-quiz-1')
-rw-r--r--vhosts/blog/public/posts/2022-10-23/phperkaigi-2023-unused-token-quiz-1/index.html18
1 files changed, 9 insertions, 9 deletions
diff --git a/vhosts/blog/public/posts/2022-10-23/phperkaigi-2023-unused-token-quiz-1/index.html b/vhosts/blog/public/posts/2022-10-23/phperkaigi-2023-unused-token-quiz-1/index.html
index eaa210c5..1c661438 100644
--- a/vhosts/blog/public/posts/2022-10-23/phperkaigi-2023-unused-token-quiz-1/index.html
+++ b/vhosts/blog/public/posts/2022-10-23/phperkaigi-2023-unused-token-quiz-1/index.html
@@ -81,7 +81,7 @@
注意: これはボツ問なので、得られたトークンを PHPerKaigi で入力してもポイントにはならない。
</p>
- <pre class="highlight" language="php" linenumbering="unnumbered"><code class="highlight"><span class="hljs-meta">&lt;?php</span>
+ <pre class="highlight" language="php"><code class="highlight"><span class="hljs-meta">&lt;?php</span>
$π = <span class="hljs-variable">$argv</span>[<span class="hljs-number">1</span>] ?? <span class="hljs-literal">null</span>;
<span class="hljs-keyword">if</span> ($π === <span class="hljs-literal">null</span>) {
@@ -110,14 +110,14 @@ $π = <span class="hljs-title function_ invoke__">trim</span>($π);
ソースを見るとわかるとおり、<code>$argv[1]</code> を参照している。 それを <code>$π</code> なる変数に代入しているので、円周率を渡してみる。
</p>
- <pre class="highlight" language="shell-session" linenumbering="unnumbered"><code>$ php Q.php 3.14
+ <pre class="highlight" language="shell-session"><code>$ php Q.php 3.14
Failed.</code></pre>
<p>
失敗してしまった。精度を上げてみる。
</p>
- <pre class="highlight" language="shell-session" linenumbering="unnumbered"><code>$ php Q.php 3.1415
+ <pre class="highlight" language="shell-session"><code>$ php Q.php 3.1415
Failed.</code></pre>
<p>
@@ -128,7 +128,7 @@ Failed.</code></pre>
最初にトークンが得られるのは、小数点以下 16 桁目まで入力したときで、こうなる。
</p>
- <pre class="highlight" language="shell-session" linenumbering="unnumbered"><code>$ php Q.php 3.1415926535897932
+ <pre class="highlight" language="shell-session"><code>$ php Q.php 3.1415926535897932
Token: #YO</code></pre>
<p>
@@ -142,7 +142,7 @@ Token: #YO</code></pre>
短いので頭から追っていく。
</p>
- <pre class="highlight" language="php" linenumbering="unnumbered"><code class="highlight">$π = <span class="hljs-variable">$argv</span>[<span class="hljs-number">1</span>] ?? <span class="hljs-literal">null</span>;
+ <pre class="highlight" language="php"><code class="highlight">$π = <span class="hljs-variable">$argv</span>[<span class="hljs-number">1</span>] ?? <span class="hljs-literal">null</span>;
<span class="hljs-keyword">if</span> ($π === <span class="hljs-literal">null</span>) {
<span class="hljs-keyword">exit</span>(<span class="hljs-string">&#x27;No input.&#x27;</span>);
}
@@ -155,7 +155,7 @@ $π = <span class="hljs-title function_ invoke__">trim</span>($π);
入力のバリデーション部分。数値のみ受け付ける。
</p>
- <pre class="highlight" language="php" linenumbering="unnumbered"><code class="highlight"><span class="hljs-variable">$s</span> = <span class="hljs-title function_ invoke__">implode</span>(<span class="hljs-title function_ invoke__">array_map</span>(<span class="hljs-title function_ invoke__">chr</span>(...), <span class="hljs-title function_ invoke__">str_split</span>($π, <span class="hljs-number">2</span>)));</code></pre>
+ <pre class="highlight" language="php"><code class="highlight"><span class="hljs-variable">$s</span> = <span class="hljs-title function_ invoke__">implode</span>(<span class="hljs-title function_ invoke__">array_map</span>(<span class="hljs-title function_ invoke__">chr</span>(...), <span class="hljs-title function_ invoke__">str_split</span>($π, <span class="hljs-number">2</span>)));</code></pre>
<p>
<code>$π</code> を 2 文字ごとに区切り (<code>str_split</code>)、 数値を ASCII コードと見做して文字に変換 (<code>chr</code>) して結合 (<code>implode</code>) している。
@@ -165,12 +165,12 @@ $π = <span class="hljs-title function_ invoke__">trim</span>($π);
例えば、<code>$π</code> が <code>&apos;656667&apos;</code> だったとすると、 <code>65</code>、<code>66</code>、<code>67</code> に対応した <code>&apos;A&apos;</code>、<code>&apos;B&apos;</code>、<code>&apos;C&apos;</code> へと変換され、<code>&apos;ABC&apos;</code> になる。
</p>
- <pre class="highlight" language="php" linenumbering="unnumbered"><code class="highlight">$π = <span class="hljs-string">&#x27;656667&#x27;</span>;
+ <pre class="highlight" language="php"><code class="highlight">$π = <span class="hljs-string">&#x27;656667&#x27;</span>;
<span class="hljs-variable">$s</span> = <span class="hljs-title function_ invoke__">implode</span>(<span class="hljs-title function_ invoke__">array_map</span>(<span class="hljs-title function_ invoke__">chr</span>(...), <span class="hljs-title function_ invoke__">str_split</span>($π, <span class="hljs-number">2</span>)));
<span class="hljs-keyword">echo</span> <span class="hljs-variable">$s</span>;
<span class="hljs-comment">// =&gt; ABC</span></code></pre>
- <pre class="highlight" language="php" linenumbering="unnumbered"><code class="highlight"><span class="hljs-title function_ invoke__">preg_match</span>(<span class="hljs-string">&#x27;/(\x23.+?) /&#x27;</span>, <span class="hljs-variable">$s</span>, <span class="hljs-variable">$m</span>);
+ <pre class="highlight" language="php"><code class="highlight"><span class="hljs-title function_ invoke__">preg_match</span>(<span class="hljs-string">&#x27;/(\x23.+?) /&#x27;</span>, <span class="hljs-variable">$s</span>, <span class="hljs-variable">$m</span>);
<span class="hljs-variable">$t</span> = <span class="hljs-variable">$m</span>[<span class="hljs-number">1</span>] ?? <span class="hljs-string">&#x27;&#x27;</span>;</code></pre>
<p>
@@ -181,7 +181,7 @@ $π = <span class="hljs-title function_ invoke__">trim</span>($π);
なお、<code>#</code> を直接書いていないのは、<code>/#.+?) /</code> と書くと、 <code>#.+?)</code> という意図せぬトークンが登録されてしまうからである。
</p>
- <pre class="highlight" language="php" linenumbering="unnumbered"><code class="highlight"><span class="hljs-keyword">if</span> (<span class="hljs-title function_ invoke__">md5</span>(<span class="hljs-variable">$t</span>) === <span class="hljs-string">&#x27;056e831a4146bf123e8ea16613303d2e&#x27;</span>) {
+ <pre class="highlight" language="php"><code class="highlight"><span class="hljs-keyword">if</span> (<span class="hljs-title function_ invoke__">md5</span>(<span class="hljs-variable">$t</span>) === <span class="hljs-string">&#x27;056e831a4146bf123e8ea16613303d2e&#x27;</span>) {
<span class="hljs-keyword">echo</span> <span class="hljs-string">&quot;Token: <span class="hljs-subst">{$t}</span>\n&quot;</span>;
} <span class="hljs-keyword">else</span> {
<span class="hljs-keyword">echo</span> <span class="hljs-string">&quot;Failed.\n&quot;</span>;