繰り返しのバギー法によるルビーのバリエーション
-
08-10-2019 - |
質問
バリエーションを計算するRubyで書かれた方法が必要です。私はすでにJavaでそれを書いていますが、Rubyは初めてなので、Rubyの実装について見逃しているものがあります。
この方法はこれを行うために訴えられています:
方法(1、 "01")=> ["0"、 "1"]
方法(2、 "01")=> ["00"、 "01"、 "10"、 "11"] ...アイデアが得られます。
注:Ruby Implでは、このようなパラームを与えます:方法(2、["0"、1 "])、しかしそれは問題ではありません。
私のjava empl:
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;
}
そして、それは正常に動作しています。しかし、これは私のルビーの実装です:
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
これで、エラーメッセージtest.rb:10:in `variation ':nilをstring(typeerror)に変換することはできません。
解決
Rubyでは、必要に応じてアレイが自動的に成長します。したがって、次の配列の初期化を変更します。
array = Array.new(arrayOfString.size**strength)
に
array = []
文字列内の各文字を列挙します。
for i in arrayOfString do
これを行う:
arrayOfString.each_char do |i|
最終結果:
#!/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"]
各_Charはruby> = 1.8.7にあります。 バックポートジェム.
所属していません StackOverflow