FUJILOG

見た、聴いた、触れたこと。 動かしたもの、書いたもの。 ウェブとリアルの備忘録です。

perlでFizzBuzz

ワンライナーって普段書かないので興味本位で調べてみました。
今回の素材はFizzBuzzの例。

FizzBuzzは、1から順に整数をカウントしていって、3の倍数のとき"Fizz"、5の倍数のとき"Buzz"、15の倍数のとき"FizzBuzz"と出力するものです。

上から順にコードが短いものを列挙します。
※書式の都合上、改行あり。


 perl -e 'print $_ % 15 == 0 ? "FizzBuzz\n"
: $_ % 5 == 0 ? "Buzz\n"
: $_ % 3 == 0 ? "Fizz\n"
: "$_\n" for 1 .. 100'


 perl -e 'for(1..100){print;print"\b\b\bFizz"
if$_%3==0;print"\b\b\bBuzz"if$_%5==0;print"\n"}'


 perl -le 'print $_%15?$_%5?$_%3?$_
:Fizz:Buzz:FizzBuzz for(1..100)'


 perl -le 'print(($_%3?"":Fizz).($_%5?"":Buzz)or$_)for 1..100'


最下段のが最短とのことでした。。
いやはや、perlはフリー&カオス。