On 4/10/06, June Kim <[EMAIL PROTECTED]> wrote:
> I am not sure if this is an improvement but I removed some duplication with:
>
> andbonus=: conjunction define
> (x+y)&{. ; (x)&}.
> )
>

oops.

andbonus=: conjunction define
(m+n)&{. ; (m)&}.
)

I sometimes forget it.

> openr=:2 andbonus 0   NB. ie. two shots and no bonus shot
> sparer=:2 andbonus 1
> striker=:1 andbonus 2
>
>

I know that I am going out too far but just out of curiosity,

open=: openr scored
spare=: sparer scored
strike=: striker scored
chooser=: [EMAIL PROTECTED]([EMAIL PROTECTED])

in order to remove the duplication of "scored", instead of just
inlining three times into chooser, what could be done?


>
> On 4/10/06, June Kim <[EMAIL PROTECTED]> wrote:
> > An iterative approach:
> >
> > scored=: adverb define
> > :
> > pscr=. x NB. previous scores
> > 'scr rest'=. u y
> > (pscr, +/scr);rest
> > )
> >
> > openr=: 2&{. ; 2&}.
> > open=: openr scored
> > assert (22 3;3 4 5) -: 22 open 1 2 3 4 5
> >
> > sparer=: (2+1)&{. ; 2&}.
> > spare=: sparer scored
> > assert (22 15;5 4 3) -: 22 spare 3 7 5 4 3
> >
> > striker=: (1+2)&{. ; 1&}.
> > strike=: striker scored
> > assert (22 19;5 4 3 2) -: 22 strike 10 5 4 3 2
> >
> > rind=: 13 : '>:* 10-~ +/2{.y' NB. 0 open, 1 spare, 2 strike
> > assert 0-: rind 2 3 4 5
> > assert 1-: rind 2 8 1 2
> > assert 2-: rind 10 2 3 4
> >
> > chooser=: [EMAIL PROTECTED]([EMAIL PROTECTED])
> > assert (22 20;7 3 4 5)-: 22 chooser 10 7 3 4 5
> > assert (22 13;3 4 5)-: 22 chooser 3 7 3 4 5
> > assert (22 3; 3 4 5)-: 22 chooser 1 2 3 4 5
> >
> > doframe=: (chooser&>)/
> > assert (3 7 9;'') -: doframe^:3 '';1 2 3 4 5 4
> > assert (20 12 7 5;'') -: doframe^:4 '';10 3 7 2 5 4 1
> >
> > upto10frames=: 10 > [: # [: > {.
> > game=: 13 : '+/ > {. doframe^:upto10frames^:_ '''';y'
> >
> > 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-:game empty_case
> > assert 90-:game open_case
> > assert 145-:game spare_case
> > assert 300-:game strike_case
> > assert 200-:game alt_case
> > assert 30-:game none_and_spare_case
> >
> >
> > Any comments for improvement?
> >
> > On 3/27/06, Henry Rich <[EMAIL PROTECTED]> wrote:
> > > 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
> > >
> >
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to