diff options
| author | nsfisis <nsfisis@gmail.com> | 2023-03-15 01:36:13 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2023-03-15 01:36:58 +0900 |
| commit | 98682c7a8792e7e79e487fea5024d25cee5aa310 (patch) | |
| tree | fbf975077f5c1a6ff4f9eee68e4a4908eb7f54a0 /public/posts/2022-10-23/phperkaigi-2023-unused-token-quiz-1/index.html | |
| parent | 1fa2ed103dc521698cff261c97ecf275708be58c (diff) | |
| download | blog.nsfisis.dev-98682c7a8792e7e79e487fea5024d25cee5aa310.tar.gz blog.nsfisis.dev-98682c7a8792e7e79e487fea5024d25cee5aa310.tar.zst blog.nsfisis.dev-98682c7a8792e7e79e487fea5024d25cee5aa310.zip | |
fix(nuldoc): <pre> contained unnecessary whitespaces inside it
Diffstat (limited to 'public/posts/2022-10-23/phperkaigi-2023-unused-token-quiz-1/index.html')
| -rw-r--r-- | public/posts/2022-10-23/phperkaigi-2023-unused-token-quiz-1/index.html | 52 |
1 files changed, 17 insertions, 35 deletions
diff --git a/public/posts/2022-10-23/phperkaigi-2023-unused-token-quiz-1/index.html b/public/posts/2022-10-23/phperkaigi-2023-unused-token-quiz-1/index.html index a2bf44c..db0e7b6 100644 --- a/public/posts/2022-10-23/phperkaigi-2023-unused-token-quiz-1/index.html +++ b/public/posts/2022-10-23/phperkaigi-2023-unused-token-quiz-1/index.html @@ -68,8 +68,7 @@ 注意: これはボツ問なので、得られたトークンを PHPerKaigi で入力してもポイントにはならない。 </p> - <pre class="highlight" language="php" linenumbering="unnumbered"> - <code><?php + <pre class="highlight" language="php" linenumbering="unnumbered"><code><?php $π = $argv[1] ?? null; if ($π === null) { @@ -89,8 +88,7 @@ if (md5($t) === '056e831a4146bf123e8ea16613303d2e') { echo "Token: {$t}\n"; } else { echo "Failed.\n"; -}</code> - </pre> +}</code></pre> </section> <section id="section--_トークン入手方法"> @@ -99,19 +97,15 @@ echo "Failed.\n"; ソースを見るとわかるとおり、<code>$argv[1]</code>を参照している。それを<code>$π</code>なる変数に代入しているので、円周率を渡してみる。 </p> - <pre class="highlight" language="shell-session" linenumbering="unnumbered"> - <code>$ php Q.php 3.14 - Failed.</code> - </pre> + <pre class="highlight" language="shell-session" linenumbering="unnumbered"><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 -Failed.</code> - </pre> + <pre class="highlight" language="shell-session" linenumbering="unnumbered"><code>$ php Q.php 3.1415 +Failed.</code></pre> <p> だめだった。これを成功するまで繰り返す。 @@ -121,10 +115,8 @@ Failed.</code> 最初にトークンが得られるのは、小数点以下 16 桁目まで入力したときで、こうなる。 </p> - <pre class="highlight" language="shell-session" linenumbering="unnumbered"> - <code>$ php Q.php 3.1415926535897932 -Token: #YO</code> - </pre> + <pre class="highlight" language="shell-session" linenumbering="unnumbered"><code>$ php Q.php 3.1415926535897932 +Token: #YO</code></pre> <p> めでたくトークン「#YO」が手に入った。 @@ -137,24 +129,20 @@ Token: #YO</code> 短いので頭から追っていく。 </p> - <pre class="highlight" language="php" linenumbering="unnumbered"> - <code>$π = $argv[1] ?? null; + <pre class="highlight" language="php" linenumbering="unnumbered"><code>$π = $argv[1] ?? null; if ($π === null) { exit('No input.'); } $π = trim($π); if (!is_numeric($π)) { exit('Invalid input.'); - }</code> - </pre> + }</code></pre> <p> 入力のバリデーション部分。数値のみ受け付ける。 </p> - <pre class="highlight" language="php" linenumbering="unnumbered"> - <code>$s = implode(array_map(chr(...), str_split($π, 2)));</code> - </pre> + <pre class="highlight" language="php" linenumbering="unnumbered"><code>$s = implode(array_map(chr(...), str_split($π, 2)));</code></pre> <p> <code>$π</code>を 2 文字ごとに区切り (<code>str_split</code>)、数値を ASCII コードと見做して文字に変換 (<code>chr</code>) して結合 (<code>implode</code>) している。 @@ -164,17 +152,13 @@ Token: #YO</code> 例えば、<code>$π</code>が<code>'656667'</code>だったとすると、<code>65</code>、<code>66</code>、<code>67</code>に対応した<code>'A'</code>、<code>'B'</code>、<code>'C'</code>へと変換され、<code>'ABC'</code>になる。 </p> - <pre class="highlight" language="php" linenumbering="unnumbered"> - <code>$π = '656667'; + <pre class="highlight" language="php" linenumbering="unnumbered"><code>$π = '656667'; $s = implode(array_map(chr(...), str_split($π, 2))); echo $s; -// => ABC</code> - </pre> +// => ABC</code></pre> - <pre class="highlight" language="php" linenumbering="unnumbered"> - <code>preg_match('/(\x23.+?) /', $s, $m); -$t = $m[1] ?? '';</code> - </pre> + <pre class="highlight" language="php" linenumbering="unnumbered"><code>preg_match('/(\x23.+?) /', $s, $m); +$t = $m[1] ?? '';</code></pre> <p> 正規表現でマッチングしている。<code>\x23</code>は<code>#</code>と同じであることに留意すると、この正規表現は「<code>#</code>から始まる 2 以上の長さ (含<code>#</code>) の文字列で、最初に現れるスペースまで」にマッチする。つまりこれは、PHPerKaigi におけるトークンである。 @@ -184,13 +168,11 @@ $t = $m[1] ?? '';</code> なお、<code>#</code>を直接書いていないのは、<code>/#.+?) /</code>と書くと、<code>#.+?)</code>という意図せぬトークンが登録されてしまうからである。 </p> - <pre class="highlight" language="php" linenumbering="unnumbered"> - <code>if (md5($t) === '056e831a4146bf123e8ea16613303d2e') { + <pre class="highlight" language="php" linenumbering="unnumbered"><code>if (md5($t) === '056e831a4146bf123e8ea16613303d2e') { echo "Token: {$t}\n"; } else { echo "Failed.\n"; -}</code> - </pre> +}</code></pre> <p> 最後にトークンのハッシュ値を見て、想定解かどうかを確認する。 |
