Laden...

Suche von Algorithmus für das Erstellen eines Spielplans

Erstellt von soshi vor 3 Jahren Letzter Beitrag vor 3 Jahren 951 Views
S
soshi Themenstarter:in
5 Beiträge seit 2020
vor 3 Jahren
Suche von Algorithmus für das Erstellen eines Spielplans

Hallo.

Ich möchte/müsste einen Spielplan erstellen, in denen Teams gegeneinander antreten sollen. Dabei sollte wenn möglich aber keiner 2x gegen den gleichen spielen und jeder nur einmal mit demselben Partner. Die Anzahl kann aber beim nächsten mal wieder anders sein.

_
Als beispiel:
Es gibt 2 Männer und 2 Frauen, jeder Mann soll mit jeder Frau im Team gegen jeden Spielen. Also m1w1 vs m2w2, m1w2 vs m2w1._
Aktuell gibt es von jedem 7 Spieler(also 7m & 7w).

Wollte das mit C# machen(da ich hier zumindest schon Grundkenntnisse durch Unity habe), aber ein Freund meinte ich soll das über VBA in Excel machen, doch da kenn ich mich nicht mit aus.

Dachte mir man macht Eingabefelder wo man die Anzahl angibt und dann wird eine Liste mit den Teams ausgegeben.

Wie mache ich das am besten?

309 Beiträge seit 2020
vor 3 Jahren

Es gibt immer m^2 Möglichkeiten, wobei m die Anzahl der Männer z.b. ist.

m1 m2 w1 w2
1 0 1 0
1 0 0 1
0 1 1 0
0 1 0 1

m1 m2 m3 w1 w2 w3
1 0 0 1 0 0
1 0 0 0 1 0
1 0 0 0 0 1
0 1 0 1 0 0
0 1 0 0 1 0
0 1 0 0 0 1
...

Wenn ich das jetzt richtig verstanden habe.
Ist dann einfach abgrasen der Optionen, Partien speichern und damit auswählen.

S
soshi Themenstarter:in
5 Beiträge seit 2020
vor 3 Jahren

Das ist aber nur die hälfte, das zeigt nur wer mit wem spielt.
Da fehlen aber noch die gegner 😉

Achja. Es soll jeder man mit jeder Frau wenn möglich nur einmal antreten. Da man nicht gegen sich selbst spielen kann, bleiben max 6 Spiele pro person.

hier mal ein Foto des manuellen versuches falls es noch offene FRagen gibt 😉

309 Beiträge seit 2020
vor 3 Jahren

Beispiel:

m1 m2 w1 w2
1 0 1 0
1 0 0 1
0 1 1 0
0 1 0 1

