pick=: 1 + (56 ?~ 5:) , (46 ?~ 1:)
pick=: 1 + (5 ? 56"0) , ?@(46"0)



----- Original Message -----
From: Roger Hui <[email protected]>
Date: Saturday, August 1, 2009 21:18
Subject: Re: [Jprogramming] Picking lottery tickets
To: Programming forum <[email protected]>

> 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
> 
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to