diff options
Diffstat (limited to 'content/posts/2022-04-09/phperkaigi-2022-tokens.xml')
| -rw-r--r-- | content/posts/2022-04-09/phperkaigi-2022-tokens.xml | 40 |
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回記述されてしまう。 |
