[Date Index]
[Thread Index]
[Author Index]
Re: Ten chess-players...
*To*: mathgroup at smc.vnet.net
*Subject*: [mg99315] Re: [mg99269] Ten chess-players...
*From*: Leonid Shifrin <lshifr at gmail.com>
*Date*: Sat, 2 May 2009 06:01:44 -0400 (EDT)
*References*: <36a5dba2-11b9-45df-84c3-9e712e47fec9@q33g2000pra.googlegroups.com>
Hi,
If I understand correctly, you would like to find some player arrangement
such that each player plays each day exactly once, and at the end,
each player plays with all the others. While I don't know the general way
to efficiently produce all such solutions, this code seems to get some
particular one in about a second or less on the average on my PC. It is
rather ad hoc in the way it looks for a solution - perhaps there are faster
and more systematic and elegant ways but I did not figure them out.
In[1] =
getSolution[numOfPlayers_?EvenQ] :=
Module[{pairs, incompatible, pickRandom, dayGames, result},
pairs = Select[Tuples[Range[numOfPlayers], 2], Less @@ # &];
incompatible =
Sort /@ Flatten[Thread[{#, Range[numOfPlayers]}] & /@ #, 1] &;
pickRandom = If[Length[#] == 0, Throw[$Failed], RandomChoice[#]] &;
dayGames[pairs_] :=
Reap[Nest[Complement[#,
incompatible@Sow@pickRandom[#]] &, pairs, numOfPlayers/2]][[2, 1]];
While[(result = Catch@Reap@Nest[Complement[#,
Sow@dayGames[#]]&, pairs, numOfPlayers - 1]) === $Failed];
Sort[Sort /@ result[[2, 1]]]];
In[2] = getSolution[10] // Timing
Out[2] =
{0.29,
{{{1,2},{3,6},{4,10},{5,7},{8,9}},
{{1,3},{2,9},{4,5},{6,10},{7,8}},
{{1,4},{2,6},{3,10},{5,8},{7,9}},
{{1,5},{2,10},{3,9},{4,7},{6,8}},
{{1,6},{2,5},{3,8},{4,9},{7,10}},
{{1,7},{2,3},{4,8},{5,10},{6,9}},
{{1,8},{2,7},{3,4},{5,6},{9,10}},
{{1,9},{2,4},{3,5},{6,7},{8,10}},
{{1,10},{2,8},{3,7},{4,6},{5,9}}}}
For larger number of players it admittedly takes longer and longer
to get a result. What I also don't know is whether or not all different
solutions are only different up to relabeling the players, or there are
some "topologically nonequivalent" ones.
Regards,
Leonid
On Fri, May 1, 2009 at 2:24 AM, Dr. Bruno Campanini <cmpbrn at gmail.com>wrote:
> Given 10 (1 to 10) chess-players, in one day they play 5 games (1-2,
> 6-10, 5-7, 4-8, 3-9).
> Then they need 8 more days to complete the championship (one gamer
> must play one time against any other player):
> 1-3, 2-10, 6-7, 5-8, 4-9
> 1-4, 2-3, 7-10, 6-8, 5-9
> 1-5, 2-4, 3-10, 7-8, 6-9
> 1-6, 2-5, 3-4, 7-9, 8-10
> 1-7, 2-6, 3-5, 4-10, 8-9
> 1-8, 2-7, 3-6, 4-5, 9-10
> 1-9, 2-8, 3-7, 4-6, 5-10
> 1-10, 2-9, 3-8, 4-7, 5-6
>
> How can I get the 10*(10-1)/2 = 45 pairs distributed in the 9x5 matrix?
> What's about any other even number of players?
>
> I do know how to get the matrix with a simple Visual Basic routine
> (some 30 lines of code).
> I was wondering if there is a shorter Mathematica simple formula
> for the same job.
>
> Bruno
>
>
Prev by Date:
**Re: mathematica newbie trouble**
Next by Date:
**Re: Re: New Wolfram Tutorial Collection documentation is ready**
Previous by thread:
**Re: Ten chess-players...**
Next by thread:
**Re: Ten chess-players...**
| |