> 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
John, how can it be random when the first five numbers are always in order? ;-) ----- Original Message ----- From: John Randall <[email protected]> Date: Saturday, August 1, 2009 19:21 Subject: [Jprogramming] Picking lottery tickets To: [email protected] > 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. > > Best wishes, > > John > > > ----------------------------------------------------------------- > ----- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
