This one is stumping me because of all the variables needed. Only thing

taught before this challenge was basic branches and loops. This is what

I have so far.

puts ‘Leap Year Calculator’

puts ’ ’

puts ‘Enter the starting year.’

starting_year = gets.chomp

puts ‘Enter the ending year.’

ending_year = gets.chomp

while true

if starting_year % 400 ||starting_year % 4

leap_year = starting_year

elsif starting_year % 100

leap_year = starting_year + 4

else

# need something to check until it reaches / by 4 or 400, adding one

each time maybe.

end

while leap_year.to_i < ending_year.to_i

puts leap_year

leap_year = leap_year.to_i + 4

end

break

end

Works okay if I put a leap year, or one dividable by 100. But I’m not

sure how to do this when I enter a number not dividable by 100, 4, or

400 (Where I have the comment is where I think the code needs to go.)

Also what I’m using is all the book has gone over so far so please,

nothing not using what I’m using. Thanks in advance.

On Thu, Mar 28, 2013 at 1:17 PM, Phil H. [email protected] wrote:

The rest doesn’t work at all because if you put something like 2096-2104

you would print out 2096, 2100 which is incorrect in two ways

- 2100 isn’t a leap year
- 2104 should be printed and your second while clause precludes that

You shouldn’t be worrying about the starting year as much as you are -

you

need to handle every leap year in the same fashion

So lets try something like this

leap_year = starting_year + starting_year % 4 #set yourself onto a

possible

leap year to start with

while leap_year <= ending_year

if (leap_year % 100) != 0 || (leap_year % 400) == 0

puts leap_year

end

leap_year = leap_year + 4

end

And if for some reason you have a problem with the or statement (“||”)

you

can use this instead

if (leap_year % 100) != 0

puts leap_year

elsif (leap_year % 400) == 0

puts leap_year

end

John

I’m a bit depressed that worked so easily

I just could not come to that simple conclusion. Yes we did learn about

OR, AND, and one other that escapes me. I though about that as well.

Also setting the leap year ,it wouldn’t work unless I implicitly set it

to an integer. So my final code is:

puts ‘Leap Year Calculator’

puts ’ ’

puts ‘Enter the starting year.’

starting_year = gets.chomp

puts ‘Enter the ending year.’

ending_year = gets.chomp

leap_year = starting_year.to_i + starting_year.to_i % 4

while leap_year.to_i <= ending_year.to_i

if (leap_year % 100) != 0 || (leap_year % 400) == 0

puts leap_year

end

leap_year = leap_year.to_i + 4

end

Sobering

Am 28.03.2013 21:48, schrieb John W Higgins:

```
puts ' '
```

- 2104 should be printed and your second while clause precludes that

You shouldn’t be worrying about the starting year as much as you are -

you need to handle every leap year in the same fashion

So lets try something like this

leap_year = starting_year + starting_year % 4 #set yourself onto a

possible leap year to start with

does not work:

(1…12).each {|year| puts year + year % 4 }

2

4

6

4

6

8

10

8

10

12

14

12

puts “start year”

year01 = gets.chomp.to_i

puts “end year”

year02 = gets.chomp.to_i

for num in (year01…year02)

if num % 4 == 0

puts num

elsif num % 100 == 0

elsif num % 400 == 0

puts num

end

end

I like Deep Dan’s solution, it is more elegant, but if you are starting

out in ruby and have got to this post from ‘learn to program’ following

Phil H’s example to the end is probably more instructive. My noob final

code is

puts “please enter your start year”

start_year = gets.chomp.to_i

puts “please enter you ending year”

end_year = gets.chomp.to_i

leap_year = start_year - start_year % 4

leap_year = leap_year + 4 unless start_year == leap_year

while leap_year <= end_year

if (leap_year % 100) != 0 || (leap_year % 400) == 0

puts leap_year

end

leap_year = leap_year + 4

end

def leap_year?(year)

(year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)

end

On Thu, Mar 28, 2013 at 3:05 PM, [email protected] wrote:

what

The rest doesn’t work at all because if you put something like 2096-2104

leap_year = starting_year + starting_year % 4 #set yourself onto a

possible leap year to start with

does not work:

Absolutely correct - stupid line by me

How about

sy = starting_year.to_i

then either of

leap_year = sy - sy % 4

leap_year = leap_year + 4 unless sy == leap_year

or a single line overly cute option

leap_year = sy - sy % 4 + 4 * (sy % 4 <=> 0) # I can’t think of another

way

to get the signum function in ruby

John

I solved it!

#################################################################

puts ‘Write the starting year’

startYear = gets.to_i

puts ‘Write the ending year’

endYear = gets.to_i

while startYear <= endYear

if ((startYear % 4 == 0) && (startYear % 100 != 0)) || (startYear %

400 == 0)

puts startYear.to_s

end

startYear = startYear + 1

end