pick=: (56 ?~ 5:) ,&:>: (46 ?~ 1:)


----- Original Message -----
From: Henry Rich <[email protected]>
Date: Saturday, August 1, 2009 19:49
Subject: Re: [Jprogramming] Picking lottery tickets
To: Programming forum <[email protected]>

> Does this suffice?
> 
>     pick =: [: >: (56 ?~ 5:) , (46 ?~ 1:)
>     pick"0 i. 6
>   7 51 48 55 36 19
> 15 16 24 38 51  6
> 55 47 34  4 29 30
> 54  1 53 29 30 42
> 45 15 38 46 39 16
> 25 32  2 51 22  4
> 
> Henry Rich
> 
> John Randall wrote:
> > The Mega Millions lottery requires picking 5 distinct numbers 
> in the
> > range 1-56 and one number in the range 1-46.  The verb 
> pick below
> > randomly chooses a lottery ticket, and uses verb ci from
> > 
> > http://www.jsoftware.com/jwiki/Essays/Combination Index
> > 
> > ci=: 4 : 0 " 1 0
> >  'm n'=. x: x
> >  z=. 0$q=. n
> >  for_p. (-i.)m do.
> >   k=. (p,q) lead y
> >   y=. y-(p!q)-p!q-k
> >   q=. q-1+k
> >   z=. z,k
> >  end.
> >  z + (i.#z) + |.!.'' +/\z
> > )
> > 
> > lead=: 4 : 0
> >  'm n'=. x: x
> >  a=. m!n
> >  p=. n-1
> >  q=. m-1
> >  while. p>:q do.
> >   j=. q+<.-:p-q
> >   s=. (a - m!j) - y
> >   if.     0 > s do. p=. j-1
> >   elseif. 0 < s do. q=. j+1
> >   elseif. 1     do. n-j return. end.
> >  end.
> >  (n-1)-p
> > )
> > 
> > pick=:3 : '>:(5 56 ci ?5!56),?46'
> > 
> >    pick"0 i.5
> >  9 26 30 38 42 30
> > 12 23 29 48 52 24
> > 11 18 21 25 30  9
> >  1  5 14 19 43 12
> > 15 25 35 42 48  6
> > 
> > I can also do it less elegantly but from first principles as
> > 
> > pick2=:3 : 0
> > a=.0$0
> > while. 5>#a do. a=.~. a, ?56 end.
> >> :(/:~ a),?46
> > )
> > 
> >    pick2"0 i.5
> >  2 32 40 45 48  1
> >  7 28 29 35 54 11
> >  1 26 31 41 55  3
> >  3 11 29 41 43 32
> > 12 20 24 27 41  9
> > 
> > Is there a better way to do it?  I can't seem to make 
> pick tacit, and
> > pick2 seems clumsy.
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to