fjord/bowling.rb

55 lines
1.7 KiB
Ruby
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/ruby
score = ARGV[0]
scores = score.split(',')
shots = []
scores.each do |s|
if s == 'X'
shots << 10
shots << 0
else
shots << s.to_i
end
end
frames = []
shots.each_slice(2) do |s|
frames << s
end
point = 0
frames[0..7].each_with_index do |frame, index|
point += frame.sum
# ストライクかつ次もストライクの場合
point += frames[index + 2].first if frame == [10, 0] && frames[index + 1].first == 10
if frame == [10, 0] # ストライク1回のみの場合
point += frames[index + 1].sum # 次のフレームの合計値が得点となる
end
if frame.sum == 10 && frame != [10, 0] # スペアの場合
point += frames[index + 1].first # 次のフレームの一投目が得点となる
end
puts "#{index + 1}フレーム目の得点: #{point}"
end
frames[8..11].each_with_index do |frame, index| # 例外処理のためにループを分割する
point += frame.sum
if frame == [10, 0]
point += frames[index + 9].sum
print frames[index + 8]
end
if frame.sum == 10 && frame != [10, 0]
point += frames[index + 9].first
end
puts "#{index + 9}フレーム目の得点: #{point}"
end
point -= frames[10].sum if frames[10] # 計算結果から余剰加点を除外
point -= frames[11].first if frames[11] == [10, 0] # 計算結果から余剰加点を除外
print frames
puts point
# ストライクは次の「2投の合計値」が得点となる
# つまりストライクを仮に1フレーム目で取り、2フレーム目もストライクだった場合、1フレーム目の得点には3フレーム目の初回分までが加算される
# 10フレーム目の3投目だけはスペアの加算対象としてはならない