From a84908b7e8a0e2423afd6b836eccf27a420270b4 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Wed, 20 Sep 2023 19:56:52 +0900 Subject: feat(blog/nuldoc): change content format from DocBook to NulDoc --- .../2022-04-09/phperkaigi-2022-tokens/index.html | 32 +++++++++++----------- 1 file changed, 16 insertions(+), 16 deletions(-) (limited to 'vhosts/blog/public/posts/2022-04-09') diff --git a/vhosts/blog/public/posts/2022-04-09/phperkaigi-2022-tokens/index.html b/vhosts/blog/public/posts/2022-04-09/phperkaigi-2022-tokens/index.html index b19f038d..6db138d5 100644 --- a/vhosts/blog/public/posts/2022-04-09/phperkaigi-2022-tokens/index.html +++ b/vhosts/blog/public/posts/2022-04-09/phperkaigi-2022-tokens/index.html @@ -79,7 +79,7 @@ ソースコードはこちら。実行には PHP 8.1 以上が必要なので注意。

-
<?php
+            
<?php
 
 declare(strict_types=0O1);
 
@@ -176,7 +176,7 @@ $🐘([
                    なお、brainf*ck プログラムを普通の書き方で書くと、次のようになる。 
                 

-
+ + + + + + + + + +
+                
+ + + + + + + + + +
 [
   > + + +
   > + + + + +
@@ -266,7 +266,7 @@ $🐘([
                    ソースコードのライセンスを示したこの部分だが、 
                 

-
https://creativecommons.org/publicdomain/zero/1.0/
+
https://creativecommons.org/publicdomain/zero/1.0/

完全に合法な PHP のコードである。 https: 部分はラベル、// 以降は行コメントになっている。 @@ -279,7 +279,7 @@ $🐘([ ソースコード中に、ほとんど数値リテラルが書かれていないことにお気づきだろうか。 PHP では、型変換を利用することで任意の整数を作り出すことができる。

-
assert(0 === +!![]);
+                
assert(0 === +!![]);
 assert(1 === +![]);
 assert(2 === ![]+![]);
 assert(3 === ![]+![]+![]);
@@ -324,7 +324,7 @@ $🐘([
                ソースコードはこちら。実行には PHP 8.0 以上が必要なので注意。 
             

-
<?php
+            
<?php
 
 /*********************************************************
 * This program displays a PHPer token.                  *
@@ -373,7 +373,7 @@ $🐘([
                  まずはソースコードを読んでいく。 
               

-
$token = [
+              
$token = [
 // 略
 ];
@@ -381,25 +381,25 @@ $🐘([ 数値からなる $token があり、各要素をループしている。

-
$x = $x ^ N;
+
$x = $x ^ N;

まずは排他的論理和 (xor) を取り、

-
$x = sprintf('%025b', $x);
+
$x = sprintf('%025b', $x);

二進数に変換して、

-
$x = str_replace(search: ['0', '1'], replace: [' ', '#'], subject: $x);
+
$x = str_replace(search: ['0', '1'], replace: [' ', '#'], subject: $x);

0 を空白に、1 を # にし、

-
$x = implode("\n", str_split($x, length: 5));
+
$x = implode("\n", str_split($x, length: 5));

5文字ごとに区切ったあと、改行で結合している。 @@ -445,13 +445,13 @@ $🐘([ N は高々

-
assert(0 <= N && N <= 0b11111_11111_11111_11111_11111);
+
assert(0 <= N && N <= 0b11111_11111_11111_11111_11111);

なのでブルートフォースしてもよいが、ここではブルートフォースしない方法を紹介する。

-
<?php
+              
<?php
 
 $x = 0x14B499C;
 
@@ -472,7 +472,7 @@ $🐘([
                  この一連の変換に対する逆変換を考えると、次のようになる。 
               

-
<?php
+              
<?php
 
 $x =
 " # # \n" .
@@ -501,7 +501,7 @@ $🐘([
                ソースコードはこちら。 
             

-
<?php
+            
<?php
 
 // License: https://creativecommons.org/publicdomain/zero/1.0/
 // This is a quine-like program to generate a PHPer token.
@@ -535,7 +535,7 @@ Q;
                コメントにもあるとおり、次のようにして実行すれば答えがでてくる。 
             

-
$ php toquine.php | php | php | php | ...
+
$ php toquine.php | php | php | php | ...

実際にはもう少しパイプで繋げなければならない。 @@ -564,7 +564,7 @@ Q;

状態保持

- トークンの何文字目まで出力したかを、ソースコードを変えずに (quine なので) 覚えておく必要がある。 このプログラムでは、トークンが出力されるとソースコードがだんだんと長くなっていくのを利用して、LINE から情報を取得している。 + トークンの何文字目まで出力したかを、ソースコードを変えずに (quine なので) 覚えておく必要がある。 このプログラムでは、トークンが出力されるとソースコードがだんだんと長くなっていくのを利用して、__LINE__ から情報を取得している。

-- cgit v1.2.3-70-g09d2