6

連続した英数字文字列を生成するにはどうすればよいですか?

各文字列は 8 文字のみにする必要があります。

各ポジションで可能な文字は次のとおりです。

["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "B", "C", "D", "F", "G", "H", "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "V", "W", "X", "Y", "Z"]

また、できればシーケンスの開始点を選びたいです。

例えば:

00000001
00000002
00000003
00000005
...
0000L3FH
0000L3FJ
0000L3FK
0000L3FL
0000L3FM
0000L3FN
0000L3FP
...
0000L4FP
0000L4FQ
0000L4FR
0000L4FS
...
0000M000
0000M001
0000M002
4

2 に答える 2

13

それは反復を伴う順列です。配列は、箱から出してそれを行うことができます。

chars = %w(0 1 2 B C)
sequencer = chars.repeated_permutation(chars.size) #OP:replace chars.size by 8
10.times{p sequencer.next}
#["0", "0", "0", "0", "0"]
#["0", "0", "0", "0", "1"]
#["0", "0", "0", "0", "2"]
#["0", "0", "0", "0", "B"]
#["0", "0", "0", "0", "C"]
#["0", "0", "0", "1", "0"]
#["0", "0", "0", "1", "1"]
#["0", "0", "0", "1", "2"]
#["0", "0", "0", "1", "B"]
#["0", "0", "0", "1", "C"]

p sequencer.next
#["0", "0", "0", "2", "0"]
于 2013-02-08T14:25:31.940 に答える
0

これにより、開始点を設定できます。

dial = %w(0 1 2 A B)
start_position = %w(A B 0) #for instance.

p clock = start_position.map{|char| dial.rotate(dial.index(char))}
#[["A","B","0","1","2"], ["B","0","1","2","A"], ["0","1","2","A","B"]]

# start ticking:
clock.shift.product(*clock){|tick|p tick}
#["A", "B", "0"]
#["A", "B", "1"]
#["A", "B", "2"]
#["A", "B", "A"]
#["A", "B", "B"]
#["A", "0", "0"]
#...
于 2013-02-08T19:49:14.917 に答える