2012-05-01 2 views
0

안녕하세요, 숫자가있는 배열이 있습니다.루비 코드의 루프 문제

이제 배열의 17 번째 위치에서 값을 배열의 첫 번째 위치의 값으로 나누고 18 번째를 두 번째로 나누는 식으로 나누고 싶습니다. 결과는 새로운 배열을 만들어야합니다.

그런 다음 새 배열의 모든 값을 검색하고 두 개 이상의 연속 값이 1.2보다 큰 경우 첫 번째 값을 연속 값의 마지막 값으로 나눈 값을 더하고 싶습니다. 한 값이 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