diff options
Diffstat (limited to 'public/posts/2022-09-29/write-fizzbuzz-in-php-2-letters-per-line/index.html')
| -rw-r--r-- | public/posts/2022-09-29/write-fizzbuzz-in-php-2-letters-per-line/index.html | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/public/posts/2022-09-29/write-fizzbuzz-in-php-2-letters-per-line/index.html b/public/posts/2022-09-29/write-fizzbuzz-in-php-2-letters-per-line/index.html index b121725..abdb48e 100644 --- a/public/posts/2022-09-29/write-fizzbuzz-in-php-2-letters-per-line/index.html +++ b/public/posts/2022-09-29/write-fizzbuzz-in-php-2-letters-per-line/index.html @@ -125,7 +125,7 @@ 特に、C言語でこのような試みをおこなったことがあるかたならそう思うだろう。事実、Cでのこの制約はほとんど無意味に等しい。 </p> - <pre language="c" linenumbering="unnumbered"> + <pre class="highlight" language="c" linenumbering="unnumbered"> <code>#\ i\ n\ @@ -260,7 +260,7 @@ また、2文字だと文字列がまともに書けないのも辛い。<code>''</code>だけで 2文字使うので、「1文字の文字列リテラル」というものを書くことができない。PHP では文字列リテラル中に生の改行が書けるので </p> - <pre language="php" linenumbering="unnumbered"> + <pre class="highlight" language="php" linenumbering="unnumbered"> <code>$a =' a' @@ -284,7 +284,7 @@ a' まずは普通に書くとしよう。 </p> - <pre class="monospaced"> + <pre class="monospaced highlight"> <code><?php for ($i = 1; $i < 100; $i++) { @@ -303,7 +303,7 @@ a' <code>for</code>は、3文字もある長いキーワードである。こんなものは使えない。<code>array_</code>系の関数を使って、適当に置き換えるとしよう。 </p> - <pre language="php" linenumbering="unnumbered"> + <pre class="highlight" language="php" linenumbering="unnumbered"> <code><?php $s = range(1, 100); @@ -325,7 +325,7 @@ a' <code>range</code>、<code>array_walk</code>、<code>printf</code>は長すぎるのでどうにかせねばならない。ここで、PHP の可変関数を使う。可変関数とは、関数名が文字列として入った変数を経由して、関数を呼び出す機能である。 </p> - <pre language="php" linenumbering="unnumbered"> + <pre class="highlight" language="php" linenumbering="unnumbered"> <code><?php $r = 'range'; @@ -365,7 +365,7 @@ a' というルールがない場合、「未定義の定数が評価された場合、その定数の名前が値になる」という PHP 7.x までの仕様が利用できる。例えば、<code>Fizz</code>という文字列が欲しければ、次のようにする。 </p> - <pre language="php" linenumbering="unnumbered"> + <pre class="highlight" language="php" linenumbering="unnumbered"> <code>$f =F .i @@ -378,7 +378,7 @@ a' こうして簡単に文字列を作れる。なお、この仕様は 7.x 時点でも警告を受けるので、<code>@</code>演算子を使って抑制してやるとよい。 </p> - <pre language="php" linenumbering="unnumbered"> + <pre class="highlight" language="php" linenumbering="unnumbered"> <code>$f =@ F. @@ -405,7 +405,7 @@ F. ずばり、文字列同士のビット演算を使う。PHP では、文字列同士でビット演算 (<code>&</code>、<code>|</code>、<code>^</code>) をした場合、文字列の各バイトごとに指定したビット演算がなされ、それを結合したものが演算結果となる。 </p> - <pre language="php" linenumbering="unnumbered"> + <pre class="highlight" language="php" linenumbering="unnumbered"> <code>$a = "12345"; $b = "world"; @@ -423,7 +423,7 @@ echo $result; これを踏まえ、次のコードを見てみよう。 </p> - <pre language="php" linenumbering="unnumbered"> + <pre class="highlight" language="php" linenumbering="unnumbered"> <code>$x = "x\nOm\n"; $y = "\nk!\no"; $r = $x ^ $y; @@ -434,7 +434,7 @@ echo "$r\n";</code> 実行すると、<code>range</code>が表示される。さて、PHP では文字列リテラル中に生の改行を直接書いてもよいのだった (「主な障害」の節を参照のこと)。書きかえてみよう。 </p> - <pre language="php" linenumbering="unnumbered"> + <pre class="highlight" language="php" linenumbering="unnumbered"> <code>$x ='x Om @@ -453,7 +453,7 @@ echo "$r\n";</code> さらに<code>#</code>を使って適当に調整すると、次のようになる。 </p> - <pre language="php" linenumbering="unnumbered"> + <pre class="highlight" language="php" linenumbering="unnumbered"> <code>$x =# 'x @@ -490,7 +490,7 @@ echo "$r\n";</code> 完成したものがこちら。 </p> - <pre language="php" linenumbering="unnumbered"> + <pre class="highlight" language="php" linenumbering="unnumbered"> <code><?php $x @@ -660,7 +660,7 @@ echo "$r\n";</code> PHP では、バッククォートを使ってシェルを呼び出せる。これは<code>shell_exec</code>関数と等価である。さて、PHP ではバックスラッシュによる行継続が使えないと書いたが、シェルでは使える (当然だが、呼び出されるシェルに依存する。Bash なら大丈夫だろう。知らんけど)。 </p> - <pre language="php" linenumbering="unnumbered"> + <pre class="highlight" language="php" linenumbering="unnumbered"> <code><?php printf(` @@ -701,7 +701,7 @@ echo "$r\n";</code> もうこれ以上は不可能だと思っていたのだが、この記事の執筆中に解決する方法を思いついたので載せておく。 </p> - <pre language="php" linenumbering="unnumbered"> + <pre class="highlight" language="php" linenumbering="unnumbered"> <code><?php $c = 'chr'; @@ -737,7 +737,7 @@ ${ 先程と同じく、<code>chr</code>や<code>printf</code>を生成する部分は長くなるので省いた。 </p> - <pre class="monospaced"> + <pre class="monospaced highlight"> <code>${ '_ '}</code> @@ -747,7 +747,7 @@ ${ は変数で、中にはスペースとエスケープが入っている (<code>chr(32) . chr(92)</code>)。シェルに渡されている文字列は次のようになる。 </p> - <pre class="monospaced"> + <pre class="monospaced highlight"> <code>e\ c\ h\ @@ -770,7 +770,7 @@ o\ ちなみに、PHP 8.2 からは、この記法で Warning が出るようになるようだ。 </p> - <pre class="monospaced"> + <pre class="monospaced highlight"> <code>${ '_ '}</code> |
