Ich möchte hier eine neue Form des Codegolfs ausprobieren. Ähnlich wie bei Boni müssen nicht alle Teile der Herausforderung abgeschlossen sein, sondern jede Antwort muss eine Teilmenge einer bestimmten Größe implementieren (und es gibt einen Kern, den jede Antwort implementieren muss). Neben dem Golfspielen umfasst diese Herausforderung auch die Auswahl einer Reihe von Funktionen, die gut zusammenpassen.
Die Regeln
Kingdom Builder ist ein Brettspiel, das auf einem (spitzen) Hex-Gitter gespielt wird. Das Board besteht aus vier (randomisierten) Quadranten, von denen jeder 10x10 Hex-Zellen hat (ein Vollboard ist also 20x20). Für diese Herausforderung enthält jede Hex-Zelle entweder Wasser ( W
), einen Berg ( M
), eine Stadt ( T
), eine Burg ( C
) oder ist leer ( .
). So könnte ein Quadrant aussehen
. . W . . . . . . .
. M W W . . . . . .
. M . . W . . . T .
M M . W . . . . . .
. . M . W W . . . .
. . . . . W W W W W
. T . . . . . . . .
. . W . . C . . . .
. . W W . . . . M .
. . . . . . . M M .
Die zweite Reihe ist immer von der ersten Reihe nach rechts versetzt. Spieler 1
auf 4
bis zu 40 Siedlungen jeweils auf leere Zellen (nach einigen Regeln , die wir für diese Herausforderung ignorieren) platzieren. Ein möglicher Spielplan am Ende des Spiels ist der folgende:
3 3 W . . . 4 . 4 . . 2 W . 4 . . 4 . 4
3 M W W . 1 1 . . 4 2 W . 3 C 4 4 . . 4
3 M 2 2 W 1 1 1 T 3 2 W 4 3 . 1 4 . 4 .
M M . W 2 2 . . . 2 2 W 3 . 1 1 1 . . .
. 4 M . W W 2 2 2 2 W W 3 . 1 4 . T . .
. . . . . W W W W W . 3 C 1 . . 2 2 2 2
. T 1 1 1 1 . . 2 . . 4 . . . 2 2 M M M
4 . W 4 . C 4 4 . . . . . . 2 M M M M M
. 4 W W . . . 4 M . . W . W . 2 2 2 M M
. . . . . . . M M . . W W . . . . 2 M .
. . . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 . 1
M 3 3 . . . . . . . . 4 . T 2 . 2 4 1 .
M M . C . 4 . 4 . . . . . 1 2 4 2 1 1 .
M . . 1 . 4 . . . . M M 1 2 . . 2 1 . .
. . . W 1 1 4 1 1 . . . 1 2 . . 2 W W W
. . 1 1 W 1 T . 1 1 1 1 T . . 2 W . 4 .
. 1 1 W . 3 3 . . . . . . . . 2 W 4 C 3
C 1 3 3 3 . 3 . 4 . 4 . 4 . . 2 W 1 1 M
4 3 3 4 . M 4 3 . . . . . . . 2 W . . .
. . . 4 . M M 3 . . 4 4 . 4 . 2 W W . .
Wir werden die Quadranten wie beschriften
1 2
3 4
Ihre Aufgabe wird es sein, ein solches Brett zu punkten. Es gibt eine Kernbewertung, die immer verwendet wird, und 8 optionale Bewertungen, von denen 3 für jedes Spiel ausgewählt werden. † Im Folgenden beschreibe ich alle 9 Punkte und verwende das obige Setup als Beispiel dafür, wie viele Punkte jeder Spieler erhalten würde.
† Es gibt 10 Punkte im eigentlichen Spiel, aber ich lasse zwei weg, weil niemand Golf spielen möchte.
Die Kernbewertung. Ein Spieler erhält 3 Punkte für jeden C
Astle, neben dem er eine Siedlung hat. Beispielnoten: 18, 0, 15, 12.
Die optionalen Punkte.
Ein Spieler erhält 1 Punkt für jede horizontale Reihe, in der er mindestens eine Siedlung hat.
Beispielnoten: 14, 20, 12, 16.
Finden Sie für jeden Spieler die horizontale Reihe, in der sich die meisten seiner Siedlungen befinden (wählen Sie im Falle eines Gleichstands eine aus). Ein Spieler erhält 2 Punkte für jede Siedlung in dieser Reihe.
Beispielergebnisse: 14 (Zeile 16), 8 (Zeile 4, 5 oder 6), 28 (Zeile 11), 10 (Zeile 1).
Ein Spieler erhält 1 Punkt für jede Siedlung, die neben
W
ater gebaut wird.Beispielnoten: 13, 21, 10, 5.
Ein Spieler erhält 1 Punkt für jede Siedlung neben einem
M
Brunnen.Beispielnoten: 4, 12, 8, 4.
Zähle die Siedlungen jedes Spielers in jedem Quadranten. Pro Quadrant erhalten die Spieler mit der größten Anzahl von Siedlungen jeweils 12 Punkte , die Spieler mit der zweitgrößten Anzahl von Siedlungen jeweils 6 Punkte .
Beispielergebnisse: 18 (6 + 0 + 6 + 6), 36 (12 + 12 + 0 + 12), 12 (0 + 0 + 12 + 0), 18 (12 + 6 + 0 + 0).
Bestimmen Sie für jeden Spieler den Quadranten, in dem er die geringste Anzahl von Siedlungen hat. Ein Spieler erhält 3 Punkte für jede Siedlung in diesem Quadranten.
Beispielbewertungen: 18 (Quadrant 2), 0 (Quadrant 3), 15 (Quadrant 1 oder 2), 27 (Quadrant 3).
Ein Spieler erhält 1 Punkt für jede verbundene Siedlungsgruppe.
Beispielnoten: 7, 5, 6, 29.
Ein Spieler erhält 1 Punkt für jeweils 2 Siedlungen in der größten Gruppe zusammenhängender Siedlungen des Spielers.
Beispielnoten: 4, 10, 8, 2.
Die Herausforderung
Wie im Spiel werden Sie 3 der optionalen Punkte auswählen und ein bestimmtes Brett basierend auf dem Kernpunktestand und diesen drei Punkten bewerten. Ihr Code sollte eine Liste mit 4 Ergebnissen erstellen. Es gibt jedoch eine Einschränkung bei der Auswahl: Ich habe die Ergebnisse in drei Gruppen eingeteilt, und Sie müssen für jede Gruppe eine implementieren:
- Implementieren Sie eine von 1 und 2 .
- Implementiere eines von 3, 4, 5 und 6 .
- Implementieren Sie eine der 7 und 8 .
Sie können ein Programm oder eine Funktion schreiben und Eingaben über STDIN, ein Befehlszeilenargument, eine Eingabeaufforderung oder einen Funktionsparameter vornehmen. Sie können das Ergebnis zurückgeben oder an STDOUT drucken.
Sie können ein beliebiges praktisches 1D- oder 2D-Listen- / Zeichenfolgeformat für die Eingabe auswählen. Möglicherweise verwenden Sie kein Diagramm mit vollständigen Informationen zur Nachbarschaft. Hier finden Sie einige gute Informationen zu Hex-Gittern, wenn Sie Inspiration benötigen.
Ihre Ausgabe kann auch in einem beliebigen praktischen, eindeutigen Listen- oder Zeichenfolgenformat erfolgen.
Dies ist Codegolf, daher gewinnt die kürzeste Antwort (in Bytes).
Weitere Annahmen
Sie können davon ausgehen, dass ...
- ... jeder Spieler hat mindestens 1 Siedlung und es gibt nicht mehr als 40 Siedlungen von jedem Spieler.
- ... jeder Quadrant enthält entweder eine Stadt und zwei Burgen oder zwei Städte und eine Burg.
- ... Städte und Burgen sind weit genug voneinander entfernt, so dass keine Siedlung neben zwei von ihnen liegen kann.
Testfälle
Unter Verwendung der obigen Tabelle sind hier die Einzelbewertungen für alle möglichen Auswahlen von Bewertungsmechanismen:
Chosen Scores Total Player Scores
1 3 7 52 46 43 62
1 3 8 49 51 45 35
1 4 7 43 37 41 61
1 4 8 40 42 43 34
1 5 7 57 61 45 75
1 5 8 54 66 47 48
1 6 7 57 25 48 84
1 6 8 54 30 50 57
2 3 7 52 34 59 56
2 3 8 49 39 61 29
2 4 7 43 25 57 55
2 4 8 40 30 59 28
2 5 7 57 49 61 69
2 5 8 54 54 63 42
2 6 7 57 13 64 78
2 6 8 54 18 66 51