Erstellen Sie ein Kartenspiel


32

Hier ist ein Array, das ein Standardkartenstapel darstellt, einschließlich zweier Joker.

[
  "AS", "2S", "3S", "4S", "5S", "6S", "7S", "8S", "9S", "10S", "JS", "QS", "KS", 
  "AD", "2D", "3D", "4D", "5D", "6D", "7D", "8D", "9D", "10D", "JD", "QD", "KD", 
  "AH", "2H", "3H", "4H", "5H", "6H", "7H", "8H", "9H", "10H", "JH", "QH", "KH", 
  "AC", "2C", "3C", "4C", "5C", "6C", "7C", "8C", "9C", "10C", "JC", "QC", "KC", 
  "J", "J"
]

Es ist auf diese Weise zusammengesetzt:

  • Es gibt vier Anzüge; Herzen, Pik, Karo und Keulen (H, S, D, C).
  • Jede Farbe hat eine Karte für die Nummern 2 bis 10 sowie 4 'Bild'-Karten, Ass, Bube, Dame und König (A, J, Q, K).
  • Für jede Kombination aus Farbe und Wert sollte ein Element im Array vorhanden sein, das eine Zeichenfolge ist und sich aus dem Wert zusammensetzt, auf den die Farbe folgt (Leerzeichen dazwischen sind zulässig).
  • Hinzu kommen zwei Jokerkarten ('J').
  • Schreiben Sie in jeder gewünschten Sprache.
  • Golf auf! Versuchen Sie, diese Ausgabe in der kleinsten Anzahl von Bytes zu erzeugen.
  • Es spielt keine Rolle, in welcher Reihenfolge die Ausgabe erfolgt.

2
@ KevinCruijssen das ist richtig. In der ersten Frage werden die Zahlen 2 bis 10 und ein Array von Zeichenfolgen als Ausgabe angegeben.
AJFaraday

15
Ich habe mich nur gefragt, ob Sie 23456789 erhalten könnten, indem Sie 2 kleinere Zahlen multiplizieren ... nur um herauszufinden, dass es eine Primzahl ist!
Spiel

4
@match Da die Reihenfolge der Ausgabe keine Rolle spielt, können Sie sie möglicherweise immer noch mit kleineren Zahlen erstellen, indem Sie sie mit 2oder 4oder etwas anderem beenden, sodass sie keine Primzahl mehr ist.
Kevin Cruijssen

5
Regeln in Kommentaren zählen nicht. Wenn wir das Ergebnis nicht an STDOUT ausgeben können (und das ist ein großer Fehler, da dadurch unsere Standardeinstellungen für E / A außer Kraft gesetzt werden und verhindert wird, dass Sprachen ohne Funktionen und Zeichenfolgenarrays teilnehmen), muss diese Regel explizit in der Challenge-Spezifikation angegeben werden.
Dennis

7
Das schließt eine String-Darstellung eines solchen Arrays nicht aus, die auf STDOUT gedruckt werden könnte. Ohne den Kommentarbereich hätte ich nie gedacht, dass dies nicht erlaubt ist.
Dennis

Antworten:




13

Brainfuck , 200 197 Bytes

+[[<+>->++<]>]+<++++<<+++[->+++>+++++>+>+<<<<]>+.<<.>>.--<<<[->>+++<<]>>+>[<<.>.-.+>.<<.<<[>>>+.>.<<.<+<-]>[-<+>>>+<<]>>.>.<<.>+++++++++.>.<<.>+.>.<<.>++++++.>.,++++[-<-------->]>[[-<+>]>]<<[<]>>>]

Probieren Sie es online!

Verwendet eine negative Zelle (+1 Bytes zum Korrigieren), umschließende Zellen (viele Bytes zum Korrigieren) und 0 auf EOF (+2 Bytes zum Entfernen der Abhängigkeit).

Ausgänge

J J 10H 2H 3H 4H 5H 6H 7H 8H 9H AH JH KH QH 10S 2S 3S 4S 5S 6S 7S 8S 9S AS JS KS QS 10D 2D 3D 4D 5D 6D 7D 8D 9D AD JD KD QD 10C 2C 3C 4C 5C 6C 7C 8C 9C AC JC KC QC

Erläuterung:

+[[<+>->++<]>]  Sets the tape to powers of 2 
          TAPE: 1 2 4 8 16 32 64 128 0 0'
+<++++<<+++[->+++>+++++>+>+<<<<]   Uses the 64 and the 128 to generate the suit letters
          TAPE: 1 2 4 8 16 32 0' 73 83 68 67
                                 I  S  D  C
>+.<<.>>.--<<     Prints the Jokers
<[->>+++<<]>>+>   Uses the 16 to create 49
          TAPE: 1 2 4 8 0 32 49 72' 83 68 67
                                 H   S  D  C
