Created
July 23, 2012 11:10
-
-
Save dancardella/3163121 to your computer and use it in GitHub Desktop.
bowling_scores
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'test/unit' | |
def score(*frame) | |
@scores = [] | |
# Calculations based upon earlier frame outcome [see below] | |
frame.length.times do |i| | |
if @frame == "strike" | |
frame[i][1] ? @scores << 2*(frame[i][0]+frame[i][1]) : @scores << 2*frame[i][0] | |
elsif @frame == "spare" | |
frame[i][1] ? @scores << (2*frame[i][0]+frame[i][1]) : @scores << 2*frame[i][0] | |
else | |
frame[i][1] ? @scores << frame[i][0]+frame[i][1] : @scores << frame[i][0] | |
end | |
# Determines what form present frame takes in order to employ in next frame calcs | |
if frame[i][0] == 10 | |
@frame = "strike" | |
elsif frame[i][0]+frame[i][1] == 10 | |
@frame = "spare" | |
else @frame = "off" | |
end | |
# Consecutive Strikes Calc | |
if frame[i-1][0] == 10 && frame[i-2][0] == 10 && i> 1 | |
@scores << frame[i][0] | |
else | |
end | |
# Checks for last frame and adds in if present | |
if frame[i][2] | |
@scores << frame[i][2] | |
end | |
end | |
total = @scores.flatten.inject {|sum, roll| sum+roll} | |
return total | |
end | |
class BowlingTest < Test::Unit::TestCase | |
def test_1 | |
assert_equal 9, score([5, 4]) | |
end | |
def test_2 | |
assert_equal 10, score([5, 4], [1, 0]) | |
end | |
def test_spare | |
assert_equal 25, score([5, 5], [6, 3]) | |
end | |
def test_strike | |
assert_equal 28, score([10], [6, 3]) | |
end | |
# | |
def test_double_strike | |
assert_equal 60, score([3, 3], [10], [10], [6, 3]) | |
end | |
# | |
def test_max_rolls | |
assert_equal 30, score(*(1..9).map{[0,0]}+[[10,10,10]]) | |
end | |
def test_almost_perfect | |
assert_equal 279, score(*(1..9).map{[10]}+[[9,1,10]]) | |
end | |
def test_perfect | |
assert_equal 300, score(*(1..9).map{[10]}+[[10,10,10]]) | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment