整数分割
30分プログラム、その728。wikipedia:整数分割をやってみた。
"並び順を変えても同じ整数分割とみなす"という条件がわりときつくて、それを満たす引数を一個増やしています。
使い方
scala> partition(5) res9: Seq[List[Int]] = RangeG(List(1, 1, 1, 1, 1), List(2, 1, 1, 1), List(2, 2, 1), List(3, 1, 1), List(3, 2), List(4, 1), List(5))
ソースコード
def int_partition(n : Int, max : Int) : Seq[List[Int]] = { if(n == 0) List(List()) else (1 to (max min n)).toList.flatMap{ i => int_partition(n - i, i).map(i::_) } } def partition(n : Int) = int_partition(n,n)