[  Loop over the suits
   <<.>.-.+>.<<.<<      Print the 10 card with a leading space
          TAPE: 1 2 4 8' 0 32 49 Suit
   [>>>+.>.<<.<+<-]  Use the 8 to print the other 8 number cards
          TAPE: 1 2 4 0' 8 32 57 Suit
   >[-<+>>>+<<]      Move the 8 back into place while also adding it to the 57
          TAPE: 1 2 4 8 0' 32 65 Suit

   >>.>.<<.         Print the Ace
   >+++++++++.>.<<. Print the Jack
   >+.>.<<.         Print the King
   >++++++.>.<<.    Print the Queen
          TAPE: 1 2 4 8 0 32 81' Suit
   >>,    Clear the current suit
   ++++[-<-------->]    Subtract 32 to get back to 49 (reusing the space is longer than just subtracting 32)
          TAPE: 1 2 4 8 0 32 49 0' MoreSuits?
   >[[-<+>]>]<<[<]>>>   Shift all the remaining suits over one
          TAPE: 1 2 4 8 0 32 49 Suit?'
] End on the character of the next suit and repeat

Das ist mehr als 2,5 mal kürzer als meine Lösung. Gut gemacht.
Der zufällige Kerl

11

05AB1E , 28 27 25 24 23 Byte

2TŸ.•-Ÿ•S«.•ôì•âJ„jjS«u

Probieren Sie es online aus.

-1 Byte dank @Emigna Entfernen des SAfter "HSDC", da âdies implizit geschieht.

Erläuterung:

2TŸ           # Push list in the range [2,10]: [2,3,4,5,6,7,8,9,10]
   .•-Ÿ•      # Push compressed string "ajqk"
        S     # Convert it to a list of characters: ["a","j","q","k"]
         «    # Merge the two lists together: [2,3,4,5,6,7,8,9,10,"a","j","q","k"]
.•ôì•         # Push compressed string "cdhs"
â             # Cartesian product of each (pair each character of both lists):
              #  [[2,"a"],[2,"d"],[2,"h"],...,["k","d"],["k","h"],["k","s"]]
J             # Join each pair together to a single string:
              #  ["2a","2d","2h",...,"kd","kh","ks"]
jjS          # Push string "jj", and convert it to a list of characters: ["j","j"]
    «         # Merge both lists together:
              #  ["2a","2d","2h",...,"kd","kh","ks","j","j"]
     u        # Convert everything to uppercase:
              #  ["2A","2D","2H",...,"KD","KH","KS","J","J"]
              # (and output the result implicitly)

Sehen Sie sich meinen Tipp 05AB1E an (Abschnitt So komprimieren Sie Zeichenfolgen, die nicht Teil des Wörterbuchs sind ), um zu verstehen, warum dies so .•-Ÿ•ist "ajqk"und .•ôì•ist "cdhs".


9

Brainfuck , 550 504 Bytes

++++++++++[>+++>+++++>+++++++<<<-]>++>->[>+>+>+>+<<<<-]>----->++++.<<<<.>>>>.<<<<.>>>>>--->+++++++++++++<<<<<.-.+>>>>.<<<<<.>.-.+>>>>+.<<<<<.>.-.+>>>>++++.-----<<<<<.>.-.+>>>>>.<<<<<<.>>++++++++[-<+.>>>>.<<<<<.>.>>>>+.<<<<<.>.>>>>++++.-----<<<<<.>.>>>>>.<<<<<<.>>]>.>>.<<<<<.>>>>.>.<<<<<.>>>>+.>.<<<<<.>>>>++++++.>.<<<<<.>>>.>>+.<<<<<.>>>>.>.<<<<<.>>>>------.>.<<<<<.>>>>-.>.<<<<<.>>>.>>++++.<<<<<.>>>>.>.<<<<<.>>>>+.>.<<<<<.>>>>++++++.>.<<<<<.>>>.>>>.<<<<<<.>>>>.>>.<<<<<<.>>>>------.>>.<<<<<<.>>>>-.>>.

Probieren Sie es online!

Alte Antwort, auch online!


8

Java 10, 153 151 125 77 75 Bytes

v->("AJQK2345678910".replaceAll("1?.","$0H,$0S,$0D,$0C,")+"J,J").split(",")

-28 Bytes dank @ OlivierGrégoire .
-50 Bytes dank @mazzy .

Probieren Sie es online aus.

Erläuterung:

v->                      // Method with empty unused parameter and String-array return-type
  "AJQK2345678910"
   .replaceAll("1?.",    //  Replace every loose character (or "10" as single char)
     "$0H,$0S,$0D,$0C,") //  with "cH,cS,cD,cC,", where c is the character
   +"J,J")               //  Append "J,J"
  .split(",")            //  And split everything by commas


3
versuchen Sie es "AJQK2345678910".replace("1?.","$0H,$0S,$0D,$0C,")+"J,J"und teilen Sie es.
mazzy

1
Smart @mazzy Danke. Und habe es bereits bearbeitet, Olivier. :)
Kevin Cruijssen

2
cool! Ich glaube, es ist möglich, 2 Bytes mehr zu entfernen - Klammern im Muster. siehe regex101.com/r/aDbz9C/1
mazzy

