Rubí Variación con el método de buggy de repetir
-
08-10-2019 - |
Pregunta
I necesitan un método escrito en Ruby, que calcula variaciones. Ya he escrito en Java, pero como soy nuevo en Rubí, hay algo que me falta por la aplicación Ruby.
El método se suposed para hacer esto:
método (1, "01") => [ "0", "1"]
método (2, "01") => [ "00", "01", "10", "11"] ... para que pueda obtener la idea.
nota: en el impl Ruby, i dar paralms como este: método (2, [ "0", 1" ]), pero eso no es un problema
.Mi impl Java:
public static List<String> Variations(int strength, String usableChars) {
List<String> list =
new ArrayList<String>((int) Math.pow(usableChars.length(), strength));
if (strength == 0) {
list.add("");
} else {
List<String> l = Variations(strength - 1, usableChars);
for (char c : usableChars.toCharArray()) {
for (String s : l) {
list.add(c + s);
}
}
}
return list;
}
Y está bien de trabajo. Pero esta es mi aplicación Ruby:
def Variation (strength, arrayOfString)
array = Array.new(arrayOfString.size**strength)
if strength == 0
array << ""
else
a = Variation(strength-1, arrayOfString)
for i in arrayOfString do
for j in a do
array << (i + j)
end
end
end
return array
end
En este sigo recibiendo mensajes de error test.rb: 10: Variación en ` ':. No se puede convertir en nula String (TypeError)
Solución
En Ruby, matrices crecen automáticamente según sea necesario. Así que cambiar la matriz de inicialización de:
array = Array.new(arrayOfString.size**strength)
a
array = []
Para enumerar más de cada carácter en una cadena, en lugar de
for i in arrayOfString do
hacer esto:
arrayOfString.each_char do |i|
El resultado final:
#!/usr/bin/ruby1.8
def Variation (strength, arrayOfString)
array = []
if strength == 0
array << ""
else
a = Variation(strength - 1, arrayOfString)
arrayOfString.each_char do |i|
for j in a do
array << (i + j)
end
end
end
return array
end
p Variation(2, '01') # => ["00", "01", "10", "11"]
each_char está en Rubí> = 1.8.7, o se puede obtener de la backports joya .