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:hajimehoshi の https://gist.github.com/792313 を参考にした&for式使用。
90bytesクリア。Scalaではもう限界な気がする…
Scalaでこれ以上短く書く方法があれば教えてください。
このままではY!社に入社出来ないどころか人権すら認められそうにありません。
(追記)
87 bytes
id:jacobi824 の http://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最短……?そしてゴルフ楽しいですね。