1
@mazzy Oh, wusste gar nicht, dass $0das in Java möglich ist. Bis, danke. :)
Kevin Cruijssen

7

APL (Dyalog Unicode) , 29 Byte

1 Byte gespart dank Probie mit 1+⍳9anstelle von1↓⍳10

'JJ',,'HCDS'∘.,⍨'AKJQ',⍕¨1+⍳9

Probieren Sie es online!

Dies ist ein volles Programm. In der TIO-Verknüpfung habe ich das Boxen aktiviert, damit die einzelnen Elemente des Arrays unterschieden werden können.

Hier ist die Boxed-Ausgabe.

┌─┬─┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬───┬───┬───┬───┐
JJAHACADASKHKCKDKSJHJCJDJSQHQCQDQS2H2C2D2S3H3C3D3S4H4C4D4S5H5C5D5S6H6C6D6S7H7C7D7S8H8C8D8S9H9C9D9S10H10C10D10S
└─┴─┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴───┴───┴───┴───┘

'JJ', 2 Joker verkettet an

, die verwirrte Form von

∘.,⍨ die Matrix, die durch Verketten jeder Kombination von erstellt wird

  • 'HCDS' diese Saite dagegen

  • 'AKJQ', diese Saite mit

    • ⍕¨ die stringierten Formen von jedem von

      • 1+⍳9 die Zahlen 2..10 (1 plus der Bereich 1..9)

Ich habe den Einzug Ihrer Liste in der Erklärung geändert. Es sah ein bisschen seltsam aus mit den zwei und drei Punkten. Wenn das aus irgendeinem Grund beabsichtigt war, kannst du gerne einen Rollback durchführen.
Kevin Cruijssen

@ KevinCruijssen Danke, ich konnte nicht herausfinden, wie das geht, also habe ich mehrere Stichpunkte verwendet, hah
Kritixi Lithos

Ja, dachte ich mir, deshalb habe ich es geändert. :) -Zum Einrücken benötigen Sie ein Vielfaches von vier führenden Leerzeichen .
Kevin Cruijssen

7

Befunge-98 (FBBI) , 75 Bytes

j4d*1-2k:d%4+1g:'0-!#v_>,d/1g,' ,!#v_3
CHSDA234567890JQK@;1'< ^,;,k2"J J" <

Probieren Sie es online!

Programmstruktur

Bildbeschreibung hier eingeben

Der Stack ist zunächst mit 0s gefüllt und jspringt nicht über die Initialisierung. Die Initialisierung drückt 4 * 13 = 52, was der Programmzähler ist. In den folgenden Iterationen 3bewirkt das Nachziehen, dass der Zeiger über diesen Teil springt.

1-2k:d%4+1g,d/1g,' ,!#v_  Main loop

1-                        decrement counter
  2k:                     duplicate counter three times
     d%                   counter mod 13 ...
       4+                 ... + 4 is the position of the card in the Data section
         1g,              get the card from row 1 and print it
            d/            counter / 13 is the position of the suit in the Data section
              1g,         get the suit from row 1 and print it
                 ' ,      print a space as seperator
                    !     negate the counter (0 for non-zero, 1 for 0)
                       _  If the counter is 0, move West ...
                     #v   ... and move to the termination
                          otherwise, continue with the next iteration

Code, der 10 druckt:

'0-!#v_>    Checks if Card is '0'

'0-         subtract the '0' from the card
   !        negate (1 for '0', 0 for all other cards)
      _     If card was '0', move West
    #v        and go South to print '10'
            Else continue to go East

  ;1'< ^,;  Prints '10'

     <      Go West
   1'       Push '1'
  ;         Jump to ...
         ;  ... the next semicolon
        ,   Print '1'
       ^    Go back to the main loop
            The '0' will be printed by the main loop

Beendigung:

@; ... ;,k2"J J" <

                 <  Go West
           "J J"    Push "J J"
        ,k2         Print it
       ;            Jump to ...
 ;                  ... the next semicolon
@                   terminate the program

7

R , 65 Bytes

c(outer(c('A',2:10,J<-'J','Q','K'),c('S','D','H','C'),paste),J,J)

Probieren Sie es online!

-2 Bytes dank @ Giuseppe und @ JayCe Vorschläge


1
Dies war meine genaue Antwort, obwohl ich denke, dass ich doppelte Anführungszeichen anstelle von einfachen Anführungszeichen verwendet habe.
Giuseppe

Sorry, habe ich deine Antwort doppelt gepostet? Ich habe nachgesehen, aber ich konnte keine Antwort von R finden ...
digEmAll

Oh nein, ich habe es gerade selbst in TIO geschrieben, bevor ich deins gesehen habe :-)
Giuseppe

1
Ja außen ist definitiv der Weg hierher! Obwohl das Leerzeichen gemäß der Spezifikation vorgeschrieben ist, können Sie mit ein Byte speichern paste. @ Giuseppe auch.
JayCe

