2013-02-08 58 views
6

如何生成順序字母數字字符串?在Ruby中生成字母數字序列

每個字符串應該只有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 

回答

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"] 
+1

很好的答案,完全淘汰了我的。在Ruby中學到了又一件新東西:) – 2013-02-08 14:27:00

+0

呵呵,每天學點新東西! – bheeshmar 2013-02-08 14:43:23

+0

它有可能以種子起點爲基礎嗎? – holaSenor 2013-02-08 15:58:44

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"] 
#... 
+0

從哪裏可以找到有關塊中第4行的dup方法的文檔? – holaSenor 2013-02-08 19:58:56

+0

發現它對象類。 http://ruby-doc.org/core-1.9.3/Object.html#method-i-dup – holaSenor 2013-02-08 20:00:29

+0

@ tester123使其更短(並且更少)。 – steenslag 2013-02-08 20:27:04