Comment detail

自然数の分割(別表現) (Nested Flatten)
短さに挑戦。  出力は短い順に行うので、出力用の配列に1桁分を出力後、2桁分を出力、以下同じ。
各桁の取りうる値の範囲は、上位までの数字と、残桁数で決まるので各桁をループ。
実行時間はCeleron2.8G,メモリ512MBで、出力なし22秒、出力あり1分19秒でした。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
def young(n, k, m = n, zk = 0, a = [])
  (a.each {|i|p i};puts; return) if n == 0
  ([n - k + 1, m].min).downto((n + k - 1)/k) {|x|
    a[zk] = "□" * x
    young(n - x, k - 1, x, zk + 1, a)
  }
end

p "in:"
1.upto(n=gets.chomp.to_i) {|k|
  young(n, k)
}

Index

Feed

Other

Link

Pathtraq

loading...