Ich zeigte diese heraus Jayce Antwort, aber Sie können einstellen , x<-'J'innerhalb der outerund dann wiederverwenden xals Variable in der äußersten c()Anweisung abrasieren ein Byte: Versuchen Sie es online!
Giuseppe

6

Powershell, 63 61 59 56 Bytes

-3 Bytes: Danke ConnorLSW

2..10+'AJQK'[0..3]|%{"$_`H";"$_`S";"$_`D";"$_`C"};,'J'*2

1
-3 unter Verwendung eines Strings zum 2..10+'AJQK'[0..4]|%{"$_`H";"$_`S";"$_`D";"$_`C"};,'J'*2
Anordnen

1
cool! eine Idee, wie man `` `` entfernt?
mazzy

1
Soweit ich weiß, ist dies der billigste Weg, eine Variable in einen String zu zerlegen. Ich habe mir eine Schleife angesehen, aber es ist um 2 Zeichen teurer, dies auf diese Weise zu tun.
Colsw


5

Python 3 , 67 64 Bytes

print(*[a+b for a in['10',*'A23456789JQK']for b in'CHSD'],*'JJ')

Probieren Sie es online!


Python 2 , 78 76 74 68 Bytes

print['1'*(a<'1')+a+b for a in'A234567890JQK'for b in'CHSD']+['J']*2

Probieren Sie es online!

Alt:

Python 2 , 68 Bytes

print[a+b for a in['10']+list('A23456789JQK')for b in'CHSD']+['J']*2

print['1'[a>'0':]+a+b for a in'A234567890JQK'for b in'CHSD']+['J']*2

Gerettet

  • -3 Bytes dank ovs

Das ist eine ziemlich gründliche Antwort ...
AJFaraday


Wenn wir nicht verwenden müssen print, können wir es nicht [*[a+b for a in['10',*'A23456789JQK']for b in'CHSD'],*'JJ']in 59 Bytes tun . Die Haskell-Lösung muss nicht auf stdout ausgegeben werden. Warum sollte Python?
Enrico Borba

5

K (ngn / k) , 30 Bytes

"JJ",/("AKQJ",$2+!9),'/:"SHDC"

Probieren Sie es online!

!9 ist die Liste 0 1 ... 8

2+!9 ist die Liste 2 3 ... 10

$ zu bespannen

, verketten

,'/:verketten jeweils mit jedem Recht, dh kartesischen Produkt; Normalerweise ist es ,/:\:oder ,\:/:aber auf der rechten Seite haben wir nur Skalare ( "SHDC"), so dass wir 'anstelle von verwenden können\:

"JJ",/Verbinden Sie die Liste auf der rechten Seite mit "JJ"dem Anfangswert für die Reduzierung


5

MS-SQL, 137 Bytes

SELECT v.value+s.value
FROM STRING_SPLIT('A-2-3-4-5-6-7-8-9-10-J-Q-K','-')v,STRING_SPLIT('H-S-D-C--','-')s
WHERE s.value>''OR v.value='J'

Ein Array von Werten in SQL wird als separate Abfragezeilen zurückgegeben. Verwendet die in SQL 2016 eingeführteSTRING_SPLIT Funktion .

Es schließt die Joker ein, indem es zwei "leere Zeichenfolgen" hinzufügt, um das vorhandene "J" für Jack zu nutzen, und dann die Zeilen herausfiltert, die wir nicht wollen. Kürzer als die Verwendung von UNION ALLAnweisungen zum Hinzufügen der Joker.


Was passiert, wenn Sie das zweite Argument für STRING_SPLIT als leeren String definieren? Ich verwende kein MS-SQL, aber in vielen Sprachen würde es Ihnen alle Zeichen in einem Array geben.
AJFaraday

@AJFaraday Das wäre praktisch, aber es funktioniert nicht Procedure expects parameter 'separator' of type 'nchar(1)/nvarchar(1)'. Es wäre auch praktisch, wenn Sie beim Golfen ein Komma verwenden würden, wenn Sie den zweiten Parameter weglassen, aber dies wird auch nicht unterstützt. Ein weiterer Punkt für die GolfSQLSprache, die ich wahrscheinlich nie zum Schreiben kommen werde :)
BradC

4

Ruby , 61 Bytes

->{[*0..52,52].map{|x|['JAKQ'[w=x%13]||w-2,'SDHC'[x/13]]*''}}

Probieren Sie es online!


Das ist eine Fähigkeit, das J für Jack und Joker zu benutzen :-)
Marty Neal

Können Sie nicht 4 Bytes sparen, indem Sie ->{... }weglassen? Es läuft von alleine und benötigt keine Parameter, es sollte also kein Lambda sein
Piccolo

4

C # .NET, 114 Bytes

o=>(new System.Text.RegularExpressions.Regex("1?.").Replace("AJQK2345678910","$0H,$0S,$0D,$0C,")+"J,J").Split(',')

Port meiner Java-Antwort ( Dank an @mazzy ) .

Probieren Sie es online aus.


Interessante Alternative von 119 Bytes von @Corak .

