0

私はRubyを使用しており、何らかの方法で特定の数字の数字のすべての順列を生成し、それらを配列に格納する必要がありました. たとえば、私は number を持っていn = 9431ます。これらの 4 つの数値を並べ替えて配列に格納できるすべての可能な方法を生成する必要があります (元の数値は配列に入れることができます)。

したがって、入力した場合9431、次のような配列を取得する必要があります。

[9413, 9431, 9143, 9134, 9314, 9341, 4913, 4931, 4193, 4139, 4319, 4391, 1493, 1439, 1943, 1934, 1394, 1349, 3419, 3491, 3149, 3194, 3914, 3941]

実際には文字列を使用しても問題ありません。

明確化:ああ、出力は個々の数字ではなく、配列内の整数でなければなりません。

4

2 に答える 2

2

これは、やりたくない中間文字列を使用するため、「不正行為」ですが、機能します。

9431.to_s.chars.to_a.permutation.map(&:join).map(&:to_i).uniq
=> [9431, 9413, 9341, 9314, 9143, 9134, 4931, 4913, 4391, 4319, 4193, 
    4139, 3941, 3914, 3491, 3419, 3194, 3149, 1943, 1934, 1493, 1439, 
    1394, 1349]
于 2012-10-28T02:24:41.237 に答える
1

個々の数字をリストとして取得するために、10 による除算および/またはモジュラスを使用して反復できます。

リスト順列を使用して、さまざまな順列を取得できます。たとえば、次のようになります。

irb(main):015:0> elts = [9,4,3,1].permutation.to_a
=> [[9, 4, 3, 1], [9, 4, 1, 3], [9, 3, 4, 1], [9, 3, 1, 4], [9, 1, 4, 3], [9, 1, 3, 4], [4, 9, 3, 1], [4, 9, 1, 3], [4, 3, 9, 1], [4, 3, 1, 9], [4, 1, 9, 3], [4, 1, 3, 9], [3, 9, 4, 1], [3, 9, 1, 4], [3, 4, 9, 1], [3, 4, 1, 9], [3, 1, 9, 4], [3, 1, 4, 9], [1, 9, 4, 3], [1, 9, 3, 4], [1, 4, 9, 3], [1, 4, 3, 9], [1, 3, 9, 4], [1, 3, 4, 9]]
irb(main):016:0> elts.each{ |x| puts x.join }
9431
9413
9341
9314
9143
9134
4931
4913
4391
4319
4193
4139
3941
3914
3491
3419
3194
3149
1943
1934
1493
1439
1394
1349
于 2012-10-28T02:17:38.310 に答える