[ create a new paste ] login | about

Link: http://codepad.org/sBeR9m1V    [ raw code | fork ]

Ruby, pasted on Apr 9:
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


Output:
No errors or program output.


Create a new paste based on this one


Comments: