An einem regnerischen Nachmittag sitzt du mit deiner Großmutter am Küchentisch und spielst Karten. Das Spiel ist ihre Variante von Camicia.
Zuerst fühlt es sich an wie ein ganz normales Freundschaftsspiel: Karten, die auf den Tisch geklatscht werden, Gelächter am Tisch, ab und zu ein siegessicheres Grinsen von Nonna. Doch je länger das Spiel dauert, desto seltsamer wird es. Dieselben Karten kommen immer wieder zurück. Du spielst Karte um Karte, und trotzdem will das Ende nicht kommen.
Langsam fragst du dich. Wird dieses Spiel jemals enden? Oder könnten wir für immer weiterspielen?
Später suchst du aus Neugier im Internet und entdeckst zu deiner Überraschung, dass das, was passiert ist, nicht nur Pech war. Du und deine Großmutter seid vielleicht auf eine der längsten möglichen Sequenzen gestoßen! Auf einmal hat es dich gepackt. Was als harmloses Spiel begann, ist zu einer Mission geworden: Wie lange kann so ein Spiel wirklich dauern? Findest du eine Sequenz, die noch länger ist als die, die du am Küchentisch gespielt hast? Vielleicht sogar lang genug für einen neuen Weltrekord?
Und so beschließt du, nur mit einem Kartendeck und etwas algorithmischem Einfallsreichtum gewappnet, der Sache auf den Grund zu gehen...
In dieser Übung simulierst du ein Spiel, das dem klassischen Kartenspiel Camicia sehr ähnlich ist. Dein Programm erhält die Anfangskonfiguration der Kartenstapel zweier Spieler und muss das Spiel simulieren, bis es endet (oder erkennen, dass es nie enden wird).
Ein kleines Beispiel für eine Partie, die endet.
| Runde | Spieler A | Spieler B | Mittelstapel | Fällige Strafe |
|---|---|---|---|---|
| 1 | 2 A 7 8 Q 10 | 3 4 5 6 K 9 J | - | |
| 1 | A 7 8 Q 10 | 3 4 5 6 K 9 J | 2 | - |
| 1 | A 7 8 Q 10 | 4 5 6 K 9 J | 2 3 | - |
| 1 | 7 8 Q 10 | 4 5 6 K 9 J | 2 3 A | Spieler B: 4 |
| 1 | 7 8 Q 10 | 5 6 K 9 J | 2 3 A 4 | Spieler B: 3 |
| 1 | 7 8 Q 10 | 6 K 9 J | 2 3 A 4 5 | Spieler B: 2 |
| 1 | 7 8 Q 10 | K 9 J | 2 3 A 4 5 6 | Spieler B: 1 |
| 1 | 7 8 Q 10 | 9 J | 2 3 A 4 5 6 K | Spieler A: 3 |
| 1 | 8 Q 10 | 9 J | 2 3 A 4 5 6 K 7 | Spieler A: 2 |
| 1 | Q 10 | 9 J | 2 3 A 4 5 6 K 7 8 | Spieler A: 1 |
| 1 | 10 | 9 J | 2 3 A 4 5 6 K 7 8 Q | Spieler B: 2 |
| 1 | 10 | J | 2 3 A 4 5 6 K 7 8 Q 9 | Spieler B: 1 |
| 1 | 10 | - | 2 3 A 4 5 6 K 7 8 Q 9 J | Spieler A: 1 |
| 1 | - | - | 2 3 A 4 5 6 K 7 8 Q 9 J 10 | - |
| 2 | - | 2 3 A 4 5 6 K 7 8 Q 9 J 10 | - | - |
status: "finished", cards: 13, tricks: 1
Dies ist ein kleines Beispiel für eine Partie, die in eine Schleife gerät.
| Runde | Spieler A | Spieler B | Mittelstapel | Fällige Strafe |
|---|---|---|---|---|
| 1 | J 2 3 | 4 J 5 | - | - |
| 1 | 2 3 | 4 J 5 | J | Spieler B: 1 |
| 1 | 2 3 | J 5 | J 4 | - |
| 2 | 2 3 J 4 | J 5 | - | - |
| 2 | 3 J 4 | J 5 | 2 | - |
| 2 | 3 J 4 | 5 | 2 J | Spieler A: 1 |
| 2 | J 4 | 5 | 2 J 3 | - |
| 3 | J 4 | 5 2 J 3 | - | - |
| 3 | J 4 | 2 J 3 | 5 | - |
| 3 | 4 | 2 J 3 | 5 J | Spieler B: 1 |
| 3 | 4 | J 3 | 5 J 2 | - |
| 4 | 4 5 J 2 | J 3 | - | - |
Der Beginn von Runde 4 entspricht dem Beginn von Runde 2. Zur Erinnerung: Der Wert der Zahlenkarten spielt keine Rolle.
status: "loop", cards: 8, tricks: 3
"finished" oder "loop"
Für alle, die eine spannendere Herausforderung suchen: Die Suche nach weiteren Rekorden für das längste Spiel mit einem Ende ist noch offen. Es gibt 653,534,134,886,878,245,000 (etwa 654 Trillionen) Möglichkeiten, und wir haben sie noch nicht alle berechnet!
Melde dich bei Exercism an, um x86-64 Assembly mit 22 Konzepte130 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.