From db3d51ddc421dad68abddb95d01ffdab440197d6 Mon Sep 17 00:00:00 2001
From: nsfisis
この記事は、普通の fizzbuzz を徐々に変形して最終形にしていく、という構成で書かれている。最終形を見てどのような仕組みで動いているのか解読してから解説を読みたい、というかたがいれば、 このページ にソースコードがあるので、そちらを先に見てほしい。
PHP で、次のような制約の下に fizzbuzz を書いた。
記事の構成について
+ 記事の構成について
レギュレーション
+ レギュレーション
1行あたりの文字数など、適当に改行を挟めばいいだけではないのか?
@@ -232,7 +232,7 @@ c\@@ -259,10 +259,10 @@ a'
- - 標準的なインストール構成の PHP で実現できること (デフォルトで有効になっていない拡張等を使わないこと) + 標準的なインストール構成の PHP で実現できること (デフォルトで有効になっていない拡張等を使わないこと)
まずは普通に書くとしよう。
@@ -278,8 +278,8 @@ a'for の排除for の排除
for は、3文字もある長いキーワードである。こんなものは使えない。array_ 系の関数を使って、適当に置き換えるとしよう。
@@ -298,8 +298,8 @@ a'
range、array_walk、printf は長すぎるのでどうにかせねばならない。ここで、PHP の可変関数を使う。可変関数とは、関数名が文字列として入った変数を経由して、関数を呼び出す機能である。
@@ -322,8 +322,8 @@ a'
今回使ったテクニックを説明する前に、余談として、文字列リテラルの短縮法として今回採用しなかったものを紹介する。
@@ -366,8 +366,8 @@ F.実際に使った手法の説明に移る。
@@ -382,7 +382,7 @@ F. // $a ^ $b は次のコードと同じ $result = ''; for ($i = 0; $i < min(strlen($a), strlen($b)); $i++) { - $result .= $a[$i] ^ $b[$i]; +$result .= $a[$i] ^ $b[$i]; } echo $result; @@ -447,8 +447,8 @@ o'完成したものがこちら。
@@ -604,8 +604,8 @@ _! );PHP は、スクリプト言語の中だとシンタックスシュガーが少ない (体感)。この挑戦は不可能に思われたが、PHP マニュアルとにらめっこしていたらなんとかなった。
@@ -615,8 +615,8 @@ _!
PHP では、バッククォートを使ってシェルを呼び出せる。これは shell_exec 関数と等価である。さて、PHP ではバックスラッシュによる行継続が使えないと書いたが、シェルでは使える (当然だが、呼び出されるシェルに依存する。Bash なら大丈夫だろう。知らんけど)。