2013-02-08 9 views
6

Jak wygenerować sekwencyjny łańcuch alfanumeryczny?Wygeneruj sekwencję alfanumeryczną w języku Ruby

Każdy ciąg powinien mieć tylko 8 znaków.

Znaki możliwe dla każdej pozycji są:

["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"] 

także, jeśli to możliwe chciałbym wybrać punkt początkowy sekwencji.

Na przykład

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

Odpowiedz

13

To permutacji powtórzeń. Tablice mogą to zrobić po wyjęciu z pudełka.

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

bardzo dobra odpowiedź i całkowicie obsoletes kopalni. Nauczyłem się jeszcze jednej nowej rzeczy w rubinie :) –

+0

Huh, ucz się czegoś nowego codziennie! – bheeshmar

+0

Czy możliwe jest umieszczenie go w punkcie początkowym? – holaSenor

0

Ten pozwala na ustawienie punktu wyjścia:

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

Gdzie mogę znaleźć dokumentację metody dup w linii 4 w bloku? – holaSenor

+0

znalazł klasę obiektu. http://ruby-doc.org/core-1.9.3/Object.html#method-i-dup – holaSenor

+0

@ tester123 Zrobiło to krócej (i dup-less). – steenslag

Powiązane problemy