Я делал ката на CodeWars , сводка которого состоит в том, чтобы взять число и вернуть "Jumping!!"
, если цифры находятся в пределах 1 друг от друга (например, 2345
, 4323
, 7898
) и "Not!!"
в противном случае. Все однозначные числа (например, 5
, 7
, 9
) являются прыгающими числами.
Это одно из лучших решений:
def jumping_number(n)
n.to_s.chars.map(&:to_i).each_cons(2).all? { |x, y| (x - y).abs == 1 } ? "Jumping!!" : "Not!!"
end
Это мой собственный код:
def jumping_number(n)
n.to_s.chars.map(&:to_i).each_cons(2) { |x, y| return "Not!!" if (x - y).abs != 1 }
return "Jumping!!"
end
Я не понимаю, как работает each_con
[sic]. Как условие этих методов (правильно) может вернуть true
, если n
- это одна цифра? Последовательность - это либо nil
, либо 0
, которая при использовании в вычислениях не должна возвращать true
, и все же она возвращает.