2017-04-22 7 views
0

を働いていない「Xでカウント」:Codewars運動私はこの演習を行うにはtryngてる

(X)の倍数で長さ (N)のリストを返します二つの引数を持つ関数を作成します。 。

(パイソン、ハスケルまたはエリキシルまたはリスト)アレイとして0

リターン結果より 正の数が大きくなるカウントする所定数と回数の両方を仮定する。

例:

count_by(1,10) #should return [1,2,3,4,5,6,7,8,9,10] 
count_by(2,5) #should return [2,4,6,8,10] 

言うことは非常に簡単、何もありません。しかし、なぜ私のコードが動作していないのか分かりません。 私は新しいコードや解決策を教えてはいけません。私はなぜ私が働かないのかを理解したいと思います。

私のソリューション:

def count_by(x, n) 
    arrays = [] 
    arrays.push(x) 
    valore_x = x 

    unless arrays.count == n 
    arrays.push(x + valore_x) 
    x += valore_x 
    end 

    return arrays 
end 

count_by(3, 5) 

ERRORメッセージ=

Expected: [1, 2, 3, 4, 5], instead got: [1, 2] 
✘ Expected: [2, 4, 6, 8, 10], instead got: [2, 4] 
✘ Expected: [3, 6, 9, 12, 15], instead got: [3, 6] 
✘ Expected: [50, 100, 150, 200, 250], instead got: [50, 100] 
✘ Expected: [100, 200, 300, 400, 500], instead got: [100, 200]. 

だから私のコードは、すべての数字を入れていないことのように見えます。ありがとう。

until arrays.count == n 

unless

答えて

2

変更

unless arrays.count == n 

は、ループではありません。 ifと同じですが、条件がfalseの場合にコードが実行されます。 untilwhileと似ていますが、条件がfalseのときにコードが実行されます。私は解決策の1つの以上の変異体をお勧めしますので

+0

私はちょっと混乱しています。ありがとう>。 –

+0

私は想像しました。私の喜びSir :) – Ursus

+0

_ "条件が偽であるまで実行されました" _ "条件が真になるまで_"と言わなければなりませんか? –

2

は今、あなたは、あなたの質問に答えを持って、私はそれがより多くのルビーウェイ:)

def count_by(x, y) 
    y.times.with_object([]) do |i, result| 
    result << x*(i+1) 
    end 
end 
0

ただ、いくつかの他の方法で同じ結果を達成するためだと思います。 Numeric#step使用:

x.step(by: x, to: x*y).entries 

短い未満可読:

x.step(x*y, x).entries 

または範囲を使用して、Range#stepと:例の各々において

(x..x*y).step(x).entries 

entriesto_a

1
に置き換えることができます

Array::new缶ここで使用してください。

def count_by(x, n) 
    Array.new(n) { |i| x*(i+1) } 
end 

count_by(1,5) #=> [1, 2, 3, 4, 5] 
count_by(2,5) #=> [2, 4, 6, 8, 10] 
count_by(3,5) #=> [3, 6, 9, 12, 15] 
count_by(50,5) #=> [50, 100, 150, 200, 250] 
count_by(100,5) #=> [100, 200, 300, 400, 500] 
count_by(0,5) #=> [0, 0, 0, 0, 0] 
関連する問題