Re:アルファベットの繰り上がり
お題: Server error
投稿: Server error
こんな感じになりました
println alphaList('A'..'Z', 100)*.join()*.trim().join(', ') /** アルファベットのリストを返却 */ def alphaList(values, num) { // 必要な桁を求める int digit = { int d = 1; int size = values.size() while (size < num) { size *= (values.size() + 1); d++ }; return d }() // 桁毎の値のリスト def digitList = (digit == 1 ? [] : [([' '] + values)] * (digit - 1)) + [values] // 組み合わせのリストの先頭からnum個分 return digitList.reverse().combinations()*.reverse() .findAll{ it.join().trim().count(' ') == 0 }[0..<num] }
動作確認はGroovy Version: 1.5.7 JVM: 1.6.0_10にて。
考察
先にリストを作りこんでから出力する方法で実装してみましたが、コードがスパゲッティで読みにくい。
やっぱりこういう処理はindexで各桁の文字を割り出すべきかな。