==> m1 & w1 vs. m2 & w2
==> (m1 & w2 vs. m2 & w1

m1 m2 m3 w1 w2 w3
1 0 0 1 0 0
1 0 0 0 1 0
1 0 0 0 0 1
0 1 0 1 0 0
0 1 0 0 1 0
0 1 0 0 0 1
...

==> m1 & w1 vs. m2 & w2 vs. m3 & w3
==>( m1 & w2 vs. m2 & w3 vs. m3 & w1

immer nur verschieben, und das jetzt als Code

S
soshi Themenstarter:in
5 Beiträge seit 2020
vor 3 Jahren

wie kann man das automatisieren?
Denn je mehr Leute desto komplizierter wird es ja...

16.806 Beiträge seit 2008
vor 3 Jahren

Erwartest Du nun von uns, dass wir Dir das ausprogrammieren, oder magst nicht auch nen bisschen was selbst überlegen? 😉

Bist ja logischerweise nicht die erste Person, die versucht alle Kombination aus zwei Listen zu erörtern.
Google-Suche nach c# all combinations of a two lists 😉

S
soshi Themenstarter:in
5 Beiträge seit 2020
vor 3 Jahren

Ich würde es auch selber machen, habe aber keine ahnung wie ich vorgehen soll. Bei Unity ist es "einfach", da man Sachen in Bewegung bringt oä(bin noch anfänger). Hier weis ich einfach nicht wie ich das ganze umsetzen soll X(

mal schauen was ich mit deiner suche finde

16.806 Beiträge seit 2008
vor 3 Jahren

Geht ja nicht um Anfänger sein oder um Unity; geht ja darum wie man sich Informationen verschafft, die man nicht kennt 😉
JimStark hat Dich ja auf die grundlegende Vorgehensweise hingewiesen; aber ist etwas unklar, was Du für eine Antwort erwartest.
Und danach zu fragen, dass wir Dir das ausprogrammieren, ist ja nicht Sinn der Sache - daher meine Nachfrage.

S
soshi Themenstarter:in
5 Beiträge seit 2020
vor 3 Jahren

Naja, mal ganz ehrlich

"immer nur verschieben, und das jetzt als Code"

Wenn ich wüsste wie man das als code umsetzt hätte ich nicht gefragt. Ausserdem klappt das nicht so(siehe bild).

Ich erwarte auch nicht das man mir was programiert(sonst hätte ich danach gefragt).

309 Beiträge seit 2020
vor 3 Jahren

Naja, mal ganz ehrlich

"immer nur verschieben, und das jetzt als Code"

Wenn ich wüsste wie man das als code umsetzt hätte ich nicht gefragt.

Suche von Algorithmus für das Erstellen eines Spielplans, du sagtest du willst einen Algorithmus und damit geht es.

Ausserdem klappt das nicht so(siehe bild).

Was du mit dem Bild sagen willst verstehe ich immer noch nicht.

Einfachstes Beispiel:


            int mCount = 3;
            int wCount = 3;
            for(int m=1; m<=mCount; m++)
            {
                for(int w=1; w<=wCount; w++)
                {
                    Console.WriteLine($"Team: m{m} vs. w{w}");
                }

            }

Team: m1 vs. w1
Team: m1 vs. w2
Team: m1 vs. w3
Team: m2 vs. w1
Team: m2 vs. w2
Team: m2 vs. w3
Team: m3 vs. w1
Team: m3 vs. w2
Team: m3 vs. w3

Für die Partien musst du dann einfach prüfen das niemand zwei mal vorkommt.
Das ist genau das von oben.

W
955 Beiträge seit 2010
vor 3 Jahren

So einfach ist das nun auch wieder nicht, schließlich sind in einem Team zwei Leute - er muß ja die Duplikate entfernen. Das Team (m1, m2) ist identisch mit (m2, m1). Du siehst in der Liste das die Gruppen immer kleiner werden. Man muß also darüber sortieren oder einen Comparer einrichten oder mit Iteratoren oder Baumrekursion arbeiten.

309 Beiträge seit 2020
vor 3 Jahren

Ich weiß jetzt nicht ob ich zu kompiliziert oder falsch denke, aber ich kann mir doch so alle aufzählen (ohne Schleife von Abts Link). Dann füge ich alle Matches in eine Liste ein mit einer ID, und schau ob es sie schon gibt, das sollte ja dann noch das einfachste sein.


            string[] ms = new string[] { "m1", "m2", "m3"};
            string[] ws = new string[] { "w1", "w2", "w3" };

            var result = from m in ms
            from w in ws
            select new { m = m, w= w };

            foreach(var r in result)
            {

                var gegner = result.Where(c => c.m != r.m && c.w != r.w);

                foreach(var tmpGegner in gegner)
                {
                    Console.WriteLine($"{r} vs. {tmpGegner}");
                }

            }

{ m = m1, w = w1 } vs. { m = m2, w = w2 }
{ m = m1, w = w1 } vs. { m = m2, w = w3 }
{ m = m1, w = w1 } vs. { m = m3, w = w2 }
{ m = m1, w = w1 } vs. { m = m3, w = w3 }
{ m = m1, w = w2 } vs. { m = m2, w = w1 }
{ m = m1, w = w2 } vs. { m = m2, w = w3 }
{ m = m1, w = w2 } vs. { m = m3, w = w1 }
...
{ m = m3, w = w1 } vs. { m = m2, w = w3 }
{ m = m3, w = w2 } vs. { m = m1, w = w1 }
{ m = m3, w = w2 } vs. { m = m1, w = w3 }
{ m = m3, w = w2 } vs. { m = m2, w = w1 }
{ m = m3, w = w2 } vs. { m = m2, w = w3 }
{ m = m3, w = w3 } vs. { m = m1, w = w1 }
{ m = m3, w = w3 } vs. { m = m1, w = w2 }
{ m = m3, w = w3 } vs. { m = m2, w = w1 }
{ m = m3, w = w3 } vs. { m = m2, w = w2 }

W
955 Beiträge seit 2010
vor 3 Jahren

Dabei sollte wenn möglich aber keiner 2x gegen den gleichen spielen und jeder nur einmal mit demselben Partner. Jetzt spielt jeder gegen jeden zwei mal also klassische Liga mit Rückrunden.