[Perl] Fizz-Buzz問題 (60 bytes)

1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。
どうしてプログラマに・・・プログラムが書けないのか?
より Fizz-Buzz 問題。

最初のバージョン (66 bytes)
perl -le'print((!($_%3)&&"Fizz").(!($_%5)&&"Buzz")||$_)for 1..100'
Perlらしく、記号が多い。
文字列の "" を外すことができるが、文字列の前が & だと
関数呼び出しと曖昧な表現になるので△。

not の and を取る演算子がないので、カッコも増えて、ちょと長い。
三項演算子を使うとちょっと短くなる。 (60 bytes)
perl -le'print(($_%3?"":Fizz).($_%5?"":Buzz)||$_)for 1..100'

このくらいでギブアップ。

ひおにっきさん。(56 bytes)
perl -le'print+(Fizz)[$_%3].(Buzz)[$_%5]||$_ for 1..100'
配列を使って、0のときに文字列が取り出せるようにしている。
これも Perl ならではの表現? 賢いッ!

+ を使うのは、出力先ハンドルと区別させるためなのかな。
カッコを使っても同じ長さで少し分かりやすい。(56 bytes)
perl -le'print((Fizz)[$_%3].(Buzz)[$_%5]||$_)for 1..100'


まとめサイト(TAKESAKOさん)

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック