quabbinの日記: FizzBuzz
Katuragiさんの日記より
FizzBuzz問題なるものを知る。
最短競争をやってる場所を見て、なんとも楽しそうで乗り遅れた事が悔やまれる。
ざっと眺めていて、三つ面白そうなのを拾ってみた。
まずはRuby関連。
一つ目はコレ。
1.upto(?d){|i|i%3<1&&x=:Fizz;puts i%5<1?"#{x}Buzz":x||i}
で62byte。
「?d」の意味だけが分からなかったが、まうめも 2007-05-09のエントリーを見て納得。
文字コードを数値化する演算子ですか…。知らなかった。
シンボルで文字操作とか、&&や||での条件分岐とか、==ではなくて<で0かどうかをチェックなどなど。
いろんな発想が詰まっていて面白い。
二つ目はコレ。
(1..100).zip(['','','Fizz']*34,(['']*4<<'Buzz')*20).each{|i|/\d+$|\D+/=~i.to_s;puts$&}
で86byte。
上のように'Fizz'を:Fizzのようにすると、あと2byte削れる。
さっきのより少し長いけど、配列に関してあまり使わないやり方の連続。
最後にArray#to_s()して正規表現を使って文字列連結するところがまた面白い。
三つ目はJava関連。
class M{static{for(int i=0;++i<101;)System.out.println(i%15==0?"FizzBuzz":i%3==0?"Fizz":i%5==0?"Buzz":i);}}
で108byte。
staticでmainの代わりをさせているところで大笑い。センスがいい。
だがこれ、動かせているといえるのだろうか。mainがなければjavaコマンドからは実行できない。
いや、正確には実行されて答えの文字列が出てくるのだけど、ついでに余計なメッセージまで出てくるのが問題。
java.lang.NoSuchMethodError: main
Exception in thread "main"
コマンドの最後に2>/dev/nullとでも繋げておけばいいのだろうけど、それってなにかセコい気がする。
いや、そのセコさはこの最短遊びの趣旨にあっているのか。
ついでにコレ、==0を<1にすると、簡単に105byteになる。
時間見つけて私も考えてみようかな。
# 昨日、とうとうミソジなるものになってしまった…orz
FizzBuzz More ログイン