Gibt es eine einfache Möglichkeit zu bestimmen, ob ein Jahr ein Schaltjahr ist?Einfache Weise, Schaltjahr im Rubin zu bestimmen?
Antwort
Try this:
is_leap_year = year % 4 == 0 && year % 100 != 0 || year % 400 == 0
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
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)
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
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
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
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
Dachte, dass dieses in der Bibliothek sein könnte, war aber nicht sicher. – MikeJ