2009-10-14 14 views

Odpowiedz

5

Spróbuj tego:

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

za wyrozumiałość:

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 

To może być zapisany jako:

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

Oto moja odpowiedź na problem exercism.io który prosi samo pytanie. Mówi się wam wyraźnie, aby zignorować wszelkie standardowe funkcje biblioteki, które mogą je wdrożyć w ramach ćwiczenia.

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

Uwaga Powiedziałem, że jest to http://exercism.io, który prosi o wdrożenie logiki jako ćwiczenia kodującego. – MattC

0

Ten jeden zajmuje gama:

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

Źródło: nauczyć się programu Chris Pine

0

Korzystanie z najmniejszą możliwą porównań kwotę, można to zrobić:

  • Pierwsza/dłuższa wersja
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 
  • Krótsza wersja

Możemy zrobić to samo sprawdzanie za pomocą zwarcia lub (||):

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