Hallo Marc,
ich hoffe, Dir geht es gut. Es weihnachtet und die Zeit naht, sich wieder mit der Bahn zu befassen. Mit Vorfreude sehe ich, dass es eine neue Version für den Fahrzeugtausch gibt. Gut Idee, von der Begrenzung der alten Version wegzukommen.
Allerdings scheint die Umsetzung einige Bugs zu enthalten.
Einfache Situationen werden teilweise nicht berechnet, wie z.B. 5 Fahrzeuge mit 5 Handreglern und 7 Fahrern. Selbst im Kopf kann an einfach ermitteln, dass es genau 7 Rennen geben muss, bei denen immer 5 Fahrer auf der Bahn sind und 2 Fahrer aussetzen. Nach 7 Rennen ist jeder Fahrer genau 5 Rennen gefahren (mit jedem Auto genau eines) und hat 2 mal ausgesetzt.
SmartRace schlägt hingegen zunächst 10 Rennen mit einer unterschiedlichen Anzahl von Fahrern pro Rennen (von 2 bis 5) vor. Das überrascht. Setzt man die Mindestanzahl der Fahrer hoch auf 5 (was ja der Anzahl der Autos sowie der Handregler entspricht, also kein Problem sein sollte), bricht SmartRace die Ermittlung der Paarungen mit einer Fehlermeldung ab.
Ähnliches Ergebnis bei 2 Fahrzeugen mit 2 Handreglern und 7 Fahrern.
Meines Erachtens lassen sich alle Fälle sehr einfach errechnen, bei denen die Anzahl der Handregler gleich der Anzahl der Fahrzeuge ist (dann einfach jedem Fahrzeug fest einen Handregler zuordnen) oder zumindest gleich der Anzahl der Fahrer ist (dann einfach jedem Fahrer einen Handregler fest zuordnen). Die Anzahl der Rennen entspricht dann genau der höheren Zahl aus Anzahl der Fahrzeuge und Anzahl der Fahrer.
Beispiel: 4 Fahrer (1,2,3,4) fahren mit 3 Fahrzeugen (A,B,C) und 3 Handreglern. Jedem Fahrzeug wird ein Handregler fest zugeordnet. Es sind genau 4 Rennläufe notwendig. Die Paarung könnte sein A1/B2/C3, A4/B1/C2, A3/B4/C1, A2/B3/C4. Jeweils 1 Fahrer pro Rennlauf setzt aus.
Zweites Beispiel: 3 Fahrer (1,2,3) fahren mit 5 Fahrzeugen (A,B,C,D,E) und 3 Handreglern. Jedem Fahrer wird ein Handregler fest zugeordnet. Es sind genau 5 Rennen notwendig. Die Paarung könnte sein A1/B2/C3, D1/E2/A3, B1/C2/D3, E1/A2/B3 und C1/D2/E3. Jeweils 2 Fahrzeuge pro Rennlauf setzen aus.
Gibt es mehr Handregler als Fahrzeuge oder Fahrer, können die überzähligen Handregler einfach ignoriert werden. Die Logik ist dann die gleiche wie oben.
Nur für den Fall, dass die Anzahl der Handregler kleiner als die der Fahrzeuge und gleichzeitig kleiner als die der Fahrer ist, wird es knifflig. Dann müssen nämlich bei den Rennläufen gleichzeitig Fahrer und Fahrzeuge aussetzen. Je nach Anzahl der Fahrzeuge und Fahrer kann es sein, dass beim letzten Rennen (aber auch nur da) nicht mehr alle Handregler im Einsatz sind.
Beispiel: 6 Fahrer (1,2,3,4,5,6) fahren mit 5 Fahrzeugen (A,B,C,D,E) und 3 Handreglern. Es gibt 6 x 5 = 30 Kombinationen aus Fahrern und Fahrzeugen. Da bei 3 Handreglern je 3 Fahrer und Fahrzeuge gleichzeitig auf der Bahn fahren können, sind genau 30 : 3 = 10 Rennläufe notwendig und es sind bei jedem Rennlauf genau 3 Fahrzeuge auf der Bahn. Die Paarung könnte sein A1/B2/C3, D4/E5/A6, B1/C2/D3, E4/A5/B6, C1/D2/E3, A4/B5/C6, D1/E2/A3, B4/C5/D6, E1/A2/B3 und C4/D5/E6. Jeweils 3 Fahrer und 2 Fahrzeuge setzen pro Rennlauf aus.
Zweites Beispiel: 6 Fahrer (1,2,3,4,5,6) fahren mit 5 Fahrzeugen (A,B,C,D,E) und 4 Handreglern. Es gibt 6 x 5 = 30 Kombinationen aus Fahrern und Fahrzeugen. Da bei 4 Handreglern je 4 Fahrer und Fahrzeuge gleichzeitig auf der Bahn fahren können, 30 aber nicht exakt durch 4 teilbar ist, sind bei 30 : 4 = 7,5 genau 8 Rennläufe notwendig, wobei bei den ersten 7 Läufen jeweils 4 Fahrer und Fahrzeuge und beim letzten Rennlauf nur noch 2 Fahrzeuge und Fahrer auf der Bahn sind. Die Paarung könnte sein A1/B2/C3/D4, E5/A6/B1/C2, D3/E4/A5/B6, C1/D2/E3/A4, B5/C6/D1/E2, A3/B4/C5/D6, E6/A2/B3/C4 und D5/E6. Jeweils 2 Fahrer und 1 Fahrzeug setzen pro Rennlauf aus (beim letzten Lauf entsprechend 4 Fahrer und 3 Fahrzeuge).
Die Paarung ermittelt sich, indem man eine Matrix mit Fahrern und Fahrzeugen aufzieht, z.B. für das letzte Beispiel
A1 B1 C1 D1 E1
A2 B2 C2 D2 E2
A3 B3 C3 D3 E3
A4 B4 C4 D4 E4
A5 B5 C5 D5 E5
A6 B6 C6 D6 E6
Dann verbindet man ausgehend von Element A1 jeweils diagonal nach rechts unten (= plus eine Spalte und plus eine Zeile) so viele Elemente miteinander, wie Handregler zur Verfügung stehen, also im letzten Beispiel immer vier Elemente. Für den ersten Rennlauf ergibt sich so A1/B2/C3/D4. Für den zweiten Rennlauf ergibt sich E5/A6/B1/C2, da nach E5 wieder von der rechten Seite eine Zeile tiefer begonnen wird, also bei A6. Entsprechend folgt auf A6 dann B1 (eins nach rechts, eins nach unten), und so weiter.
Ob Du mit dieser Logik die neue Version des Fahrzeugtauschs verbessern kannst?
Das würde mich freuen.
Viele Grüße und eine schöne Adventszeit,
Alex.
You need to be logged in to add a comment.