using System.Linq;o=>new[]{"J","J"}.Concat(from s in"SDCH"from n in"A234567890JQK"select(n=='0'?"10":n+"")+s).ToArray()

Probieren Sie es online aus.

Wenn ein System.Collections.Generic.IEnumerable<string>statt string[]ein akzeptabler Output ist, kann das Trailing .ToArray()verworfen werden, so dass es 109 Bytes wird .

Erläuterung:

using System.Linq;       // Required import for the `from .. in ..` and `select` parts
o=>                      // Method with empty unused parameter and string-array return-type
  new[]{"J","J"}         //  Return a string-array containing two times "J"
   .Concat(              //  And add:
     from s in"SDCH"     //   Loop over the suits
       from n in"A234567890JQK"
                         //    Inner loop over the cards
         select(n=='0'?  //     If the current card item is '0'
                 "10"    //      Use 10 instead
                :        //     Else:
                 n+"")   //      Simply use the card item as is
                      +s)//     And append the suit
   .ToArray()            //  Convert the IEnumerable to an array

4

PHP, 108 99 97 Bytes

Probieren Sie es online!

Probieren Sie es online! (Edit 1)

Code

<?php $r=[J,J];foreach([A,J,Q,K,2,3,4,5,6,7,8,9,10]as$t)
$r=array_merge($r,[H.$t,S.$t,D.$t,C.$t]);

Versucht, rein PHP-Funktionen zu verwenden, aber bytecount war niedriger mit einer Schleife :(

Ausgabe (mit print_r)

Array
(
[0] => J
[1] => J
[2] => HA
[3] => SA
[4] => DA
[5] => CA
[6] => HJ
[7] => SJ
[8] => DJ
[9] => CJ
[10] => HQ
[11] => SQ
[12] => DQ
[13] => CQ
[14] => HK
[15] => SK
[16] => DK
[17] => CK
[18] => H2
[19] => S2
[20] => D2
[21] => C2
[22] => H3
[23] => S3
[24] => D3
[25] => C3
[26] => H4
[27] => S4
[28] => D4
[29] => C4
[30] => H5
[31] => S5
[32] => D5
[33] => C5
[34] => H6
[35] => S6
[36] => D6
[37] => C6
[38] => H7
[39] => S7
[40] => D7
[41] => C7
[42] => H8
[43] => S8
[44] => D8
[45] => C8
[46] => H9
[47] => S9
[48] => D9
[49] => C9
[50] => H10
[51] => S10
[52] => D10
[53] => C10
)

Bearbeiten

Dank @JoKing Eingabe Änderung explode(" ","H$t S$t D$t C$t")für[H.$t,S.$t,D.$t,C.$t]


Wäre nicht [H.$t,S.$t,D.$t,C.$t]kürzer als explodieren?
Jo King

Sie haben vollkommen recht, ich werde Ihren Rat annehmen, danke.
Francisco Hahn


2
@FranciscoHahn, sorry, das habe ich nicht bemerkt! Dann ist hier eine 87-Byte-Version: Probieren Sie es online aus!
Night2

1
@ Nigth2 Ich hatte keine Ahnung, dass Sie so verwenden können array_push($arr, $item1,$item2,$item3...$itemN), schön
Francisco Hahn

4

SMBF , 169 Bytes

repräsentiert ein literales NUL-Byte \x00.

<[.<]␀J J HA HK HQ HJ H01 H9 H8 H7 H6 H5 H4 H3 H2 SA SK SQ SJ S01 S9 S8 S7 S6 S5 S4 S3 S2 DA DK DQ DJ D01 D9 D8 D7 D6 D5 D4 D3 D2 CA CK CQ CJ C01 C9 C8 C7 C6 C5 C4 C3 C2

Dies ist die naive Lösung.

Da dieses Programm ein NUL-Byte enthält, gibt es keine einfache Möglichkeit, TIO zu verwenden. Führen Sie dies im Python-Interpreter mit aus

data = bytearray(b'<[.<]\x00J J HA HK HQ HJ H01 H9 H8 H7 H6 H5 H4 H3 H2 SA SK SQ SJ S01 S9 S8 S7 S6 S5 S4 S3 S2 DA DK DQ DJ D01 D9 D8 D7 D6 D5 D4 D3 D2 CA CK CQ CJ C01 C9 C8 C7 C6 C5 C4 C3 C2')


@EriktheOutgolfer Wie hast du das generiert?
mbomb007

1
Ich öffnete die F12-Entwicklertools, wählte das Textfeld aus, ging zur Konsole und tippte, nachdem ich den Teil vor dem Null-Byte kopiert und eingefügt hatte, ein $0.value+='\0'.
Erik der Outgolfer

4

Japt, 32 30 26 Bytes

'J²¬c"JQKA"¬c9õÄ)ï+"CHSD"q

Probier es aus

'J²¬c"JQKA"¬c9õÄ)ï+"CHSD"q
'J                             :Literal "J"
  ²                            :Repeat twice
   ¬                           :Split
    c                          :Concatenate
     "JQKA"¬                   :  Split "JQKA"
            c                  :  Concatenate
             9õ                :    Range [1,9]
               Ä               :    Add 1 to each
                )              :  End concatenation
                 ï             :  Cartesian Product
                   "CHSD"q     :    Split "CHSD"
                  +            :  Join each pair to a string

