fre, 24 10 2008 kl. 23:25 +0900, skrev Matthew Moss: > -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- > > ## Bowling Scores (#181) # a simple no-frills tail-recursive implementation class Bowling def initialize playBowling(ARGV[0], ARGV[1..ARGV.length].collect { |n| n.to_i }) end def playBowling(player, pins) printf("\nFrame Roll Roll Score\n") printf("\n%s's final score: %d\n\n", player, doFrame(pins)) end def doFrame(pins, frame = 1, subtotal = 0) dSubtotal = 0 if pins.length > 0 if frame > 10 printFrame("*", pins[0], pins[1], "") pins = [] elsif pins[0] == 10 dSubtotal = + pins[0] + pins[1] + pins[2] printFrame(frame, "X", " ", subtotal + dSubtotal) pins = pins[1..pins.length] elsif pins[0] + pins[1] == 10 dSubtotal = pins[0] + pins[1] + pins[2] printFrame(frame, pins[0], "/", subtotal + dSubtotal) pins = pins[2..pins.length] else dSubtotal = pins[0] + pins[1] printFrame(frame, pins[0], pins[1], subtotal + dSubtotal) pins = pins[2..pins.length] end doFrame(pins, frame + 1, subtotal + dSubtotal) else subtotal end end def printFrame(frameNr, ball0, ball1, subtotal) printf(" %2s %s %s %3s\n", frameNr, ball0, ball1, subtotal) end end Bowling.new() if $0 == __FILE__