2012年6月5日火曜日

"fizzになる数字をn個挙げる"をGroovyで

@irofさんのホームページの課題『"Buzzになる数字をn個挙げる"をGroovyで…やろうと思ったんだけど』

やってみました。

IntRangeとかInteger#timesとか使ったほうがいいんだけど、無駄な計算しているよなということで、

結局Integer.metaClassをいじってしまいました。

def fizzbuzz = {final int arg ->
def res = (arg % 3 == 0? 'fizz' : '' ) + (arg % 5 == 0? 'buzz' : '' )
res += res.size() == 0? arg : ''
res
}
Integer.metaClass.define {
items = {Closure c ->
final int num = delegate
def results = []
def i = 0
while(num > results.size()) {
if (c(i)) {
results << i
}
i += 1
}
results
}
}
println 5.items {
fizzbuzz(it) == 'fizz'
}


結果

[3, 6, 9, 12, 18]
view raw result.txt hosted with ❤ by GitHub


多分、もっといい書き方はきょんくんがやってくれるでしょう。

0 件のコメント:

コメントを投稿