Ein Casino verwendet das folgende Kartenspiel. ( *
Ist eine der Karten - Anzüge D
, S
, C
oder H
.)
_________ _________ _________ _________ _________
| | | | | | | | | |
| | | | | * | | * * | | * * |
| | | * | | | | | | |
| * | | | | * | | | | * |
| | | * | | | | | | |
| | | | | * | | * * | | * * |
|_________| |_________| |_________| |_________| |_________|
_________ _________ _________ _________ _________
| | | | | | | | | |
| * * | | * * | | * * | | * * | | * * |
| | | | | * * | | * * | | * * |
| * * | | * * * | | | | * | | * * |
| | | | | * * | | * * | | * * |
| * * | | * * | | * * | | * * | | * * |
|_________| |_________| |_________| |_________| |_________|
_________ _________ _________
| | | | | |
| * * | | * * | | * * * |
| * * | | * * * | | * * |
| * * * | | * * | | * * * |
| * * | | * * * | | * * |
| * * | | * * | | * * * |
|_________| |_________| |_________|
Nach jeder Nacht werden alte Decks weggeworfen und halbiert, um eine Wiederverwendung zu vermeiden. Infolgedessen hat das Casino einen großen Raum voller geschnittener Kartenhälften.
Leider ist die Wirtschaft schlecht und das Casino steckt in finanziellen Schwierigkeiten. Das vernünftigste Mittel, um Geld zu sparen, scheint das Recycling zu sein, daher beschließen die Casinobesitzer, alte Karten wieder zusammenzubinden. Also stellen sie ein Team ein, um eine Maschine zu bauen, die dies erledigt.
Sie sind Teil des Teams, und Ihre Aufgabe ist es, die Karte zu identifizieren.
Schreiben Sie ein Programm oder eine Funktion, die ein ASCII-Art-Bild einer Kartenhälfte in Form einer Zeichenfolge erstellt und eine Zeichenfolge der jeweiligen Karte zurückgibt.
Die Eingabe ist eine 11x5-Zeichenfolge plus Zeilenumbruchzeichen (CR, LF oder CRLF, Sie müssen nur eine unterstützen). Bei Bedarf können Sie am Ende jeder Eingabezeile ein nachgestelltes Leerzeichen eingeben. Die Eingabe enthält keine ungültigen Zeichen (außer _|-HSCD
Leerzeichen und Zeilenumbruch).
Eine Kartenhälfte sieht folgendermaßen aus:
_________
| |
| H H |
| H H H |
---H---H---
die als die Königin der Herzen identifiziert werden sollte:
H12
Das Casino hat ein begrenztes Budget, also ist dies Codegolf: Das kürzeste Programm gewinnt.
quelle
H 12
?Antworten:
CJam,
16151312 BytesTeste es hier.
Erläuterung
Die Grundidee ist, den String so zu manipulieren, dass die in CJam integrierte Lauflängencodierung für uns funktioniert.
Lassen Sie uns ein Beispiel durchgehen (das aus der Frage). Die Eingabezeichenfolge ist
Wir wiederholen das zweimal:
Und entferne die letzte Zeile:
Dann sortieren wir diese Zeichenfolge. Es wird jetzt eine Reihe von Zeilenumbrüchen am Anfang geben, und dann diese (um ein paar Leerzeichen gekürzt, um eine horizontale Bildlaufleiste zu vermeiden):
Während das Anzug-Zeichen variiert, wird es immer ein Großbuchstabe sein, der im vierten Durchgang der sortierten Zeichenfolge (unter Berücksichtigung der Zeilenumbrüche) zu finden ist. Wenn wir die Lauflänge codieren, erhalten wir
Also müssen wir nur das vierte Element auswählen und es umkehren.
Hier ist eine Aufschlüsselung des aktuellen Codes:
quelle
Pyth (aktuelle Version), 16 Bytes
Probieren Sie es online aus: Pyth Compiler / Executor
Erläuterung:
Pyth 4.0, 13 Bytes
Pyth hatte eine eingebaute Lauflängencodierung. Aber nur für kurze Zeit. Wenn jemand dies versuchen möchte: Klonen Sie das Pyth-Repo und überprüfen Sie das Commit 6a6dccd.
Dieses Programm funktioniert so ziemlich genauso wie Martins CJam-Lösung.
quelle
CJam, 22 Bytes
Weitere Golfmöglichkeiten finden Sie hier. So funktioniert es:
Probieren Sie es hier online aus
quelle
Python 2,
806866 BytesProbieren Sie es hier aus
Duplizieren Sie die Eingabe, suchen Sie alle Buchstaben bis auf die letzte Zeile (die ersten Zeichen in der letzten Zeile dürfen keine Buchstaben sein) und drucken Sie dann den ersten Buchstaben und wie viele.
Eingang :
' _________\n| |\n| H H |\n| H H H |\n---H---H---'
Ausgabe :
H12
Vorherige Version, die Regex verwendet (68):
Danke an Sp3000 für die Golfhilfe.
quelle
i=input()*2;s="CDSH";r=[i[:-9].count(x)for x in s];n=sum(r);print s[r.index(n)]+`n`
APL, 39 Bytes
Ich bin sicher, dass dies viel kürzer gemacht werden könnte, aber es ist ein Anfang.
Dadurch wird eine benannte monadische Funktion erstellt, die eine Eingabezeichenfolge akzeptiert und eine Zeichenfolge zurückgibt, die die Farbe und den Wert der Karte enthält. Sie können es online ausprobieren !
Erläuterung:
Vorschläge sind wie immer willkommen!
quelle
(⊃,≢)'HDCS'∩⍨¯11↓,⍨
?5⌷{⍺,≢⍵}⌸¯11↓,⍨⍞
J, 26 Bytes
Verwendung:
Code von links nach rechts lesen:
4{~.
).+/
) die Anzahl der Zeichen, die insgesamt in der Eingabe ([
) vorkommen, und die Eingabe ohne die letzten 9 Zeichen (_9}.[
).]
) mit der Stringdarstellung ( ) der resultierenden Summe":
.quelle
Perl, 75 Bytes
Ungolfed-Version
quelle
Julia, 58 Bytes
Dadurch wird eine unbenannte Funktion erstellt, die eine Zeichenfolge als Eingabe verwendet und die Farbe und den Wert der Karte zurückgibt. Um es zu nennen, geben Sie ihm einen Namen, z
f=s->(...)
.Ungolfed + Erklärung:
Vorschläge sind wie immer willkommen!
quelle
Bash + Coreutils, 73
quelle