Skip to content

Instantly share code, notes, and snippets.

@domgetter
Created December 16, 2015 18:39
Show Gist options
  • Save domgetter/ab1dc84cb030dbdfcd04 to your computer and use it in GitHub Desktop.
Save domgetter/ab1dc84cb030dbdfcd04 to your computer and use it in GitHub Desktop.
frames = [
[10],
[2,2],
[10],
[10],
[0,2],
[5,5],
[5,5],
[0,0],
[0,0],
[0,0]
]
def bonus(frames)
# let {frame: frames.first,
# strike: -> frame {frame[0] == 10},
# spare: -> frame {frame.reduce(:+) == 10 && frame.first != 10},
# next_two_rolls: -> {frames.drop(1).flatten.take(2).reduce(:+)},
# next_roll: -> {frames.drop(1).flatten.take(1).reduce(:+)}} do
#
# case frame
# when strike
# next_two_rolls[]
# when spare
# next_roll[]
# else
# 0
# end
#
# end
frame = frames.first
strike = -> frame {frame[0] == 10}
spare = -> frame {frame.reduce(:+) == 10 && frame.first != 10}
next_two_rolls = -> {frames.drop(1).flatten.take(2).reduce(:+)}
next_roll = -> {frames.drop(1).flatten.take(1).reduce(:+)}
case frame
when strike
next_two_rolls[]
when spare
next_roll[]
else
0
end
end
def base_score(frame)
frame.reduce(:+)
end
def scores(frames)
frames.first(10).map.with_index do |frame, index|
base_score(frame) + bonus(frames.drop(index).take(3))
end
end
puts frames.inspect
puts scores(frames).inspect
puts scores(frames).reduce(:+)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment