2014-01-09 2 views
0

Этот тест проходит проверки, но как?Ruby with Rspec - Как проходит этот тест?

#Rspec 
it "handles a case with an answer > 1 distance to the left" do 
    nearest_larger([8,2,4,3], 2).should == 0 
end 

#Function 
def nearest_larger(arr, idx) 
    diff = 1 

    loop do 
    left = idx - diff 
    right = idx + diff 

    if (left >= 0) && (arr[left] > arr[idx]) 
     return left 
    elsif (right < arr.length) && (arr[right] > arr[idx]) 
     return right 
    elsif (left > 0) && (right >= arr.length) 
     return nil 
    end 

    diff += 1 
    end 
end 

Я работаю над некоторыми примерами ruby, и я не могу понять, как этот тест проходит проверку. Где возвращается 0?

ответ

0

Когда idx равно 2 и diff равно 2 (то есть, на втором цикле), left является 2 - 2 = 0 и arr[0] == 8, которое больше, чем arr[2] == 4. Затем функция возвращает left, которая равна нулю.

+0

'left = idx - diff'' diff' = 1 таким образом' left' == '1' – fyz

+1

Да, отредактировал мой ответ. –

+0

Ты, мой друг, потрясающий. Спасибо. Я вижу это сейчас! +1 в комментарии. Какая техническая сцена в АЗ? Я хочу переехать туда. – fyz

Смежные вопросы