ボウリングのスコア計算プログラム完成2

This commit is contained in:
Rikuoh Tsujitani 2024-03-20 13:22:12 +09:00
parent 1d5aeac6fd
commit 2fa39190d1
Signed by: riq0h
GPG key ID: 010F09DEA298C717
2 changed files with 17 additions and 23 deletions

View file

@ -13,34 +13,19 @@ scores.each do |s|
end
end
frames = []
shots.each_slice(2) do |s|
frames << s
end
frames = shots.each_slice(2).to_a
point = 0
strike = [10, 0]
frames[0..9].each_with_index do |frame, index| # 条件分岐を要するフレームの加点処理
frames[0..8].each_with_index do |frame, index|
point += frame.sum
# 連続ストライクの場合、2つ先のフレームの1投目も得点となる
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 # 次のフレームの1投目が得点となる
end
point += frames[index + 2].first if frame == strike && frames[index + 1] == strike
point += frames[index + 1].sum if frame == strike
point += frames[index + 1].first if frame.sum == 10 && frame != strike
end
frames[10, 11].each do |frame| # 条件分岐を要しないフレームの加点処理
point += frame.sum
end
frames[9..11].map { |frame| point += frame.sum } # 条件分岐を要しない加点処理
point -= frames[10].sum if frames[10] # 計算結果から余剰加点を除外
if frames[11].nil? # 3投目が存在しなかった場合は得点を表示して終了
puts point
elsif frames[11] == [10, 0] || frames[9] == [10, 0]
point -= frames[11].first # 計算結果から余剰加点を除外して得点表示
puts point
end
puts point

9
testbowl.sh Executable file
View file

@ -0,0 +1,9 @@
#!/bin/bash
./bowling.rb 6,3,9,0,0,3,8,2,7,3,X,9,1,8,0,X,6,4,5
./bowling.rb 6,3,9,0,0,3,8,2,7,3,X,9,1,8,0,X,X,X,X
./bowling.rb 0,10,1,5,0,0,0,0,X,X,X,5,1,8,1,0,4
./bowling.rb 6,3,9,0,0,3,8,2,7,3,X,9,1,8,0,X,X,0,0
./bowling.rb 6,3,9,0,0,3,8,2,7,3,X,9,1,8,0,X,X,1,8
./bowling.rb X,X,X,X,X,X,X,X,X,X,X,X
./bowling.rb X,X,X,X,X,X,X,X,X,X,X,2
./bowling.rb X,0,0,X,0,0,X,0,0,X,0,0,X,0,0