ruby - saber - ¿Una forma fácil de determinar el año bisiesto en rubí?
como saber si un año es bisiesto (8)
¿Hay una manera fácil de determinar si un año es un año bisiesto?
Usa la Date#leap?
.
now = DateTime.now
flag = Date.leap?( now.year )
p.ej
Date.leap?( 2018 ) # => false
Date.leap?( 2016 ) # => true
Aquí está mi respuesta para el problema exercism.io que hace la misma pregunta. Se le indica explícitamente que ignore cualquier función de biblioteca estándar que pueda implementarla como parte del ejercicio.
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
Este tiene un rango:
(starting..ending).each do |year|
next if year % 4 != 0
next if year % 100 == 0 && year % 400 != 0
puts year
end
Fuente: Learn to Program por Chris Pine
La variable n toma año para probarse e imprime verdadero si es un año bisiesto y falso si no lo es.
n=gets.to_i
n%4==0 ? n%100==0 ? n%400 ?(puts true):(puts false) :(puts true) :(puts false)
Para su entendimiento:
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
Esto podría ser escrito como:
def leap_year?(year)
(year % 4 == 0) && !(year % 100 == 0) || (year % 400 == 0)
end
Prueba esto:
is_leap_year = year % 4 == 0 && year % 100 != 0 || year % 400 == 0
Usando la menor cantidad posible de comparaciones, puedes hacer esto:
- Primera / versión más larga
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
- Versión más corta
Podemos hacer la misma comprobación utilizando el cortocircuito O ( ||
):
def leap_year?(year)
year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)
end
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)