読者です 読者をやめる 読者になる 読者になる

FizzBuzz in Scala

http://twitter.com/#!/yamaji/status/28840058526105600
twitterで見かけたこの発言を受けてScalaで書いてみた。

118 bytes

1 to 100 map{case i if i%15==0=>"FizzBuzz" case i if i%5==0=>"Buzz" case i if i%3==0=>"Fizz" case i=>i}foreach println

とりあえず書いてみたもの。最初にmap + caseが思い浮かんだのでこんな形。
せめて100bytesはクリアしたい。

99 bytes

1 to 100 foreach(i=>println(if(i%15==0)"FizzBuzz"else if(i%5==0)"Buzz"else if(i%3==0)"Fizz"else i))

2つ目。if式で書きなおしたもの。3項演算子が無いのが痛い。
100bytes以内に収めることが出来たので寝ようかと思ったけどもうちょっと頑張る。

89 bytes

for(i<-1 to 100)println(if(i%15>0)if(i%5>0)if(i%3>0)i else"Fizz"else"Buzz"else"FizzBuzz")

3つ目。id:hajimehoshihttps://gist.github.com/792313 を参考にした&for式使用。
90bytesクリア。Scalaではもう限界な気がする…


Scalaでこれ以上短く書く方法があれば教えてください。
このままではY!社に入社出来ないどころか人権すら認められそうにありません。


(追記)

87 bytes

id:jacobi824http://d.hatena.ne.jp/jacobi824/20110124/1295836615 から引用

for(i<-1 to 100)println((if(i%3>0)""else"Fizz")+(if(i%5>0)if(i%3>0)i else""else"Buzz"))

文字列結合を使ってさらに2bytes短縮。なるほど。

82bytes

id:Dekosuke に教えてもらったpython最短(http://python.rdy.jp/wiki.cgi?page=FizzBuzz)を参考にした。

for(i<-1 to 100)println("Fizz"*((i-1)%3/2)+(if(i%5>0)if(i%3>0)i else""else"Buzz"))

"Fizz"*((i-1)%3/2) がミソですね。5bytes短縮で今度こそScala最短…?と思いきや…

76bytes

id:jacobi824 がさらに修羅チューニング。なんと6bytes短縮。
http://d.hatena.ne.jp/jacobi824/20110124/1295836615

for(i<-0 to 99)println(if(i%3<2&i%5<4)i+1 else"Fizz"*(i%3/2)+"Buzz"*(i%5/4))

今度こそ今度こそScala最短……?そしてゴルフ楽しいですね。