codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
def score(pins) sum = 0 isAfterSpare = false isAfterStrike = false isDouble = false isAfterDouble = false isStrike = false isAfterLastFrame = false firstPin = 0 pins.each_with_index do |pin, index| # 前フレームの strike, spare 分のボーナス加算 if isAfterSpare || isAfterStrike then sum += pin end isAfter10thFrame = index >= 2 * 10 if isAfter10thFrame then # 10フレーム 3投目は、ボーナス加算 1回目のみで抜ける break; end # doubleの分のボーナス加算 if isAfterDouble then sum += pin end # 今回のフレームのピン数加算 sum += pin # spare, strike の状態処理 if index % 2 == 0 then # 各フレーム 1投目 if pin == 10 then isStrike = true isDouble = isAfterStrike else isStrike = false isDouble = false end isAfterSpare = false firstPin = pin else # 各フレーム 2投目 isAfterSpare = !isStrike && (firstPin + pin == 10) isAfterStrike = isStrike isAfterDouble = isDouble end str = index.to_s + ': pin = ' + pin.to_s + ', sum = ' + sum.to_s str += ', spare = ' + isAfterSpare.to_s str += ', strike = ' + isAfterStrike.to_s + '(' + isStrike.to_s + ')' puts str end return sum end
Private
[
?
]
Run code
Submit