Schreiben Sie einen Code, um festzustellen, wer in einem Pik- Spiel einen Trick mit vier Karten gewinnt . Wenigste Bytes gewinnt.
Die Eingabe ist eine Zeichenfolge, die die vier Karten in der Reihenfolge TH QC JH 2H
(Zehn der Herzen, Königin der Vereine, Bube der Herzen, Zwei der Herzen) auflistet . Eine Karte besteht aus zwei Zeichen: einer Farbe von CDHS
und einem Wert von 23456789TJQKA
. Sie werden garantiert, dass die Eingabe gültig ist und die Karten unterschiedlich sind.
Sie sollten eine Zahl 1, 2, 3 oder 4 für den Gewinner des Stichs ausgeben. Im Beispiel TH QC JH 2H
gewinnt der Bube der Herzen den Stich, daher sollten Sie 3 ausgeben.
Ihre Eingabe und Ausgabe muss genau wie beschrieben sein, mit der Ausnahme, dass nachfolgende Zeilenumbrüche optional sind.
Hier sind die Spades-Regeln, um einen Trick zu gewinnen. Die Gewinnkarte ist die höchste der vier Karten, mit einigen Einschränkungen. Pik ist die Trumpf- Farbe, daher ist jeder Pik jedem Nicht-Pik überlegen. Die Farbe der ersten gespielten Karte ist die Hauptfarbe , und nur Karten dieser Farbe oder Pik sind berechtigt, den Stich zu gewinnen. Karten der gleichen Farbe werden mit ihren Werten verglichen, die in aufsteigender Reihenfolge wie angegeben sind 23456789TJQKA
.
Testfälle:
TH QC JH 2H
3
KC 5S QS 9C
3
QD 2D TD 5D
1
9S 5D AD QS
4
3D 4C 3H JH
1
9S 4S TS JS
4
5H 9H 2C AD
2
5S 4C 3H QD
1
2H 2S KH AH
2
quelle
.e
Zeug es wert ist - mito
1 Zeichen kürzer, wie ich es sehe..e
28-Lösung. Die 27er Lösung endete aber mit a)
und hatte daher auch 28 Bytes. : oops:+@z1"KTA"
nach übersetzen"KTAZ"
, aber anstatt die Zeichenfolgen direktJ"KTAZ"
am Anfang und+@z1J
nach zu verwendenJ
.X
optional zu machen (Nur wenn a und b Zeichenketten sind). Aber ich bin mir nicht wirklich sicher, obXab)
manXab_b
(invertiert b, wäre nett für Sachen wieXa"</\>"
) oderXab+tbhb
(b verschoben) auswerten sollte . Was ist Ihre Präferenz?CJam,
3433 BytesAlgorithmus
Die Logik ist einfach. Ich habe eine benutzerdefinierte Sortierung, bei der ich zuerst dem zweiten Zeichen, das den Anzug darstellt, den Vorrang gebe. Dabei erhält Spades die höchste Priorität und dann die erste geworfene Suite. Ruhe alle sind
-1
. Dann sortiere ich nach dem ersten Zeichen, indem ichT
mitA
undQ
mit tausche,K
um eine lexikalische Sortierung zu haben.Code Erklärung
Sehen wir uns zunächst die lexikalische Reihenfolge der Nennwerte der Karten an:
Alle Zahlen befinden sich also an der richtigen Position.
J
ist auch in der richtigen Position. Wir müssen tauschenK
undQ
undJ
undA
lexikalische Ordnung bekommen.Probieren Sie es hier online aus
quelle
JavaScript (ES6), 112
Durchsuchen Sie die Liste und geben Sie die Position des höchsten gefundenen Werts zurück.
Führen Sie das Snippet zum Testen aus (in Firefox)
quelle
Perl, 73 Bytes
Versuch es mit mir .
Konvertiert die Kartennamen so, dass die Reihenfolge der Spielwerte der alphabetischen Reihenfolge folgt, wählt dann durch Sortieren die höchste aus und sucht danach in der ursprünglichen Zeichenfolge nach der Position.
quelle
Rubin, 59 + 2 = 61
na
Führen Sie mit Befehlszeilenflags ausquelle
J, 47 Bytes
Verwendung:
Methode:
'S[second char of input]AKQJT9876543'
Zeichenfolge basiert . Nicht gefundene Zeichen erhalten den Wertlast position + 1
implizit. Weitere Zeichen haben viel weniger Wert (value=(16-position)!
).TH_
QC_
9S_
und8S
).(J kann Zeichen oder Zeichenketten leider nicht direkt vergleichen. Es kann nur auf Gleichheit geprüft werden, was einige andere Ansätze für diese Herausforderung ausschließt.)
Probieren Sie es hier online aus.
quelle
C # 237
So funktioniert es: Durchlaufen Sie jede Hand, um den "Wert" der Karte zu berechnen. Speichern Sie den Index mit dem höchsten Wert. Ein Kartenwert wird als Rang der Karte multipliziert mit 0 bestimmt, wenn es sich nicht um einen Spaten oder die Eröffnungsfarbe handelt, 1, wenn es sich um die Eröffnungsfarbe handelt, und 9, wenn es sich um einen Spaten, aber nicht um die Eröffnungsfarbe handelt. (9 gewählt b / c 2 * 9 = 18> A = 14 & 9 ist ein einzelnes Zeichen)
quelle
Pyth,
3633 BytesZiemlich unkompliziert, verwendet eine Sortierung mit einer benutzerdefinierten Schlüsselfunktion und findet dann den Index mit dem höchsten Wert.
quelle
e
) können Sie jedoch das letzte Element abrufen. Wenn Sie also den höchsten Wert ermitteln, wird nur sortiert, und anschließend das letzte Element abgerufen.Pyth, 31 Bytes
Probieren Sie es hier aus.
Wie es funktioniert:
Der richtige Weg, diese Prozedur zu lesen, ist von hinten nach vorne. Die Prozedur sortiert die gewünschte Karte an das Ende der Liste, zieht sie dann heraus und findet ihren Index in der ursprünglichen Liste.
cz
: Dies erzeugt die Liste der Kartenstrings.c
, chop, ist normalerweise eine Binärfunktion (arity 2), aber wenn nur ein Eingang aufgerufen wird, dient dies als.split()
String-Methode.S
: Hiermit wird das normale Sortierverhalten angewendet, bei dem Karten mit niedrigeren Nummern vor Karten mit höheren Nummern sortiert werden.ox"TJQKA"hN
: Ordnet die Karten nach dem Index (x
) in der Zeichenfolge"TJQKA"
des ersten Buchstabens der Karte (hN
). Bei Karten mit Zahlen wird der erste Buchstabe nicht gefunden, was das Ergebnis ergibt-1
. Da die Sortierfunktion von Pyth stabil ist, wird die Reihenfolge der nummerierten Karten nicht beeinflusst.o}@z1Z
: Als nächstes ordnen wir nach, ob die Farbe der ersten gespielten Karte (@z1
) auf der betreffenden Karte liegt. Da es sich um eineTrue
Sortierung nach hinten handeltFalse
, werden die Karten der Hauptfarbe nach hinten gesendet.o}\SN
: Dies ist die gleiche Sortierung wie zuvor, es wird jedoch danach sortiert, ob sich der BuchstabeS
auf der Karte befindet, und der Pik wird nach hinten gesendet.hxczde
: Dies extrahiert die letzte Karte, die auf diese Weise sortiert wurde (e
), findet ihren Index in der Liste der Karten (xczd
) und erhöht sich um 1 (h
), wobei der gewünschte Spielerplatz angegeben wird.quelle