08/10/29 05:37:23
MATCH関数もどき。 返値は0を起点とする点が異なる。
直近値検索方法は>>677と同じ。
def match_liner(val, array) # >>677と同等
array[0...-1].each_index do |i|
if val <= array[i+1]
return val-array[i] <= array[i+1]-val ? i : i+1
end
end
array.size - 1
end
def match_recursive(val, array)
case array.size
when 0
nil
when 1
0
when 2
val-array[0] <= array[1]-val ? 0 : 1
else # ↑↓ 不等号に注意のこと
i = array.size / 2
val < array[i] ?
match_recursive(val,array[0..i]) : match_recursive(val,array[i..-1]) + i
end
end