Ruby 1.9.2
標準クラス・モジュール > Array > repeated_permutation
array.repeated_permutation(n) {|arr| block }
repeated_permutation
メソッドは、配列の要素から引数n個を選んだときの重複順列(順序あり、重複を許す組合せ)を数え上げます。組合せの数だけブロックを繰り返し実行し、ブロック引数arrに組合せを配列で入れます。戻り値はレシーバ自身です。
次の例は、4個の数から2個を選んだときの重複順列です。42=16通りの組合わせができます。
numbers = [1, 2, 3, 4] numbers.repeated_permutation(2) {|a, b| printf("(%d, %d) ", a, b) } puts ""
(1, 1) (1, 2) (1, 3) (1, 4) (2, 1) (2, 2) (2, 3) (2, 4) (3, 1) (3, 2) (3, 3) (3, 4) (4, 1) (4, 2) (4, 3) (4, 4)
ブロックを省略したときは、Enumerator
オブジェクトを返します。
letters = ["C", "A", "T"] puts letters.repeated_permutation(3).collect {|a| a.join }.join(" ")
CCC CCA CCT CAC CAA CAT CTC CTA CTT ACC ACA ACT AAC AAA AAT ATC ATA ATT TCC TCA TCT TAC TAA TAT TTC TTA TTT
引数nが0のときは空の組合せが1つとなります。
p [1, 2, 3].repeated_permutation(0).to_a
[[]]
permutation
: 要素の順列を数え上げる。Ruby 1.8.7repeated_combination
: 重複組合せを数え上げる。Ruby 1.9.2