Вам нужно добавить num
к multiples
, если num
делится на 5
и 3
, а не div
.Это потому, что div = num % 3 == 0 || num % 5 == 0
это просто true
или false
, добавление div заканчивается массивом логических значений ([false, true, true, ...]
).
@your_output = div.sum
находится вне цикла, а div там не существует, это выходит за рамки.
Даже если в области, вы все равно вызываете @your_output = true.sum
(или false.sum
), получая ошибку: NoMethodError
.
Переменная div
на самом деле не требуется, используйте только его состояние.Также нет необходимости конвертировать Range
в Array
.Итак, я бы предложил этот рефакторинг:
def third_program
multiples = []
(1..999).each do |num|
multiples << num if num % 3 == 0 || num % 5 == 0
end
@your_output = multiples.sum
# render("programs_templates/third_program.html.erb")
end
p third_program #=> 233168
Это можно еще сократить:
@your_output = (1..999).select{ |n| n % 3 == 0 || n % 5 == 0 }.sum #=> 233168