3

Batch, 118 Bytes

@for %%s in (C D H S)do @(for /l %%r in (2,1,10)do @echo %%r%%s)&for %%r in (J Q K A)do @echo %%r%%s
@echo J
@echo J

3

J , 41 Bytes

'J';^:2,'HCDS',&.>/~(":&.>2+i.9),;/'AJQK'

Probieren Sie es online!


1
'J';^:2,;&.>{_13<\'10';;/'23456789AJKQHCDS'etwas einfacher, aber für 43. Ich habe das Gefühl, dass es hier mehr zu rasieren gibt ... aber ich kann nicht sehen, wie.
Jonah

@Jonah Ja, ich habe auch etwas ähnliches ausprobiert und ich bin mir sicher, dass meine Lösung weiter verbessert werden kann, aber es gibt immer neue Probleme zu lösen :)
Galen Ivanov

3

R , 67 66 Bytes

c(paste(rep(c('A',2:10,J<-'J','Q','K'),4),c('S','D','H','C')),J,J)

Probieren Sie es online!

Nur ein Byte mehr als die Golf-Lösung von digEmAll . Inspiriert von Giuseppes Lösung für diese Herausforderung - derselbe Giuseppe, der ein Byte nach dem anderen golfen hat!

Ich poste separat, da es ein etwas anderer Ansatz ist, der die Tatsache ausnutzt, dass 4 kein Divisor von 13 ist und die Ausgabe nicht in einer bestimmten Reihenfolge erfolgen muss.


oh haha ​​ich habe das nicht bemerkt, ich habe diese Lösung auf der anderen kommentiert
Giuseppe

@ Giuseppe Ich war sehr nahe dran zu kommentieren, anstatt mich selbst zu posten. Ich glaube, ich konnte dem Drang nach Antworten einfach nicht widerstehen :)
JayCe

iiies ist genauso golfen wie digemalls antwort :-) versuche es online
Giuseppe

@ Ich habe gerade damit experimentiert :) Also können Digemall und ich dank dir ein Byte Golf spielen :)
JayCe

3

C (GCC) , 126 137 133 Bytes

#define S(X)"A"X,"2"X,"3"X,"4"X,"5"X,"6"X,"7"X,"8"X,"9"X,"10"X,"J"X,"Q"X,"K"X,
#define c (char*[54]){S("S")S("D")S("H")S("C")"J","J"}

Probieren Sie es online!

+11 Bytes für mehr Vollständigkeit dank Jakob.

-4 Bytes dank Zachary

Meistens wird der Präprozessor missbraucht, um die Anzüge zu komprimieren. Könnte wahrscheinlich out-golfed sein, ist aber in jeder Hinsicht ziemlich effizient.


1
Ich würde behaupten, dass dies ckeine [...] seltsame Funktion ist, sondern eine in einem Makro gespeicherte Array-Deklaration. Eine solche Form der Ausgabe ist meines Wissens standardmäßig nicht zulässig.
Jonathan Frech

1
Wenn c kein Array ist, handelt es sich um ein In-Place-Literal. Bei jedem Aufruf von cin der Quelle wird eine neue Kopie des Arrays in der resultierenden ausführbaren Datei erstellt (Optimierungen vorbehalten). Der Code char *a[] = c; char *b[] = c;erstellt also zwei tiefe Kopien von c. Dieses Verhalten ist auch das, was Sie von einer Funktion erwarten würden.
LambdaBeta

1
Wenn die Ausgabe der Ganzzahl Null eine Herausforderung darstellen würde, würden Sie den C-Code als c=0;eine gültige Übermittlung betrachten, die cals Funktion angezeigt wird?
Jonathan Frech

1
nein, aber ich würde für #define z 0gültig halten. Die Überlegung ist, dass: c=0; c++; x=c;Ergebnisse x == 1so cnicht viel wie eine Funktion handeln. In der Zwischenzeit #define z 0 c=z; c++; x=z;wirkt sich das x == 0also zwie eine Funktion aus.
LambdaBeta

1
Ich halte das nicht für einen fairen Vergleich, da Sie zuerst die angenommene Funktion und dann nur den Rückgabewert der angenommenen Funktion ändern. z=0;/**/c=z;c++;x=z;ergibt x==0, zwirkt also wie eine Funktion.
Jonathan Frech

3

Javascript (ES6) 77 74 72 Bytes

Dies ist ein vollständiges Programm.

`J,J,${[..."A23456789JQK",10].map(c=>[..."SDHC"].map(s=>c+s))}`.split`,`

1
Nett. Sie können einige Bytes einsparen, indem Sie Kommas aufteilen, anstatt Folgendes zu verketten: BTJ,J,${[..."A23456789JQK","10"].map(c=>[..."SDHC"].map(s=>c+s))}BT.splitBT,BT (wobei BT ein Backtick ist).
Rick Hitchcock

