Einführung
Skat ist ein traditionelles deutsches Kartenspiel für 3 Spieler. Das Deck besteht aus 32 Karten: Ass, König, Dame, Bube, 10, 9, 8, 7 in allen 4 Farben (Kreuz, Pik, Herz, Karo).
In jeder Runde spielt ein Spieler solo, während die anderen beiden gegen ihn spielen. Zu Beginn einer Runde erhält jeder Spieler 10 Karten, die restlichen 2 Karten heißen Skat und werden verdeckt in die Mitte gelegt. Der Einzelspieler wird durch eine Angebotsphase bestimmt. Dies ist der Teil des Spiels, mit dem Sie sich in dieser Herausforderung auseinandersetzen müssen, mehr dazu weiter unten.
Der Spieler, der die Gebotsphase gewinnt, wird zum Solospieler. Er nimmt den Skat und wirft dann zwei Karten ab (die möglicherweise die gleichen sind, die das andere Team nicht kennt), zieht die Trumpffarbe und die Runde beginnt.
Eine Runde besteht aus zehn Tricks. Der Spieler, der einen Stich gewinnt, führt den nächsten, bis alle Karten gespielt sind. Ich werde die Regeln hier nicht erklären, aber Sie sollten wissen, dass es gut ist, viele Trumpfkarten zu haben. Wenn Sie mehr über die Regeln erfahren möchten, lesen Sie den Wikipedia-Artikel, den ich zu Beginn dieses Beitrags verlinkt habe, aber er wird für diese Herausforderung nicht benötigt.
Die Herausforderung
Sie möchten Ihren beiden Söhnen das Skatspielen beibringen. Die Regeln sind nicht so hart, also kommen sie schnell rein. Das einzige, was ihnen Schwierigkeiten bereitet, ist das Bieten, bei dem speziell der Spielwert ihrer Hand berechnet wird. Sie beschließen also, ein kleines Programm zu schreiben, das den maximalen Spielwert ausgibt, den sie für ihre aktuelle Hand bieten können.
Berechnung des Spielwertes
Jede Hand hat einen bestimmten Spielwert. Es wird durch die Anzahl der aufeinanderfolgenden Buben bestimmt, die Sie haben, und durch die Farbe, die Sie als Trumpf auswählen möchten. Beginnen wir mit dem ersten Faktor, den Buchsen!
Der Jack-Faktor
Buben sind immer Trumpfkarten und schlagen jede andere Trumpfkarte. Die Reihenfolge der Stärke zwischen den vier Buben ist:
- Jack of Clubs (höchste)
- Jack of Spades
- Jack of Hearts
- Jack of Diamonds (niedrigste)
In der weiteren Erläuterung beziehe ich mich mit den Nummern, die ich ihnen hier zugewiesen habe.
Erinnern Sie sich, dass die Buben in Ihrer Hand eine Art Faktor enthalten, der zum Spielwert beiträgt? Groß! So bekommen Sie es:
Dieser Jack-Faktor ist die Anzahl der Top-Jacks (siehe Reihenfolge oben) in Folge plus 1. Wenn Sie also alle 4 Jacks haben, ist dies 4 + 1 = 5. Wenn Sie nur die ersten 2 Jacks haben, ist dies 2 + 1 = 3.
Um die Sache etwas komplizierter zu machen, kann der Jack-Faktor auch die Anzahl der Top-Jacks in der Reihenfolge sein, die Sie vermissen , plus 1. Wenn Sie also den ersten vermissen, ist es 1 + 1 = 2. Wenn Sie Fehlt die erste 3, so ist es 3 + 1 = 4. Hier einige Beispiele unter Verwendung der obigen Nummerierung:
[1, 4] -> 1 + 1 = 2
[1, 2, 4] -> 2 + 1 = 3
[2, 3, 4] -> 1 + 1 = 2
[1, 2, 3, 4] -> 4 + 1 = 5
[] -> 4 + 1 = 5
Das war der erste Faktor. Hier ist, wie Sie die 2. bekommen:
Der Trumpffaktor
Dieser ist viel einfacher. Der 2. Faktor wird durch die Trumpffarbe bestimmt, die der Solospieler mit der folgenden Zuordnung auswählt:
Clubs -> 12
Spades -> 11
Hearts -> 10
Diamonds -> 9
Das war doch einfach, oder?
Der Spielwert
Der Spielwert ist das Produkt der beiden Faktoren. Ziemlich einfach, denkst du? Falsch! Während der Jack-Faktor festgelegt ist, ist der Suit-Faktor nicht festgelegt. Welche Farbe du als Trumpf auswählst, hängt von der Anzahl der Trümpfe und dem Wert deiner Nicht-Trumpfkarten in deiner Hand ab. Es wäre viel zu kompliziert zu erklären, wie eine gute Hand aussieht, daher werden Sie den folgenden Algorithmus verwenden:
Der Which-Trump-do-I-Pick-Algorithmus
Sie müssen nicht an der Ausschreibung teilnehmen. Wenn Sie feststellen, dass Ihre Hand zu schlecht ist, um alleine zu spielen, können Sie einfach passen. Ihre Hand muss die folgenden Kriterien erfüllen, um spielbar zu sein:
Haben Sie mindestens 6 Trumpfkarten (Karten der ausgewählten Trumpffarbe + die Anzahl der Buben). Wenn dies für mehr als eine Farbe möglich ist, wählen Sie die Farbe aus, die zu mehr Trumpfkarten führen würde. Wenn es immer noch ein Unentschieden gibt, wählen Sie den Anzug mit der höchsten oben angegebenen Bewertung.
Haben Sie von den Nicht-Trumpfkarten mindestens 1 Ass.
Wenn Ihre Hand nicht beide Kriterien erfüllt, haben Sie bestanden. In diesem Fall geben Sie den berechneten Spielwert und die gewählte Trumpffarbe aus.
Kurzer Hinweis: Dies ist natürlich ein sehr vereinfachter Algorithmus. Es steckt viel zu viel Strategie und Erfahrung in der Beurteilung einer Hand, als dass wir jemals in einer solchen Herausforderung bestehen könnten.
Eingang
Jede Karte hat eine eindeutige Kennung. Der erste Teil ist der Anzug ( C Lubs, S PAdES, H eARTS, D iamonds), der zweite Teil ist der Wert, der durch diese Zuordnung gegeben ist:
Ace -> A
King -> K
Queen -> Q
Jack -> J
10 -> 0
9 -> 9
8 -> 8
7 -> 7
Beide Teile bilden zusammen eine Karte. Der Wert steht an erster Stelle, dann kommt der Anzug. Sie können die Karten in jedem gewünschten Format nehmen.
Ausgabe
Wenn die Hand spielbar ist, geben Sie den Spielwert und die gewählte Trumpffarbe aus (Reihenfolge spielt keine Rolle). Ist dies nicht der Fall, geben Sie "pass" aus.
Regeln
- Wie bereits erwähnt, können Sie die Eingabe im für Sie bequemsten Format vornehmen. Beispiele siehe unten in den Testfällen.
- Die Eingabe kann über Befehlszeilenargumente, Benutzereingaben oder Funktionsargumente erfolgen.
- Die Ausgabe kann als Rückgabewert erfolgen oder nur auf dem Bildschirm ausgedruckt werden.
- Die Karten im Eingang dürfen in keiner Weise bestellt werden. Ihr Programm muss in der Lage sein, zufällige Kartenbestellungen zu verarbeiten.
- Die niedrigste Anzahl an Bytes gewinnt!
Testfälle
In den Testfällen wird eine Liste von Zeichenfolgen mit zwei Zeichen eingegeben.
1. ["JC", "JS", "JD", "AC", "KC", "9C", "AS", "7H", "QD", "8D"] -> 36 Clubs
2. ["JD", "AS", "0S", "KS", "QS", "9S", "8S", "AD", "8C", "9C"] -> 44 Spades
3. ["JH", "JD", "0S", "KS", "9C", "8C", "QH", "KH", "AD", "9D"] -> pass
4. ["JD", "AS", "KS", "QS", "0S", "9S", "8D", "7D", "0C", "QH"] -> pass
Erläuterung:
- Zwei Buben hintereinander mit Clubs als Trumpf. Der Spielwert beträgt also 3 x 12 = 36
- Drei Buben in einer Reihe fehlen mit Pik als Trumpf. Der Spielwert beträgt also 4 x 11 = 44
- Es sind nur maximal 4 Trumpfkarten möglich, Sie werden also passen.
- Sechs Trumpfkarten mit Pik, aber ohne Non-Trump-Ass, Sie werden passen.
Wenn einige Regeln unklar sind, kommentieren Sie sie. Ich bin mit diesem Spiel aufgewachsen, daher fällt es mir schwer zu beurteilen, ob ich alles ausführlich genug beschrieben habe.
Und jetzt ... Happy Coding!
edit: Wie ich in den Kommentaren (danke an isaacg) bemerkt habe, gibt es eine Regel, die die folgenden Top-Trümpfe nach den 4 Buben in den "Buben-Faktor" einrechnet, sodass es bis zu 11 gehen kann. Um diese Herausforderung einfach zu halten und um die leute nicht zu verwirren, werden die regeln, die ich ursprünglich vorgeschlagen habe, so bleiben, wie sie sind. Der maximale Faktor bleibt also bei 5.
quelle
Antworten:
Python 2, Beispielimplementierung
Da es noch keine Einreichungen gibt, habe ich eine Beispielimplementierung in Python aufgeschrieben. Das Eingabeformat ist dasselbe wie in den Testfällen in der Challenge.
Vielleicht motiviert das euch, loszulegen, es ist nicht so schwer :)
quelle
Java, 256 Bytes
Nimmt die Eingabe als ein Array von Zeichenfeldern in dem Format
A4
, in dem4
ist , Clubs ,3
ist Pik ,2
ist Herzen und1
ist Diamanten . Die Ausgabe ist36 4
für ein Gebot von 36 mit Trumpffarbe Clubs ,p
für nebenbei.Probieren Sie es hier online aus .
Ungolfed-Version:
quelle
C 235 Bytes
Port meiner Java- Antwort .
Probieren Sie es hier online aus .
Nimmt die Eingabe als ein Array von Zeichen in dem Format
A4
, in dem4
ist Clubs ,3
ist Pik ,2
ist Herz und1
ist Diamanten . Die Ausgabe ist36 4
für ein Gebot von 36 mit Trumpffarbe Clubs ,p
für nebenbei.Ungolfed-Version:
quelle