2011-03-23 10 views
5

Estoy tratando de crear una lista de números y letras en orden de 0-9 y a-z.Crear un recuento con varias matrices

Tengo una matriz de valores value_array = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', ​​'f', 'g', 'h', 'i', 'j', 'k', ' l, m, n, o,, p, q, r, s, t, u, v, w, x ', 'y', 'z']

y una matriz para la lista de combinaciones, en orden, que estos números pueden producir para x número de caracteres, digamos tres

list_array = []

y una matriz para la combinación actual de letras y números (que convertiré en nto una cadena antes de empujar a la matriz lista,]

current_combo [ '0', '0', '0']

¿Cómo consigo la matriz de valores para contar para el conjunto combinado actual, de modo que puedo crear matrices como " ['0', '0', '1'] ['0', '0', '2'] ['0', '0', '3'] [ '0', '0', '4'] [ '0', '0', '5'] [ '0', '0', '6'] .. .. .. ['a', 'z', '1'] .. .. y finalmente a ['z', 'z', 'z']?

Aquí está mi código hasta ahora. Lo siento si es realmente una locura. Soy un novato en esto:

exponent = test.count('?') 


puts 36 ** exponent 

possible_characters = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d', 
'e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w', 
'x','y','z'] 

list = [] 

combo = [] 
end_combo = [] 

exponent.times do |e| 
    combo << '0' 
    end_combo << 'z' 
end 

puts combo.to_s 

while combo != end_combo 



end 
+2

Véase también http://stackoverflow.com/questions/ 5212884/ruby-generate-all-two-letter-words –

Respuesta

7
xs = ("0".."9").to_a + ("a".."z").to_a 
xs.product(xs, xs) 
# [["0", "0", "0"], ["0", "0", "1"], ..., ["z", "z", "y"], ["z", "z", "z"]] 

Como se ha señalado Mladen, con Ruby 1.9 es aún más fácil:

(("0".."9").to_a + ("a".."z").to_a).repeated_permutation(3) 
+2

ohh. Amo a Ruby – fl00r

+1

En realidad en 1.9.2 es aún más fácil crear la matriz 'xs':' [*? 0 ..? 9, *? A ..? Z] '. –

2
value_array.repeated_permutation(n).to_a 
+2

Creo que OP quiere un producto cartesiano, no una permutación. – tokland

+2

1.9.2 tiene 'repeat_permutation', que debería ser el truco: http://www.ruby-doc.org/core/classes/Array.html#M000289 –

+0

@tokland @Mladen Tienes razón. Fijo. – sawa

Cuestiones relacionadas