2009-10-14 7 views

Antwort

49

Versuchen:

now = DateTime.now 
flag = Date.leap?(now.year) 

Von: http://www.ruby-doc.org/stdlib/

+0

Dachte, dass dieses in der Bibliothek sein könnte, war aber nicht sicher. – MikeJ

5

Try this:

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

Für Ihr Verständnis:

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 

Dieses geschrieben werden könnte:

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

Hier ist meine Antwort auf das exercism.io Problem, das die gleiche Frage stellt. Sie werden ausdrücklich aufgefordert, alle Standardbibliotheksfunktionen zu ignorieren, die sie als Teil der Übung implementieren.

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

Hinweis Ich habe gesagt, dass es für http://exercism.io ist, wo Sie aufgefordert werden, die Logik selbst als Codierungsübung zu implementieren. – MattC

0

Dieser nimmt einen Bereich:

(starting..ending).each do |year| 
    next if year % 4 != 0 
    next if year % 100 == 0 && year % 400 != 0 
    puts year 
end 

Quelle: Learn to-Programm von Chris Pine

0

die geringste Menge an Vergleiche möglich verwenden, können Sie dies tun:

  • Erste/längere Version
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 
  • Kürzere Version

Wir können die gleiche Prüfung mit Kurzschluss tun OR (||):

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