From de13d68cddef5bb321469bcffb868f27ddd5390e Mon Sep 17 00:00:00 2001
From: nsfisis
+
<?php
$π = $argv[1] ?? null;
@@ -99,7 +99,7 @@ echo "Failed.\n";
ソースを見るとわかるとおり、$argv[1]を参照している。それを$πなる変数に代入しているので、円周率を渡してみる。
-
+
$ php Q.php 3.14
Failed.
@@ -108,7 +108,7 @@ echo "Failed.\n";
失敗してしまった。精度を上げてみる。
-
+
$ php Q.php 3.1415
Failed.
@@ -121,7 +121,7 @@ Failed.
最初にトークンが得られるのは、小数点以下 16 桁目まで入力したときで、こうなる。
-
+
$ php Q.php 3.1415926535897932
Token: #YO
@@ -137,7 +137,7 @@ Token: #YO
短いので頭から追っていく。
-
+
$π = $argv[1] ?? null;
if ($π === null) {
exit('No input.');
@@ -152,7 +152,7 @@ Token: #YO
入力のバリデーション部分。数値のみ受け付ける。
-
+
$s = implode(array_map(chr(...), str_split($π, 2)));
@@ -164,14 +164,14 @@ Token: #YO
例えば、$πが'656667'だったとすると、65、66、67に対応した'A'、'B'、'C'へと変換され、'ABC'になる。
-
+
$π = '656667';
$s = implode(array_map(chr(...), str_split($π, 2)));
echo $s;
// => ABC
-
+
preg_match('/(\x23.+?) /', $s, $m);
$t = $m[1] ?? '';
@@ -184,7 +184,7 @@ $t = $m[1] ?? '';
なお、#を直接書いていないのは、/#.+?) /と書くと、#.+?)という意図せぬトークンが登録されてしまうからである。
-
+
if (md5($t) === '056e831a4146bf123e8ea16613303d2e') {
echo "Token: {$t}\n";
} else {
--
cgit v1.2.3-70-g09d2