質問

バリエーションを計算する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にあります。 バックポートジェム.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top