0

挑戦の準備をするために、ルビーに関する「簡単な」質問の束を解こうとしています。しかし、それらは私にとって非常に簡単ではありません:P.

問題の状態 -- >

# Write a function, `nearest_larger(arr, i)` which takes an array and an
# index.  The function should return another index, `j`: this should
# satisfy:
#
# (a) `arr[i] < arr[j]`, AND
# (b) there is no `j2` closer to `i` than `j` where `arr[i] < arr[j]`.
#

答えの年は見たくないので、これまでの知識をつぎのコードに注ぎ込みました --

def nearest_larger(arr, i)
  j = 0
  k = i+1 
  larger_hash = {}

    while j < i 
        larger_hash[arr[j]] = j if arr[i] < arr[j]
        j +=1
    end

    while k < (arr.count - 1) do 
        larger_hash[arr[k]] = k if arr[i] < arr[k]
        k+=1
    end

    max_value = larger_hash.keys.max 


end

nearest_larger([3, 5, 6, 14, 20, 18], 2)

この質問に答える美しく簡単な方法があると確信していますが、残念ながら、私のソリューションが NoMethodError を吐き出す理由はわかりません。

どんな助けでも大歓迎です

4

2 に答える 2

0

あなたの質問は上記で回答されています。以下に提案するような、Ruby の表現力をより有効に活用する別の方法でメソッドを作成することを検討することをお勧めします。これはあなたの質問に答えないので、上記のコメントに移動することを検討しましたが、コメントは実際には複数行のコードを対象とするものではなく、コメント内で複数行のコードを適切にフォーマットすることはできません.

def nearest_larger(arr, i)
  # maybe check for i.abs >= arr.size
  a = arr.each_with_index.sort.map {|v , idx| v}
  j = a.index(arr[i])
  return arr.index(a[j+1]) if j+1 < arr.size
  nil    
end
于 2013-08-29T19:29:26.667 に答える