制限付 PHP による FizzBuzz 設問編
経緯(ヒント)をまず提示する。
まずは昨年末に書いた以下の記事。
C#とか。 - Grim Saga Project 別館:れびんの勉強部屋 - FizzBuzz問題・解答編:
http://d.hatena.ne.jp/levin_gsp/20071109/1194579778
この中で深く考えずに三項演算子を使って撃沈した。
<?php for($i=1;$i<=100;$i++){ echo $i%15==0?'FizzBuzz ':$i%5==0?'Buzz ':$i%3==0?'Fizz ':$i.' '; /* 整数値かFizzしか表示しない… */ } ?>
その原因が昨日判明した。
梶本裕介の日記 - 2008年09月03日:
http://d.hatena.ne.jp/uskz/20080903/p6
左結合だったのだ。
キモい。
キモすぎる。
昨年末の記事で書いたコードがどう解釈されたか、詳解してみる。
<?php for($i=1;$i<=100;$i++){ echo ((( $i % 15 == 0 ) ? 'FizzBuzz ' : $i % 5 == 0 ) ? 'Buzz ' : $i % 3 == 0 ) ? 'Fizz ' : $i . ' ' ; /* 整数値かFizzしか表示しない… */ } ?>
これじゃあ意図通り動くわけがない。
そこで昨日修正記事を書いた。
C#とか。 - Grim Saga Project 別館:れびんの勉強部屋 - 三項演算子の解釈要注意:
http://d.hatena.ne.jp/levin_gsp/20080903/1220445755
単純に()で条件判断処理を優先付けした。
<?php for($i=1;$i<=100;$i++){ echo ($i%15==0?'FizzBuzz ':($i%5==0?'Buzz ':($i%3==0?'Fizz ':$i.' '))); } ?>
これで一応の解決をみた。
が、なんか悔しい。
ここまでが経緯(ヒント)。
次が設問。
【問題】
1から100までの数を表示するプログラムを書け。
ただし3の倍数のときは数の代わりに「Fizz」と表示。
5の倍数のときは「Buzz」と表示。
3と5両方の倍数の場合には「FizzBuzz」と表示すること。
解答言語は PHP とする。
また、以下のテンプレートを使用すること。
for($i=1;$i<=100;$i++){
echo ### FreeCode ###;
}
### FreeCode ### 部分を三項演算子を用い、()を用いずにコーディングして解を示せ。
- -
もちろん私自身は解いてみたわけなので、PHPキモい嫌い、などと言わずに考えてみていただきたい。
頭の体操、頭の体操。
解答は一週間後をメドに掲載する。