Super Vorschlag! Vielen Dank.
MattH

3

C (gcc, clang), 138 Bytes

#define p(c)putchar(c)
int main(){for(char*q,*r="CDHS";*r;r++)for(q="A234567890JQK";*q;q++)(48==*q)&&p(49),p(*q),p(*r),p(32);puts("J J");}

Ansatz ist es, die Sequenzen in Zeichen-Arrays zu kodieren.

Beispielausgabe

AC AD AH AS 2C 2D 2H 2S 3C 3D 3H 3S 4C 4D 4H 4S 5C 5D 5H 5S 6C 6D 6H 6S 7C 7D 7H 7S 8C 8D 8H 8S 9C 9D 9H 9S 10C 10D 10H 10S JC JD JH JS QC QD QH QS KC KD KH KS J J

Probieren Sie es online!


Hinweis: Sie können eine einzige verwenden printf, um alle putchars loszuwerden .
Dennis


1
In Bezug auf Ihre Ausgabemethode erlaubt das OP kein Drucken .
Jonathan Frech

Aufbauend auf Jonathan Frech und Dennis 113 Bytes
Ceilingcat

3

Oracle SQL, 164 Byte

Keine Golfsprache, aber ...

SELECT CASE WHEN LEVEL>52THEN'J'ELSE DECODE(MOD(LEVEL,13),1,'A',11,'J',12,'Q',0,'K',MOD(LEVEL,13))||SUBSTR('HDSC',CEIL(LEVEL/13),1)END FROM DUAL CONNECT BY LEVEL<55

Probieren Sie es online aus - SQL Fiddle



Postgres übertrifft dies beinahe mit nur einer Zeichenfolge von 172 Bytes. Wählen Sie AS, 2S, 3S, 4S, 5S, 6S, 7S, 8S, 9S, 10S, JS, QS, KS, AD, 2D, 3D, 4D, 5D aus. 6D, 7D, 8D, 9D, 10D, JD, QD, KD, AH, 2H, 3H, 4H, 5H, 6H, 7H, 8H, 9H, 10H, JH, QH, KH, Wechselstrom, 2C, 3C, 4C, 5C, 6C, 7C, 8C, 9C, 10C, JC, QC, KC, J, J ''
dwana

@dwana Dies ist kein Array von Zeichenfolgen (oder, da dies SQL ist, eine Reihe von Zeilen). Sie müssten die Zeichenfolge in Zeilen (oder Spalten) aufteilen, um die Anforderungen der Frage zu erfüllen. Wenn Sie das als separate PostgreSQL-Lösung tun möchten, würde ich das gerne sehen.
MT0

Entschuldigung, habe die Array-Anforderung nicht gesehen
dwana

3

Lua ,156 127 138 129 Bytes

loadstring'r={"J","J"}for x=1,52 do p=x%4+1r[#r+1]=({"A",2,3,4,5,6,7,8,9,10,"J","Q","K"})[x%13+1]..("SDHC"):sub(p,p)end return r'

Probieren Sie es online!

Basierend auf Jo Kings Code. Wie er in den Kommentaren angedeutet hat, war meine ursprüngliche Antwort nicht gültig (ich lerne immer noch, wie Code Golf funktioniert) und verknüpfte eine bessere und gültige Antwort. Dann habe ich es kleiner gemacht.


Ursprüngliche Lösung (156 Bytes):

r = {} s = "SDHC" c = {"J", "Q", "K"} t = table.insert für x in s: gmatch "." do für y = 1,13 do t (r, (y == 1 und "A" oder y> 10 und c [y-10] oder y) .. x) ende ende für _ = 1,2 do t (r, "J") ende
r={} -- initializes the result table
s="SDHC" -- initializes the suits' string, it's better to be a string because we're just looping through it
c={"J","Q","K"} -- initializes some of the special cards

t=table.insert -- stores the table.insert call inside the 't' variable

for x in s:gmatch"."do -- loops through the suits, calling each one 'x'
  for y=1,13 do -- 'y' is the current card

    t(r,(y==1 and"A"or y>10 and c[y-10]or y)..x) -- adds the card accompanied by the suit to the result ('r') table
      -- y==1 and"A"or y>10 and c[y-10]or y  means if we're at the first card, it's an "A", else if we're past the 10th card, it's a special card, else, it's the number itself

  end
end
for _=1,2 do t(r, "J")end -- loop 2 times, adding a "J" to the result table

Ich möchte nur sagen, dass ich neu in diesem Code Golf-Bereich bin. Wenn ich also etwas falsch mache, können Sie es mir gerne mitteilen. Ich weiß, dass diese Antwort nicht die kleinste ist, ich wollte mich nur selbst herausfordern.

Wenn Sie Vorschläge zur Reduzierung meines Codes haben, können Sie dies auch sagen. :)


1
Willkommen auf der Seite!
Weizen-Assistent

@WW danke! Hahah: D
Visckmart

