On Sat, 01 Apr 2006 02:03:13 GMT, "Dave Burt" <dave / burt.id.au> wrote:

Crap, I knew I should have fully tested my code.

<snip>

>> if input%4 == 0 || input%400 == 0 && input%100 != 0
>
>Here's the mistake.
>
>1984 and 2004 are leap years. OK.
>1800 and 1900 are not leap years. Not OK - this program lists them as leap 
>years.
>1600 and 2000 are leap years. OK.
>
>In case this info helps, && binds more closely than ||, so what you've got 
>is the same as:
>
>if input%4 == 0 || (input%400 == 0 && input%100 != 0)
>
>You should be able to rearrange it to give the correct result for the 1984, 
>2004, 1800, 1900, 1600 and 2000.

Yep.

if input%100 != 0 && input%4 == 0 || input%400 == 0


Fix:

-------------------------------------------------------------------------------
puts 'Please enter the starting year'
input = gets.chomp
puts 'Please enter the ending year'
input2 = gets.chomp
puts 
puts 'The following are leap years:'

input = input.to_i

while input <= input2.to_i
		 if input%100 != 0 && input%4 == 0 || input%400 == 0
			puts input.to_s
		end
	input = input + 1
end
-------------------------------------------------------------------------------


1 line shorter at the expense of readability and performance:

-------------------------------------------------------------------------------
puts 'Please enter the starting year'
input = gets.chomp
puts 'Please enter the ending year'
input2 = gets.chomp
puts
puts 'The following are leap years:'

while input.to_i <= input2.to_i
    if input.to_i%100 != 0 && input.to_i%4 == 0 || input.to_i%400 == 0
	puts input.to_s
    end
input = input.to_i + 1
end
-------------------------------------------------------------------------------

I actually did a little benchmark calculating all the leap years for
the next 100 million years (with output going to nul).

Results: 

13:26 minutes for the first one.
14:56 minutes for the second one.

The shorter code was 11.16% slower.