Re: Unique List

• To: mathgroup at CHRISTENSEN.CYBERNETICS.NET
• Subject: [mg370] Re: [mg358] Unique List
• From: Dana_Scott at POP.CS.CMU.EDU
• Date: Tue, 27 Dec 94 19:29:31 EST

```Robert B. Love on Mon, 26 Dec 94, in [mg358] Unique List asked:

OK, time for a little fun.  I can generate a list of random
integers as Table[Random[Integer,{1,42}],{6}] and I get a list
6 elements long containing the integers from 1 to 42.  But how
do I make sure no elements are repeated?

Since the numbers in question are so small, a recursive solution seems
effective enough.  Here "recursive" means "keep trying Random until
you get a new integer."

In[30]:=
New[n_][s_] := If[Not[MemberQ[s, #]], Append[s,#],
New[n][s]]&[Random[Integer,{1,42}]]

In[34]:=
Nest[New[42], {}, 6]
Out[34]=
{2, 33, 5, 27, 24, 37}

Pushing our luck a little, we find:

In[33]:=
Nest[New[42], Range[15], 6]
Out[33]=
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
25, 29, 36, 20, 34, 18}

So, this seems to be a satisfactory solution.  BUT, it occurred to me
that choosing a unique list out of Range[52] is a DEAL OF CARDS.  Here
is a random deal of 6 cards to 4 players sorted by suit and value:

In[41]:=
(Sort /@ Partition[1+{Quotient[#,13],Mod[#,13]}& /@
Nest[New[52], {}, 24],6]) // TableForm
Out[41]//TableForm=
1    2   2   2    3    4
10   6   9   13   4    1

2    3   3   3    3    4
2    1   6   11   13   3

1    1   2   3    4    4
2    8   1   8    2    4

1    1   1   2    3    3
5    6   9   12   7    12