Was passiert mit dem Tisch r? Entweder müssen Sie es auf STDOUT drucken oder in eine Funktion ändern und zurückkehrenr
Jo King

Ich bin kein Experte für Lua, aber hier ist eine gültige anonyme 142-Byte-Funktion
Jo King


3

Perl 6 ,  43  42 Bytes

{|(|(2..10),|<A J Q K>X~ <S D H C>),|<J J>}

Versuch es

{|(|(^9+2),|<A J Q K>X~ <S D H C>),|<J J>}

Probieren Sie es von Jo King

Erweitert:

{  # bare block lambda

    |(  # flatten into outer list

        |(  # flatten into left-side list for X~
          ^9 + 2
          # 0+2 ..^ 9+2
          #   2 ..^ 11
          #   2 ..  10
        ),
        |   # flatten into left-side list for X~

          < A J Q K >

      X~    # cross using &infix:« ~ » (string concatenation)

        <S D H C>

    ),
    |< J J > # flatten two `J`s into outer list
}


3

QBasic 4.5, 114 142 127 Bytes

dim r$(54)
FOR i=1TO 52
m=i MOD 13
r$(i)=MID$("JQKA2345678910",1+m,1-(m=12))+MID$("CDHS",(i-1)\13+1,1)
NEXT
r$(53)="J
r$(54)="J

Versionshinweise:

  • V1.0 Erstbereitstellung
  • V1.1 hat die Herausforderungsanforderungen falsch interpretiert und auf ein teureres Array umgestellt r$ . Der ganze Rest des Codes ist ziemlich gleich.
  • V1.2 Vorschläge von @TaylorScott führen zu einer vollständigen Umschreibung und sparen 15 Bytes!

Beispielausgabe

Wenn wir dieses Snippet zu unserem Code hinzufügen, können wir sehen, was darin enthalten ist r$:

for i = 1 to ubound(r$)
?r$(i)
next

QC
KC
AC
2C
3C
4C
5C
6C
7C
8C
9C
10C
JC
QD
KD
AD
[... snip ...]
6S
7S
8S
9S
10S
JS
J
J

Aber wie? Nun, lassen Sie mich Ihnen sagen:

dim r$(54)          ' create a 54-slot array for our results
FOR i=1TO 52        ' Loop through the numbers 1-52 in var i
m=i MOD 13          ' Take i mod 13 to select a value (saved as m)
                    ' , and (not saved) i intdiv 13 to get a suit
r$(i)=              ' assigns to slot i in the result array
  MID$("JQKA2345678910"  ' a substring from the string with all the values
  ,1+m                   ' from position 1-13 (13 % 13 = 0, but QBasic strings are 1-based.
                         ' Hence the + 1)
  ,1-(m=12))             ' taking 1 char by default, and 2 for the Ten
                         ' Note that m=12 evaluates to 0 for 0-11, and to -1 for 12
  + MID$("CDHS",(i-1)\13+1,1)  ' and take 1 char from the suits-string
NEXT
r$(53)="J           ' Then append 2 jokers
r$(54)="J           ' These strings are auto-closed by the QBasic compiler.

Dies entspricht nicht den Anforderungen für das Array von Zeichenfolgen, und das Drucken auf STDOUTist ausdrücklich untersagt
Taylor Scott,

@TaylorScott Danke, dass du es bemerkt hast. Behoben jetzt, @ 30 Bytes extra.
Steenbergh

1
Ich denke, Sie sollten in der Lage sein, den Bytecount zu senken, indem Sie die a$und -Vars fallen lassen b$und eine Zeile wier$(i)=MID$("JQKA2345678910",1+m,1-(m=12))+MID$("CDHS",(i-1)\13+1,1)
Taylor Scott

1
@ TaylorScott Vielen Dank! Das Ummischen in der Wertefolge ist besonders clever. Nett!
Steenbergh

Dies ist länger als nurPRINT "<output>"
Tornado547

3

Pyth, 26 25 Bytes

+ B\JsM*+tSTc"JQKA"1"CDHS

Dank hakr14 wurde ein Byte gespeichert.
Probieren Sie es hier aus

Erläuterung

+ B\JsM*+tSTc"JQKA"1"CDHS
         tST                Get the range from 2 to 10...
        +   c"JQKA"1        ... plus the list ['J', 'Q', 'K', 'A'].
       *            "CDHS   Take the Cartesian product with the suits.
     sM                     Stick the ranks and suits together.
+ B\J                       Add the jokers.

+\J+\Jund +*2]\Jsind äquivalent und beide 6 Bytes, letzteres wird jedoch als bessere Form angesehen, da bis zu 10 Kopien hinzugefügt werden können, bevor zusätzliche Bytes benötigt werden.
hakr14

@ hakr14 Stimmt, aber ich beschäftige mich nicht mit Codegolf, um den saubersten oder am meisten verallgemeinerbaren Code zu schreiben.
Mnemonic

+\J+\Jkann durch ersetzt werden + B\J, um ein Byte zu speichern.
Hakr14
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.