From 98682c7a8792e7e79e487fea5024d25cee5aa310 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Wed, 15 Mar 2023 01:36:13 +0900 Subject: fix(nuldoc):
 contained unnecessary whitespaces inside it

---
 .../phperkaigi-2023-unused-token-quiz-1/index.html | 52 +++++++---------------
 1 file changed, 17 insertions(+), 35 deletions(-)

(limited to 'public/posts/2022-10-23')

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 で入力してもポイントにはならない。
             

-
-              <?php
+            
<?php
 
 $π = $argv[1] ?? null;
 if ($π === null) {
@@ -89,8 +88,7 @@ if (md5($t) === '056e831a4146bf123e8ea16613303d2e') {
 echo "Token: {$t}\n";
 } else {
 echo "Failed.\n";
-}
-            
+}
@@ -99,19 +97,15 @@ echo "Failed.\n"; ソースを見るとわかるとおり、$argv[1]を参照している。それをなる変数に代入しているので、円周率を渡してみる。

-
-              $ php Q.php 3.14
-  Failed.
-            
+
$ php Q.php 3.14
+  Failed.

失敗してしまった。精度を上げてみる。

-
-              $ php Q.php 3.1415
-Failed.
-            
+
$ php Q.php 3.1415
+Failed.

だめだった。これを成功するまで繰り返す。 @@ -121,10 +115,8 @@ Failed. 最初にトークンが得られるのは、小数点以下 16 桁目まで入力したときで、こうなる。

-
-              $ php Q.php 3.1415926535897932
-Token: #YO
-            
+
$ php Q.php 3.1415926535897932
+Token: #YO

めでたくトークン「#YO」が手に入った。 @@ -137,24 +129,20 @@ Token: #YO 短いので頭から追っていく。

-
-              $π = $argv[1] ?? null;
+            
$π = $argv[1] ?? null;
   if ($π === null) {
   exit('No input.');
   }
   $π = trim($π);
   if (!is_numeric($π)) {
   exit('Invalid input.');
-  }
-            
+ }

入力のバリデーション部分。数値のみ受け付ける。

-
-              $s = implode(array_map(chr(...), str_split($π, 2)));
-            
+
$s = implode(array_map(chr(...), str_split($π, 2)));

を 2 文字ごとに区切り (str_split)、数値を ASCII コードと見做して文字に変換 (chr) して結合 (implode) している。 @@ -164,17 +152,13 @@ Token: #YO 例えば、'656667'だったとすると、656667に対応した'A''B''C'へと変換され、'ABC'になる。

-
-              $π = '656667';
+            
$π = '656667';
 $s = implode(array_map(chr(...), str_split($π, 2)));
 echo $s;
-// => ABC
-            
+// => ABC
-
-              preg_match('/(\x23.+?) /', $s, $m);
-$t = $m[1] ?? '';
-            
+
preg_match('/(\x23.+?) /', $s, $m);
+$t = $m[1] ?? '';

正規表現でマッチングしている。\x23#と同じであることに留意すると、この正規表現は「#から始まる 2 以上の長さ (含#) の文字列で、最初に現れるスペースまで」にマッチする。つまりこれは、PHPerKaigi におけるトークンである。 @@ -184,13 +168,11 @@ $t = $m[1] ?? ''; なお、#を直接書いていないのは、/#.+?) /と書くと、#.+?)という意図せぬトークンが登録されてしまうからである。

-
-              if (md5($t) === '056e831a4146bf123e8ea16613303d2e') {
+            
if (md5($t) === '056e831a4146bf123e8ea16613303d2e') {
 echo "Token: {$t}\n";
 } else {
 echo "Failed.\n";
-}
-            
+}

最後にトークンのハッシュ値を見て、想定解かどうかを確認する。 -- cgit v1.2.3-70-g09d2