aboutsummaryrefslogtreecommitdiffhomepage
path: root/content/posts/2022-04-09/phperkaigi-2022-tokens.xml
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2023-03-19 03:24:43 +0900
committernsfisis <nsfisis@gmail.com>2023-03-19 03:24:43 +0900
commitdb3d51ddc421dad68abddb95d01ffdab440197d6 (patch)
tree35a6b45bb964b22fa74486596f4e640db82fb0ac /content/posts/2022-04-09/phperkaigi-2022-tokens.xml
parentcb5a2a0afdf822651db035904cd8c1307a7b7743 (diff)
downloadblog.nsfisis.dev-db3d51ddc421dad68abddb95d01ffdab440197d6.tar.gz
blog.nsfisis.dev-db3d51ddc421dad68abddb95d01ffdab440197d6.tar.zst
blog.nsfisis.dev-db3d51ddc421dad68abddb95d01ffdab440197d6.zip
feat(content): specify heading id
Diffstat (limited to 'content/posts/2022-04-09/phperkaigi-2022-tokens.xml')
-rw-r--r--content/posts/2022-04-09/phperkaigi-2022-tokens.xml40
1 files changed, 20 insertions, 20 deletions
diff --git a/content/posts/2022-04-09/phperkaigi-2022-tokens.xml b/content/posts/2022-04-09/phperkaigi-2022-tokens.xml
index e3d9c45..352eba0 100644
--- a/content/posts/2022-04-09/phperkaigi-2022-tokens.xml
+++ b/content/posts/2022-04-09/phperkaigi-2022-tokens.xml
@@ -33,7 +33,7 @@
リポジトリはこちら: <link xl:href="https://github.com/nsfisis/PHPerKaigi2022-tokens">https://github.com/nsfisis/PHPerKaigi2022-tokens</link>
</simpara>
</section>
- <section xml:id="_第1問_brainf_ck_php">
+ <section xml:id="q1-brainfuck">
<title>第1問 brainf_ck.php</title>
<simpara>
ソースコードはこちら。実行には PHP 8.1 以上が必要なので注意。
@@ -114,16 +114,16 @@
<simpara>
この問題は、単に適切なバージョンの PHP で動かせばトークンが得られる。
</simpara>
- <section xml:id="_解説">
+ <section xml:id="q1-brainfuck--commentary">
<title>解説</title>
- <section xml:id="_絵文字">
+ <section xml:id="q1-brainfuck--commentary--emoji">
<title>絵文字</title>
<simpara>
まず目につくのは大量の絵文字だろう。 PHP
は識別子に使用できる文字の範囲が広く、絵文字も使うことができる。
</simpara>
</section>
- <section xml:id="_プログラム全体">
+ <section xml:id="q1-brainfuck--commentary--brainfuck">
<title>プログラム全体</title>
<simpara>
Brainf*ck のインタプリタとプログラムになっている。 Brainf*ck
@@ -185,7 +185,7 @@
なお、<literal>$🐘</literal> はいわゆる main 関数であり、プログラムの実行部分である。
</simpara>
</section>
- <section xml:id="_絵文字の選択">
+ <section xml:id="q1-brainfuck--commentary--emoji-selection">
<title>絵文字の選択</title>
<simpara>
おおよそ意味に合致するよう選んでいるが、<literal>$🤡</literal> と <literal>$🎪</literal>
@@ -193,7 +193,7 @@
のマスコットの象に由来する。
</simpara>
</section>
- <section xml:id="_strict_types">
+ <section xml:id="q1-brainfuck--commentary--strict-types">
<title>strict_types</title>
<simpara>
<literal>declare</literal> 文の <literal>strict_types</literal> に指定できるのは、<literal>0</literal> か <literal>1</literal>
@@ -201,7 +201,7 @@
8.1 から追加された、<literal>0O</literal> または <literal>0o</literal> から始まる八進数リテラルを使った。
</simpara>
</section>
- <section xml:id="_url">
+ <section xml:id="q1-brainfuck--commentary--url">
<title>URL</title>
<simpara>
ソースコードのライセンスを示したこの部分だが、
@@ -216,7 +216,7 @@
以降は行コメントになっている。
</simpara>
</section>
- <section xml:id="_リテラルなしで数値を生成する">
+ <section xml:id="q1-brainfuck--commentary--numbers">
<title>リテラルなしで数値を生成する</title>
<simpara>
ソースコード中に、ほとんど数値リテラルが書かれていないことにお気づきだろうか。
@@ -245,7 +245,7 @@
にし、さらにビット反転して <literal>-1</literal> にしている。
</simpara>
</section>
- <section xml:id="_if_文なしで条件分岐">
+ <section xml:id="q1-brainfuck--commentary--conditionals">
<title><literal>if</literal> 文なしで条件分岐</title>
<simpara>
三項演算子ないし <literal>match</literal> 式を使うことで、<literal>if</literal>
@@ -254,7 +254,7 @@
のような形で分岐することもできる。
</simpara>
</section>
- <section xml:id="_whilefor_文なしでループ">
+ <section xml:id="q1-brainfuck--commentary--loops">
<title><literal>while</literal>、<literal>for</literal> 文なしでループ</title>
<simpara>
不動点コンビネータを使って無名再帰する
@@ -273,7 +273,7 @@
</section>
</section>
</section>
- <section xml:id="_第2問_riddle_php">
+ <section xml:id="q2-riddle">
<title>第2問 riddle.php</title>
<simpara>
ソースコードはこちら。実行には PHP 8.0 以上が必要なので注意。
@@ -324,7 +324,7 @@
<simpara>
ここでは、私の想定解を解説する。
</simpara>
- <section xml:id="_読解">
+ <section xml:id="q2-riddle--code-reading">
<title>読解</title>
<simpara>
まずはソースコードを読んでいく。
@@ -372,7 +372,7 @@
5文字ごとに区切ったあと、改行で結合している。
</simpara>
</section>
- <section xml:id="_ヒント">
+ <section xml:id="q2-riddle--hint">
<title>ヒント</title>
<simpara>
次に、ソースコードに書いてあるヒントを読んでいく。
@@ -390,7 +390,7 @@
ファイルに追加ヒントとして書かれている)。
</simpara>
</section>
- <section xml:id="_解く">
+ <section xml:id="q2-riddle--solve">
<title>解く</title>
<simpara>
ここまでわかれば、あと一歩で解ける。すなわち、<literal>0x14B499C</literal> が <literal>#</literal>
@@ -455,7 +455,7 @@
</simpara>
</section>
</section>
- <section xml:id="_第3問_toquine_php">
+ <section xml:id="q3-toquine">
<title>第3問 toquine.php</title>
<simpara>
ソースコードはこちら。
@@ -504,9 +504,9 @@
<simpara>
実際にはもう少しパイプで繋げなければならない。
</simpara>
- <section xml:id="_解説_2">
+ <section xml:id="q3-toquine--commentary">
<title>解説</title>
- <section xml:id="_プログラム全体_2">
+ <section xml:id="q3-toquine--commentary--quine">
<title>プログラム全体</title>
<simpara>
コメントにもあるとおり、これは quine (風) のプログラムになっている。
@@ -518,14 +518,14 @@
異なるのはトークンになっている部分のみである。
</simpara>
</section>
- <section xml:id="_トークン">
+ <section xml:id="q3-toquine--commentary--tokens">
<title>トークン</title>
<simpara>
<literal>$xs</literal> がトークンに対応している。変換のロジックは <literal>riddle.php</literal>
とほぼ同じなので省略する。
</simpara>
</section>
- <section xml:id="_状態保持">
+ <section xml:id="q3-toquine--commentary--states">
<title>状態保持</title>
<simpara>
トークンの何文字目まで出力したかを、ソースコードを変えずに (quine
@@ -534,7 +534,7 @@
から情報を取得している。
</simpara>
</section>
- <section xml:id="_rot_13">
+ <section xml:id="q3-toquine--commentary--rot-13">
<title>ROT 13</title>
<simpara>
Quine は、素朴に書くとプログラムの一部が 2回記述されてしまう。