[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Re: [SOLUTION][QUIZ] FizzBuzz (#126

jwmerrill@gmail.com

6/6/2007 5:07:00 AM

If I wanted to show them how eXtreme I was, I would start by writing
some tests:

-----
# fizzbuzz_test.rb

require 'spec'
require 'fizzbuzz'

describe :fizzbuzz do
# This is just so we can read the results of all those 'puts'
before do
@output = StringIO.new()
$stdout = @output
fizzbuzz()
@output.rewind
@lines = @output.readlines.map {|str| str.chop}
end

after do
$stdout = STDOUT
end

it "should print 1 as the first line" do
@lines[0].to_i.should == 1
end

end
-----

Then we make it pass

-----
# fizzbuzz.rb

def fizzbuzz()
puts 1
end

if __FILE__ == $0
fizzbuzz()
end
-----

Add another test

-----
# fizzbuzz_test.rb

it "should have 100 lines" do
@lines.size.should == 100
end
-----

Make it pass

-----
# fizzbuzz.rb

def fizzbuzz()
(1..100).each do |num|
puts num
end
end
-----

Keep the rhythm going

-----
# fizzbuzz_test.rb

it "should print 'Fizz' as the third line" do
@lines[2].should == 'Fizz'
end
-----
# fizzbuzz.rb

def fizzbuzz()
(1..100).each do |num|
if num % 3 == 0
puts 'Fizz'
else
puts num
end
end
end
-----
# fizzbuzz_test.rb

it "should print 'Buzz' as the fifth line" do
@lines[4].should == 'Buzz'
end
-----
# fizzbuzz.rb

def fizzbuzz()
if num % 3 == 0
puts 'Fizz'
elsif num % 5 == 0
puts 'Buzz'
else
puts num
end
end
end
-----
# fizzbuzz_test.rb

it "should print 'FizzBuzz' as the fifteenth line" do
@lines[14].should == 'FizzBuzz'
end
-----
# fizzbuzz.rb

def fizzbuzz()
(1..100).each do |num|
if num % 15 == 0
puts 'FizzBuzz'
elsif num % 3 == 0
puts 'Fizz'
elsif num % 5 == 0
puts 'Buzz'
else
puts num
end
end
end
-----

And one more for good measure:

-----
# fizzbuzz_test.rb

it "should print 'Buzz' as the last line" do
@lines.last.should == 'Buzz'
end
-----

The final results are

-----
# fizzbuzz.rb

def fizzbuzz()
(1..100).each do |num|
if num % 15 == 0
puts 'FizzBuzz'
elsif num % 3 == 0
puts 'Fizz'
elsif num % 5 == 0
puts 'Buzz'
else
puts num
end
end
end

if __FILE__ == $0
fizzbuzz()
end
-----
# fizzbuzz_test.rb

require 'spec'
require 'fizzbuzz'

describe :fizzbuzz do
# This is just so we can read the results of all those 'puts'
before do
@output = StringIO.new()
$stdout = @output
fizzbuzz()
@output.rewind
@lines = @output.readlines.map {|str| str.chomp}
end

after do
$stdout = STDOUT
end

it "should print 1 as the first line" do
@lines[0].to_i.should == 1
end

it "should print 100 lines" do
@lines.size.should == 100
end

it "should print 'Fizz' as the third line" do
@lines[2].should == 'Fizz'
end

it "should print 'Buzz' as the fifth line" do
@lines[4].should == 'Buzz'
end

it "should print 'FizzBuzz' as the fifteenth line" do
@lines[14].should == 'FizzBuzz'
end

it "should print 'Buzz' as the last line" do
@lines.last.should == 'Buzz'
end

end
-----

Now before pulling such a stunt, I might ask plainly if they were
looking for a trivial solution to a trivial problem, in which case I
would immediately write down the final answer, or if they wanted me to
suspend disbelief and imagine this is a part of a large and important
system rather than a one off game, in which case I might do the
previous. After all, who wants to work for people that make you guess
what they want?

Jason Merrill