Use boolean chain

Leap
Leap in Crystal
module Year
  def self.leap?(year : Number) : Bool
    year.divisible_by?(4) && (year.divisible_by?(400) || !year.divisible_by?(100))
  end
end

The method takes a Number as an argument and returns a Bool. This method first checks if the number is divisible by 4 using the divisible_by? method. If the number is divisible by 4 it returns true otherwise false.

Then we repeat the divisible_by? method call with with 400 and 100. But the result when dividing by 100 is inverted using the ! operator. Finally, we evaluate the result of the division by 400 using the || operator, the logical OR operator. If one of the two is true the result is true.

After those checks, the two resulting Boolean values are combined with the && operator, the logical AND operator. If both are true the result is true, otherwise false. Then the result is returned.

This solution is also possible to be solved using the % (modulus) operator, but as we are only interested in knowing if a number is divisible by another number, the divisible_by? method is more exemplar.

13th Nov 2024 · Found it useful?