2009-10-14 7 views

Respuesta

5

Prueba esto:

is_leap_year = year % 4 == 0 && year % 100 != 0 || year % 400 == 0 
7

Para su comprensión:

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 
2
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) 
3

Aquí es mi respuesta para el problema exercism.io el que hace la misma pregunta. Se le dice explícitamente que ignore cualquier función de biblioteca estándar que pueda implementarlo 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 
+0

Nota: Dije que es para http://exercism.io, que le pide que implemente la lógica usted mismo como un ejercicio de codificación. – MattC

0

Esto se 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: Aprende a Programa por Chris Pine

0

El uso de la menor cantidad posible de comparaciones, se puede hacer esto:

  • Primera/Mayor versión
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 
  • Shorter versión

Podemos hacer la misma comprobación mediante cortocircuito o (||):

Pensamiento
def leap_year?(year) 
    year % 400 == 0 || (year % 4 == 0 && year % 100 != 0) 
end 
Cuestiones relacionadas