パスワードを忘れた? アカウント作成
494394 journal

quabbinの日記: FizzBuzz

日記 by quabbin

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

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

UNIXはシンプルである。必要なのはそのシンプルさを理解する素質だけである -- Dennis Ritchie

読み込み中...