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

이것은 하나의 시작점을 설정 할 수 있습니다 :

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

이 Object 클래스를 찾았습니다. http://ruby-doc.org/core-1.9.3/Object.html#method-i-dup – holaSenor

+0

@ tester123 더 짧고 (dup-less). – steenslag