FizzBuzzをGroovyで書いてみた
明日は楽しみにしていたJGGUGなので、復習の意味を込めてGroovyでFizzBuzzを書いてみた。
ちなみにFizzBuzzとはこんな感じ。
1 から順に数を数えていく。但し、その数が 3 で割り切れるならば数字の代わりに Fizz と、5 で割り切れるなら Buzz と言うゲーム。3 でも 5 でも割り切れる場合は、FizzBuzz の順に言う。
http://d.hatena.ne.jp/keyword/FizzBuzz
ここで有名になったのかな?
どうしてプログラマに・・・プログラムが書けないのか?
http://www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm
とりあえず2分位で書ければプログラマとして合格らしいので、何も考えずに書いてみた。
def f = "fizz" def b = "buzz" for (i in 1..100) { if (i % (3*5) == 0) { println f+b } else if (i % 3 == 0) { println f } else if (i % 5 == 0) { println b } else { println i } }
まぁ、何もひねりがなくそのままですw
流石に2分以内にかけたはず。
きっとGroovyっぽく書いてるのがあるはずと、探してみたらfumokmmさんの答えを発見。
うわぁ。。。Groovyっぽい!!
っというか、switchってリスト受け付けるんだ!
刺激受けまくりだったので、switch使う練習として「%」を使わないで書いてみました。
(なんでcollect使わなかったんだろうw)
def f = "fizz" def b = "buzz" def count1 = 0 def count2 = 0 (1..100).each{ x -> count1++ count2++ switch ([count1 == 3, count2 == 5]) { case{it[0]&&it[1]} : str= f+b;count1=0;count2=0; break case{it[0]} : str=f;count1=0; break case{it[1]} : str=b;count2=0; break default : str=x } println str }
面白かったのがcaseの中括弧内のitはswitchの結果で、
コロンの後のitはクロージャーのitになるということ。(上のコードだと変数「x」としていますけど)
後、caseの中括弧はクロージャーなんでなんでも書けるってこと。
switchやりたい放題じゃないですか。。。
しかし、breakが不恰好ですよね。
でも、if並べるのも。。。
というか、カウンター使うのもどうなんですかね?
いい案浮かんだら書き直したいですね。
(その時にはcollectとか使ってw)
ちなみに、最短は55文字らしいです。
こういう変態コードに憧れてGroovyの勉強始めたので、いつかこういうの書いてみたいですね。
まぁ、"「*」ってなんだっけ?"とか思ってる時点でまだまだですがw
参考↓
No Programming, No Life
http://d.hatena.ne.jp/fumokmm/20101018/1287415075
FizzBuzz最短コード(GolfScript, Groovy)
http://d.hatena.ne.jp/y_tag/20110125/fizzbuzz
第17回 G*ワークショップ
http://kokucheese.com/event/index/13874/