ボウリングのスコア計算プログラム完成
This commit is contained in:
parent
ca480bc664
commit
9d3fe75906
2 changed files with 15 additions and 20 deletions
31
bowling.rb
31
bowling.rb
|
@ -1,4 +1,5 @@
|
||||||
#!/usr/bin/ruby
|
#!/usr/bin/ruby
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
score = ARGV[0]
|
score = ARGV[0]
|
||||||
scores = score.split(',')
|
scores = score.split(',')
|
||||||
|
@ -19,37 +20,27 @@ end
|
||||||
|
|
||||||
point = 0
|
point = 0
|
||||||
|
|
||||||
frames[0..7].each_with_index do |frame, index|
|
frames[0..9].each_with_index do |frame, index| # 条件分岐を要するフレームの加点処理
|
||||||
point += frame.sum
|
point += frame.sum
|
||||||
# ストライクかつ次もストライクの場合
|
# 連続ストライクの場合、2つ先のフレームの1投目も得点となる
|
||||||
point += frames[index + 2].first if frame == [10, 0] && frames[index + 1].first == 10
|
point += frames[index + 2].first if frame == [10, 0] && frames[index + 1].first == 10
|
||||||
if frame == [10, 0] # ストライク1回のみの場合
|
if frame == [10, 0] # ストライク1回のみの場合
|
||||||
point += frames[index + 1].sum # 次のフレームの合計値が得点となる
|
point += frames[index + 1].sum # 次のフレームの合計値が得点となる
|
||||||
end
|
end
|
||||||
if frame.sum == 10 && frame != [10, 0] # スペアの場合
|
if frame.sum == 10 && frame != [10, 0] # スペアの場合
|
||||||
point += frames[index + 1].first # 次のフレームの一投目が得点となる
|
point += frames[index + 1].first # 次のフレームの1投目が得点となる
|
||||||
end
|
end
|
||||||
puts "#{index + 1}フレーム目の得点: #{point}"
|
|
||||||
end
|
end
|
||||||
|
|
||||||
frames[8..11].each_with_index do |frame, index| # 例外処理のためにループを分割する
|
frames[10, 11].each do |frame| # 条件分岐を要しないフレームの加点処理
|
||||||
point += frame.sum
|
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
|
end
|
||||||
|
|
||||||
point -= frames[10].sum if frames[10] # 計算結果から余剰加点を除外
|
point -= frames[10].sum if frames[10] # 計算結果から余剰加点を除外
|
||||||
point -= frames[11].first if frames[11] == [10, 0] # 計算結果から余剰加点を除外
|
|
||||||
|
|
||||||
print frames
|
if frames[11].nil? # 3投目が存在しなかった場合は得点を表示して終了
|
||||||
puts point
|
puts point
|
||||||
|
elsif frames[11] == [10, 0] || frames[9] == [10, 0]
|
||||||
# ストライクは次の「2投の合計値」が得点となる!!!
|
point -= frames[11].first # 計算結果から余剰加点を除外して得点表示
|
||||||
# つまりストライクを仮に1フレーム目で取り、2フレーム目もストライクだった場合、1フレーム目の得点には3フレーム目の初回分までが加算される!!!!
|
puts point
|
||||||
# 10フレーム目の3投目だけはスペアの加算対象としてはならない!
|
end
|
||||||
|
|
4
rubocop.yml
Normal file
4
rubocop.yml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
inherit_gem:
|
||||||
|
rubocop-fjord:
|
||||||
|
- "config/rubocop.yml"
|
||||||
|
# - "config/rails.yml"
|
Loading…
Reference in a new issue