====== {d:Fünf Gewinnt}{f:Puissance 5}{i:Forza Cinque}{:Connect Five} ======
{{ soi:aufgaben:5gewinnt:connect5.jpg|Schwarz erzielt einen echten Sieg}}
Autor(en): Ruben Andrist\\
Ein-/ausgabe: Standard I/O\\
Sprachen: C/C++/Pascal \\ andere auf Anfrage.
[[soi:aufgaben:5gewinnt:notizen|Notizen]] \\
[[soi:aufgaben:5gewinnt:library|Library]] \\
[[soi:aufgaben:5gewinnt:loesung|Musterlösung(en)]]
===== Einleitung =====
5-Gewinnt ist ein Spiel für zwei Spieler, das auf einem Brett mit 20x20 rechteckigen Spielfeldern gespielt wird. Die Spieler platzieren (beginnend mit Weiss) abwechslungsweise ihre eigenen Steine auf einem der Felder. Gelingt es einem der Spieler, 5 Steine in einer Reihe, Spalte oder Diagonale aneinander zu legen, so gewinnt er sofort und das Spiel endet (Echter Sieg). Ansonsten gewinnt derjenige Spieler, der mehr 4er Linien hat, nach Punkten. Ein echter Sieg ist natürlich mehr wert, als ein Sieg nach Punkten.
===== Ein-/ausgabe =====
Das Programm soll via Standard-IO operieren (cin/cout, scanf/printf und readln/writeln...).
Die erste Zeile der Eingabe enthält die Farbe, die dein Programm spielen soll ("white" oder "black").
* Spielt dein Programm Weiss, so muss es beginnen und seinen ersten Zug ausgeben, danach kann es den Zug des Gegners einlesen.
* Spielt dein Programm Schwarz, so muss es erst einen Zug des Gegners einlesen, danach den eigenen ausgeben.
Ein Zug wird durch die Koordinaten des gelegten Steines beschrieben (1<=X,Y<=20)
===== Beispielpartie =====
^ Weiss ^ ^ ^ Schwarz ^ ^
^ Eingabe ^ Ausgabe ^ ^ Eingabe ^ Ausgabe ^
| white | | | black | |
| | 3 3 | | 3 3 | |
| 4 3 | | | | 4 3 |
| | 4 4 | | 4 4 | |
| 2 2 | | | | 2 2 |
| | 3 4 | | 3 4 | |
| ... | | | | ... |
Was zu folgender Spielsituation führt (mit Schwarz=X am Zug).
......
.X....
..OX..
..OO..
......
===== Turnierregeln =====
Am SOI-Tag treten die verschiedenen Programme in einem Knockout Turnier nach folgendem Modus gegeneinander an:
* Ein Programm das die Spielregeln nicht einhält, verliert das Duell sofort.
* Das bessere Programm aus zwei Spielen (jedes spielt einmal weiss) gewinnt.
* Im Falle eines Unentschiedens (Zwei echte Siege oder zwei Siege nach Punkten) werden die 4er in beiden Spielen gezählt. Wer insgesamt mehr 4er Linien erzielt hat, kommt weiter.
* Besteht immer noch ein Unentschieden, so müssen die jeweiligen Programmierer live gegen das Programm des Gegners antreten. Wer hier besser abschneidet, gewinnt und kommt weiter.
===== Hinweise =====
Die teilnehmenden Programme müssen auf dem Turnierserver (Linux) lauffähig sein. Exotische Wünsche bitte rechtzeitig anmelden...