Es gab noch nie eine endgültige ASCII-Karten-Herausforderung für AFAIK. Verwenden Sie also das folgende ASCII-Kartenspiel:
.------..------..------..------..------..------..------..------..------..------..------..------..------.
|2.--. ||3.--. ||4.--. ||5.--. ||6.--. ||7.--. ||8.--. ||9.--. ||T.--. ||J.--. ||Q.--. ||K.--. ||A.--. |
| (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) |
| :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: |
| '--'2|| '--'3|| '--'4|| '--'5|| '--'6|| '--'7|| '--'8|| '--'9|| '--'T|| '--'J|| '--'Q|| '--'K|| '--'A|
'------''------''------''------''------''------''------''------''------''------''------''------''------'
.------..------..------..------..------..------..------..------..------..------..------..------..------.
|2.--. ||3.--. ||4.--. ||5.--. ||6.--. ||7.--. ||8.--. ||9.--. ||T.--. ||J.--. ||Q.--. ||K.--. ||A.--. |
| :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: |
| :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: |
| '--'2|| '--'3|| '--'4|| '--'5|| '--'6|| '--'7|| '--'8|| '--'9|| '--'T|| '--'J|| '--'Q|| '--'K|| '--'A|
'------''------''------''------''------''------''------''------''------''------''------''------'
.------..------..------..------..------..------..------..------..------..------..------..------..------.
|2.--. ||3.--. ||4.--. ||5.--. ||6.--. ||7.--. ||8.--. ||9.--. ||T.--. ||J.--. ||Q.--. ||K.--. ||A.--. |
| :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: |
| (__) || (__) || (__) || (__) || (__) || (__) || (__) || (__) || (__) || (__) || (__) || (__) || (__) |
| '--'2|| '--'3|| '--'4|| '--'5|| '--'6|| '--'7|| '--'8|| '--'9|| '--'T|| '--'J|| '--'Q|| '--'K|| '--'A|
'------''------''------''------''------''------''------''------''------''------''------''------''------'
.------..------..------..------..------..------..------..------..------..------..------..------..------.
|2.--. ||3.--. ||4.--. ||5.--. ||6.--. ||7.--. ||8.--. ||9.--. ||T.--. ||J.--. ||Q.--. ||K.--. ||A.--. |
| :(): || :(): || :(): || :(): || :(): || :(): || :(): || :(): || :(): || :(): || :(): || :(): || :(): |
| ()() || ()() || ()() || ()() || ()() || ()() || ()() || ()() || ()() || ()() || ()() || ()() || ()() |
| '--'2|| '--'3|| '--'4|| '--'5|| '--'6|| '--'7|| '--'8|| '--'9|| '--'T|| '--'J|| '--'Q|| '--'K|| '--'A|
'------''------''------''------''------''------''------''------''------''------''------''------''------'
Nehmen Sie zwei ganze Zahlen p
und q
als Eingabe; Wo p
ist die Anzahl der Spieler und q
wie viele Karten bekommt jeder Spieler?
- Das Kartenspiel wird zufällig gemischt (dies ist nicht eindeutig, bedeutet jedoch, dass alle Karten mit gleicher Wahrscheinlichkeit einmal überall auftauchen müssen).
- Gib 1 Runde Karten pro Spieler aus und gib jede Reihe eine
q
Reihe vonp
Karten aus.
Regeln:
- Die Ergebnisse sollten gleichmäßig zufällig sein, und jede Karte sollte überall gleich wahrscheinlich erscheinen.
- Es ist garantiert, dass
0 < p*q <= 52 and p < 10
Sie möglicherweise undefiniertes Verhalten für Szenarien haben, in denen dies nicht erfüllt ist. - Sie sollten
q
Kartenreihen mitp
Karten pro Reihe ausgeben . - Jede Spalte sollte durch
|
(ein von Leerzeichen umgebenes Pipe-Zeichen) getrennt werden. Wenn Sie ein anderes Zeichen als dieses wählen, erklären Sie, warum. Die umgebenden Leerzeichen sind hier NICHT optional. - Jede Zeile muss 1 oder mehr Zeilenumbrüche enthalten, mehr als einer ist zulässig, 0 ist nicht zulässig (1 Zeile bedeutet standardmäßig den Zeilenumbruch).
- Jede Zeile sollte mit dem Spieler, dem sie gehört, im Format "Spieler N" beschriftet sein (0 oder 1-indiziert ist in Ordnung).
- Keine Karte darf mehr als einmal auftauchen.
T
ist für zehn.
Beispiele:
Funktion ( p=1,q=1
):
Player 1 # Can also be 0.
.------.
|2.--. |
| (\/) |
| :\/: |
| '--'2|
'------'
Funktion ( p=2,q=1
):
Player 1 | Player 2 # Can also be "Player 0 | Player 1"
.------. | .------.
|2.--. | | |T.--. |
| (\/) | | | (\/) |
| :\/: | | | :\/: |
| '--'2| | | '--'T|
'------' | '------'
Funktion ( p=2,q=2
):
Player 1 | Player 2 # Can also be "Player 0 | Player 1"
.------. | .------.
|J.--. | | |3.--. |
| (\/) | | | :/\: |
| :\/: | | | :\/: |
| '--'J| | | '--'3|
'------' | '------'
.------. | .------.
|8.--. | | |6.--. |
| :(): | | | :/\: |
| ()() | | | (__) |
| '--'8| | | '--'6|
'------' | '------'
Künstlerische Anerkennung für eine Schriftart unter: http://patorjk.com/software/taag
code-golf
ascii-art
random
card-games
Magic Octopus Urn
quelle
quelle
Each row must have 1 or more newlines inbetween them, more than one is acceptable, 0 is not.
... Aber Ihre Testfälle haben keine Zeilenumbrüche zwischen den Karten.Antworten:
Charcoal ,
142133125 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Bearbeiten: 9 Bytes durch Verbesserung meines Zufallsstichprobencodes gespeichert. Sparte weitere 8 Bytes, indem ich meinen Code für den Anzugsdruck verbesserte. Erläuterung:
Lesen Sie die Anzahl der Karten in
q
.Schleife über jeden Spieler.
Wenn dies nicht der erste Spieler ist, drucken Sie die vertikale Linie zwischen dem vorherigen und diesem Spieler.
Spielernummer drucken.
Schleife über jede Karte.
Drucken Sie die Kartenkante.
Wählen Sie eine Karteikarte aus, die noch nicht ausgewählt wurde, und fügen Sie sie der Liste der ausgewählten Kartenindizes hinzu.
Wählen Sie den Kartenrang aus und drucken Sie ihn aus, indem Sie ihn zyklisch in eine Reihe gültiger Kartenränge indexieren (
2-9, T, J, Q, K, A
).Drucken Sie die Oberseite des Anzugs.
Drucken Sie die Mitte des Anzugs, indem Sie ihn in eine Schnur schneiden. Der Slice beginnt bei der Karteikarte Modulo 4 und nimmt jedes vierte Zeichen auf, bis die Zeichenfolge abgelaufen ist (oder das
f
= 1000ste Zeichen erreicht ist). Da 4 und 13 Coprime sind, ist sichergestellt, dass alle 52 Karten möglich sind.Drucken Sie den unteren Teil der Farbe und eine Kopie des Ranges aus und bewegen Sie sich dann zu einem Punkt, der nicht zu weit von der Kopie des Ranges, dem Beginn der nächsten Karte oder dem Beginn der Trennlinie für das Symbol entfernt ist nächster Spieler.
quelle
Python 2 , 357 Bytes
Probieren Sie es online!
Ich habe keine Ahnung.
quelle
Jelly , 126 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6),
328... 312 ByteÜbernimmt Eingaben in der Currying-Syntax
(p)(q)
. Spieler sind 0-indiziert.Demo
Code-Snippet anzeigen
Wie?
Dies ist eine rekursive Funktion, die die Ausgabe von unten nach oben erstellt. Während des Hauptteils, in dem die Karten gezogen werden,
i
wird auf initialisiertp*q*6
und dekrementiert, bis es erreicht ist0
. Wir zeichnen dann den Header, indem wir ihn weiter dekrementieren,i
bis er erreicht ist-p
.Die ASCII-Grafik ist in kleine Teile aufgeteilt, die im Array gespeichert sind
a[]
. In der folgenden Tabelle wird der Inhalt von beschriebena[]
, wodurch der Rest des Codes verständlicher wird.Formatiert und kommentiert
quelle
Python 2 ,
382358346338332 BytesProbieren Sie es online!
quelle
SOGL V0.12 , 106 Bytes
Probieren Sie es hier aus!
Kartengenerierung:
Mischen:
Umgang:
quelle
Ruby, 262 Bytes
Schwerer zu folgen, aber kürzer!
Ruby, 279 Bytes
Erstellt für jede Zeile ein Format und verwendet dann den
%
Operator likesprintf
, um es aufzufüllen.Die Tatsache, dass der Kartenwert in jeder dritten Reihe erscheint, ist praktisch. Kartenwerte werden hexadezimal dargestellt, wobei die Ziffern durch
01BC
ersetzt werdenTJQK
.4 Bytes von den Farbsymbolen wurden gespeichert, indem berücksichtigt wurde, dass die Oberseite der Rauten und Pik gleich ist, jedoch 2 für die
-4
am Ende desj%4*4-4
Farbcodes hinzugefügten Ziffern -4 0 4 oder 8, wobei[-4,4]
4 Zeichen bedeuten, die mit dem viertletzten Zeichen in der beginnen Zeichenfolge.Könnte wahrscheinlich ein paar Bytes mehr sparen. Es ist hässlich, den Code für die Spieleridentifikationen wiederholen zu müssen.
quelle
PHP, 509 Bytes
Probieren Sie es online!
Dies ist mein erster Versuch, Code Golf zu spielen, daher kann es wahrscheinlich noch viel verbessert werden. Ich dachte, ich müsste irgendwo anfangen. :)
quelle
Java (OpenJDK 8) ,
784835843826815781775 BytesProbieren Sie es online!
Warum das Downvote, es entspricht der Spezifikation
quelle
Function<String,String>
: Letztere sind sehr, sehr kostspielig. Sowohl bei der Erstellung als auch bei der Verwendung.n[c]=t<2?"A":t<10?""+t:""+"TJQK".charAt(t-10)
;for(j=0;j<p;j++){o+=...;l++;}
kann seinfor(j=0;j<p;l++,j++)o+=...;
; Sie könnenreturn o;
stattdessenSystem.out.print(o);
eine SekundeFunction
anstelle von verwendenConsumer
;,y=p*q
kann entfernt werden und Sie können stattp*q
zweimal direkt verwendeny
. Golf hat zweifellos noch viel mehr zu bieten, aber ich habe im Moment keine Zeit, mich damit zu befassen.s[l]<2?":/\\:":s[l]<3?":/\\:"
kann seins[l]<3?":/\\:"
unds[i*p+j]<1?":\\/:":s[i*p+j]<2?":\\/:"
kann seins[i*p+j]<2?":\\/:"
. @ OlivierGrégoire Und mir ist bewusst, dass es höchstwahrscheinlich fast halbiert werden kann, also verstehe ich die Ablehnung. Dies ist jedoch meist ein Mangel an Erfahrung, und in der Tat nicht alle Tipps mehrmals zu lesen. Einige der Dinge in der Antwort habe ich auch in der Vergangenheit getan, und dies ist keine besonders einfache Herausforderung für Java. Übrigens, wenn Sie eine 400-450-Byte-Antwort haben, warum posten Sie sie dann nicht als getrennte Antwort (wenn sie signifikant unterschiedlich genug ist)? Du hättest meine Zustimmung. ;)Python 3, 332 Bytes
quelle