2012-05-01 7 views
0

ちょっと私の中に数字のある配列があります。Rubyコードのループでの問題

ここでは、配列の17番目の位置の値を配列の最初の位置の値で除算し、次に18番目を2番目の位置の値などで除算したいと考えています。結果は新しい配列を構築するはずです。

次に、新しい配列のすべての値をスキャンしたいと思います.2つ以上の連続する値が1.2より大きい場合は、最初の値をその行の最後の値で除算した値をすべての値に対して加算します。 1つの値が1.2で、次の値が0.8の場合、配列の値は変更しないでください。ここで

は私のコードです:

a = [1,2,3,4,5,9,5,13,14,17,19,23,19,34,46,12,13,45,46,67,78,79] 

b = Array.new 
c = Array.new 

a.each_cons(18) { |c| b.push(c[17]/c[0] } 

あなたが条件を実装する方法のアイデアを持っていますか?

+0

アレイには常に固定数の要素がありますか? –

+1

中間結果と最終結果も送信します。 –

+0

いいえ、要素数が – jeffrey

答えて

1

私はあなたの質問からいくつかのことを選択的に解釈しましたが、これはそれを行うと思います。具体的には、「連続するすべての値の行」では、「行」はeach_consのスライディング・ブロックを参照していますか? 「すべての連続した値」については同上。

catch (:done) do 
    for i in 2..b.length do 
    b.each_cons(i) do |d| 
     for j in 2..d.length do 
     d.each_cons(j) do |g| 
      if g.all? { |g| g > 1.2 } 
      c = b.map { |f| f + (d[0].to_f/d[i-1].to_f) } 
      break 
      end 
      if !c.empty? then throw :done end 
     end 
     end 
    end 
    end 
end 

puts c