A different approach:
NB. Index of each ball that starts a frame
framex =: 10 {. 0 {~^:a:~ _1 _1 ,~ [EMAIL PROTECTED] > :@:+ 10&~:
NB. Score for each ball, assuming that ball starts a frame
scoreifframe =: 3 +^:(9<])`+/@|.\ ,&0
NB. Pick the balls that actually start frames & add em up
gamescore =: [: +/ framex { scoreifframe
Henry Rich
>
> empty_case=: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
> open_case=: 9 0 8 1 7 2 6 3 5 4 4 5 3 6 2 7 8 1 0 9
> spare_case=: 9 1 8 2 7 3 6 4 5 5 4 6 3 7 2 8 1 9 8 2 1
> strike_case=: 10 10 10 10 10 10 10 10 10 10 10 10
> alt_case=: 9 1 10 8 2 10 7 3 10 6 4 10 5 5 10 4 6
> none_and_spare_case=:0 10 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
>
>
>
> assert 0=+/scores empty_case
> assert 90=+/scores open_case
> assert 145=+/scores spare_case
> assert 300=+/scores strike_case
> assert 200=+/scores alt_case
> assert 30=+/scores none_and_spare_case
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm