Есть ли простой способ определить, год ли високосный год?
Легкий способ определить високосный год в рубине?
Ответ 1
Попробуйте:
now = DateTime.now
flag = Date.leap?( now.year )
Ответ 2
Для вашего понимания:
def leap_year?(year)
if year % 4 == 0
if year % 100 == 0
if yearVar % 400 == 0
return true
end
return false
end
return true
end
false
end
Это может быть написано как:
def leap_year?(year)
(year % 4 == 0) && !(year % 100 == 0) || (year % 400 == 0)
end
Ответ 3
Попробуйте следующее:
is_leap_year = year % 4 == 0 && year % 100 != 0 || year % 400 == 0
Ответ 4
Вот мой ответ на вопрос о том, что нужно делать. Вам явно сказано игнорировать любые стандартные библиотечные функции, которые могут реализовать его как часть упражнения.
class Year
attr_reader :year
def initialize(year)
@year = year
end
def leap?
if @year.modulo(4).zero?
return true unless @year.modulo(100).zero? and not @year.modulo(400).zero?
end
false
end
end
Ответ 5
def leap_year?(num)
if num%4 == 0 && num%100 != 0
true
elsif num%400 == 0
true
elsif num%4 == 0 && num%100 == 0 && num%400 != 0
false
elsif num%4 != 0
false
end
end
puts leap_year?(2000)
Ответ 6
Этот параметр принимает диапазон:
(starting..ending).each do |year|
next if year % 4 != 0
next if year % 100 == 0 && year % 400 != 0
puts year
end
Источник: научиться программировать Крисом Пайном
Ответ 7
Используя минимальное количество сравнений, вы можете сделать это:
- Первая/более длинная версия
def leap_year?(year)
# check first if year is divisible by 400
return true if year % 400 == 0
year % 4 == 0 && year % 100 != 0
end
- Более короткая версия
Мы можем выполнить ту же проверку с использованием короткого замыкания ИЛИ (||
):
def leap_year?(year)
year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)
end