2013-02-08 11 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

と完全に地雷を廃止。ルビーのもう一つの新しいことを学びました:) –

+0

ハァッ、毎日何か新しいことを学ぶ! – bheeshmar

+0

出発点を付けることは可能でしょうか? – holaSenor

0

この1つは出発点を設定することができます:非常に良い答え

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

+0

が見つかりました。 http://ruby-doc.org/core-1.9.3/Object.html#method-i-dup – holaSenor

+0

@ tester123短くしました(そしてdup-less)。 – steenslag

関連する問題