1

アルファベットの配列を反復処理して 6 文字 (アルファのみ) の文字列をすべて生成しようとすると、最も内側にネストされたループの単一の while ループの後で反復が終了するようです。以下のコード。考え?


alpha = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]

x1 = 0
x2 = 0
x3 = 0
x4 = 0
x5 = 0
x6 = 0

while x1<26
    y1 = alpha[x1]
    while x2<26
        y2 = alpha[x2]
        while x3<26
            y3 = alpha[x3]
            while x4<26
                y4 = alpha[x4]
                while x5<26
                    y5 = alpha[x5]
                    while x6<26
                        y6 = alpha[x6]
                        puts y1 + y2 + y3 + y4 + y5 + y6
                        x6 = x6 + 1
                    end
                    x5 = x5 + 1
                end
                x4 = x4 + 1
            end
            x3 = x3 + 1
        end
        x2 = x2 + 1
    end
    x1 = x1 + 1
end

編集:望ましい結果を達成するためのはるかに簡単な方法を見落としている可能性も非常に高いです。もしそうなら、私を修正してください。

4

3 に答える 3

2
[*?a..?z].repeated_permutation(6).to_a.map &:join

私のマシンでFATAL、FAILED TO ALLOCATE MEMORY、

[*?a..?z].repeated_permutation(2).to_a.map &:join

正常に動作します。

#to_aOK、 の後に呼び出すのは間違いです#repeated_permutation。これがどのように機能するかです。

[*?a..?z].repeated_permutation( 6 ).each { |permutation| puts permutation.join }
于 2013-05-16T16:39:37.673 に答える
2

これはあなたが望むことをしますか?すべての一意の順列が生成されますが、文字が 2 倍になることはありません (「aaaabb」のように)。

('a'..'z').to_a.permutation(6).to_a

デモ用の短いバージョンを次に示します。

res = ('a'..'c').to_a.permutation(2).to_a 
res # => [["a", "b"], ["a", "c"], ["b", "a"], ["b", "c"], ["c", "a"], ["c", "b"]]
于 2013-05-16T16:38:31.170 に答える