Générez un jeu de cartes

32

Voici un tableau représentant un jeu de cartes standard, dont deux Jokers.

[
  "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"
]

Il est composé de cette manière:

  • Il y a quatre combinaisons; cœurs, bêches, diamants et massues (H, S, D, C).
  • Chaque costume a une carte pour les numéros 2 à 10, plus 4 cartes `` photo '', Ace, Jack, Queen et King (A, J, Q, K).
  • Pour chaque combinaison de costume et de valeur, il devrait y avoir un élément dans le tableau, qui est une chaîne, et est composé de la valeur suivie de la combinaison (les espaces entre ces derniers sont autorisés).
  • En plus de cela, il y a deux cartes Joker ('J').
  • Écrivez dans la langue de votre choix.
  • Jouez au golf! Essayez de produire cette sortie dans le plus petit nombre d'octets.
  • Peu importe l'ordre dans lequel se trouve la sortie.
AJFaraday
la source
2
@KevinCruijssen c'est correct. La question initiale spécifie les nombres 2 à 10 et un tableau de chaînes en sortie.
AJFaraday
15
Je me demandais juste si vous pouviez obtenir 23456789 en multipliant 2 petits nombres ... seulement pour découvrir que c'est premier!
match
4
@match Étant donné que l'ordre de sortie n'a pas d'importance, vous pouvez peut-être toujours le créer avec des nombres plus petits en le terminant par 2ou 4ou quoi que ce soit d'autre afin qu'il ne soit plus un nombre premier.
Kevin Cruijssen
5
Les règles dans les commentaires ne comptent pas. Si nous ne pouvons pas imprimer le résultat sur STDOUT (et c'est un gros problème si, car il remplace nos valeurs par défaut pour les E / S et empêche les langages sans fonctions ni tableaux de chaînes de participer), cette règle doit être énoncée explicitement dans la spécification de défi.
Dennis
7
Cela n'exclut pas une représentation sous forme de chaîne d'un tel tableau, qui pourrait être imprimé sur STDOUT. Sans la section des commentaires, je n'aurais jamais pensé que cela n'était pas autorisé.
Dennis

Réponses:

29

JavaScript (ES6), 62 60 octets

f=n=>n>51?'JJ':[('JQKA'[k=n>>2]||k-2)+'CDHS'[n&3],...f(-~n)]

Essayez-le en ligne!

Arnauld
la source
Mouvements fluides !!!
Code Whisperer
Je ne savais pas que la syntaxe de propagation existait jusqu'à ce que je lise ceci - très cool
logic8
24

Bash 43 34 octets

d=({A,J,Q,K,{2..10}}{H,S,D,C} J J)

Essayez-le en ligne!

glenn jackman
la source
1
9 octets plus court
Digital Trauma
Je ne pensais pas que les accolades étaient emboîtables. Merci.
glenn jackman
Et là, je me disais "quelle langue est-ce que je connais qui dirige facilement les produits sur des listes de chaînes?" Je n'ai même pas pensé au bon vieux glob!
aschepler
1
L'expansion techniquement des accolades n'est pas un modèle global, c'est sa propre syntaxe spéciale
glenn jackman
13

brainfuck , 200 197 bytes

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

Essayez-le en ligne!

Utilise une cellule négative (+1 octet à corriger), des cellules d'habillage (beaucoup d'o octets à corriger) et 0 sur EOF (+2 octets pour supprimer la dépendance).

Les sorties

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

Explication:

+[[<+>->++<]>]  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
Jo King
la source
C'est plus de 2,5 fois plus court que ma solution. Bien joué.
Le gars au hasard
11

05AB1E , 28 27 25 24 23 octets

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

Essayez-le en ligne.

-1 octet grâce à @Emigna supprimant l' Safter "HSDC", car âcela le fait implicitement.

Explication:

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)

Voir cette astuce 05AB1E (section Comment compresser des chaînes ne faisant pas partie du dictionnaire? ) Pour comprendre pourquoi .•-Ÿ•est "ajqk"et .•ôì•est "cdhs".

Kevin Cruijssen
la source
9

brainfuck , 550 504 octets

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

Essayez-le en ligne!

Ancienne réponse, également en ligne!

Le gars au hasard
la source
8

Java 10, 153 151 125 77 75 octets

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

-28 octets grâce à @ OlivierGrégoire .
-50 octets grâce à @mazzy .

Essayez-le en ligne.

Explication:

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
Kevin Cruijssen
la source
3
essayez de le "AJQK2345678910".replace("1?.","$0H,$0S,$0D,$0C,")+"J,J"diviser.
mazzy
1
Smart @mazzy Merci. Et je le montais déjà, Olivier. :)
Kevin Cruijssen
2
cool! Je crois qu'il est possible de supprimer 2 octets de plus - crochets dans le modèle. voir regex101.com/r/aDbz9C/1
mazzy
1
@mazzy Oh, je ne savais même pas que $0c'était possible en Java. TIL, merci. :)
Kevin Cruijssen
7

APL (Dyalog Unicode) , 29 octets

1 octet enregistré grâce à Probie en utilisant 1+⍳9au lieu de1↓⍳10

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

Essayez-le en ligne!

Ceci est un programme complet. Dans le lien TIO, j'ai activé la boxe afin de pouvoir distinguer les différents éléments du tableau.

Voici la sortie encadrée.

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

'JJ', 2 jokers concaténés à

, la forme ravelée de

∘.,⍨ la matrice créée en concaténant chaque combinaison de

  • 'HCDS' cette chaîne contre

  • 'AKJQ', cette chaîne avec

    • ⍕¨ les formes strictes de chacun

      • 1+⍳9 les nombres 2..10 (1 plus la plage 1..9)
Kritixi Lithos
la source
J'ai changé l'indentation de votre liste dans l'explication. Cela semblait un peu bizarre avec les deux et trois points .. Si cela était prévu pour une raison quelconque, n'hésitez pas à revenir en arrière.
Kevin Cruijssen
@KevinCruijssen Merci, je ne savais pas comment faire, alors j'ai utilisé plusieurs
puces
Oui, je le pensais, c'est pourquoi je l'ai changé. :) Vous avez besoin de multiples de quatre espaces de début avant le -pour le mettre en retrait.
Kevin Cruijssen
7

Befunge-98 (FBBI) , 75 octets

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

Essayez-le en ligne!

Structure du programme

enter image description here

Au début, la pile est remplie de 0's' et jne saute pas par-dessus l'initialisation. L'initialisation pousse 4 * 13 = 52, qui est le compteur de programme. Dans les itérations suivantes, la fin 3fait sauter le pointeur sur cette partie.

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 qui imprime 10:

'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

Résiliation:

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

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

R , 65 octets

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

Essayez-le en ligne!

-2 octets grâce aux suggestions @Giuseppe et @JayCe

digEmAll
la source
1
C'était ma réponse exacte, même si je pense que j'ai utilisé des guillemets doubles au lieu de guillemets simples.
Giuseppe
Désolé, ai-je double-affiché votre réponse? J'ai vérifié mais je n'ai trouvé aucune réponse R ...
digEmAll
Oh non, je venais de tout taper moi-même dans TIO avant de voir le vôtre :-)
Giuseppe
1
Oui, c'est certainement la voie à suivre ici! Bien que les espaces soient prédéfinis selon les spécifications, vous pouvez enregistrer un octet en utilisant paste. @Giuseppe aussi.
JayCe
Je l'ai souligné sur la réponse de JayCe, mais vous pouvez définir x<-'J'à l'intérieur du outerpuis réutiliser en xtant que variable dans l' c()instruction la plus à l'extérieur pour raser un octet: Essayez-le en ligne!
Giuseppe
6

Powershell, 63 61 59 56 octets

-3 octets: merci ConnorLSW

2..10+'AJQK'[0..3]|%{"$_`H";"$_`S";"$_`D";"$_`C"};,'J'*2
mazzy
la source
1
-3 en utilisant une chaîne pour tableau pour la première partie:2..10+'AJQK'[0..4]|%{"$_`H";"$_`S";"$_`D";"$_`C"};,'J'*2
colsw
1
cool! une idée comment supprimer `` ``?
mazzy
1
pour autant que je sache que c'est le moyen le moins cher de décomposer une variable dans une chaîne, j'ai jeté un coup d'œil à une boucle mais c'est plus cher de 2 caractères pour le faire de cette façon.
colsw
6

Perl 5 , 41 octets

sub{J,J,map<"$_"{S,D,H,C}>,A,2..10,J,Q,K}

Essayez-le en ligne!

Dom Hastings
la source
1
Cela m'a appris quelque chose de vraiment intéressant sur le globbing. Agréable.
AmbroseChapel
5

Python 3 , 67 64 octets

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

Essayez-le en ligne!


Python 2 , 78 76 74 68 octets

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

Essayez-le en ligne!

Alt:

Python 2 , 68 octets

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

enregistré

  • -3 octets, grâce aux ovs
TFeld
la source
C'est une réponse assez complète ...
AJFaraday
64 octets
ovs
Si nous n'avons pas à utiliser print, ne pouvons-nous pas le faire [*[a+b for a in['10',*'A23456789JQK']for b in'CHSD'],*'JJ']en 59 octets. La solution Haskell n'a pas besoin de sortir vers stdout, pourquoi Python le ferait-il?
Enrico Borba
5

K (ngn / k) , 30 octets

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

Essayez-le en ligne!

!9 est la liste 0 1 ... 8

2+!9 est la liste 2 3 ... 10

$ à la chaîne

, enchaîner

,'/:concaténer chacun avec chaque droit, c'est-à-dire produit cartésien; normalement c'est ,/:\:ou ,\:/:mais à droite nous avons seulement des scalaires ( "SHDC"), donc nous pouvons utiliser à la 'place de\:

"JJ",/rejoindre (concat réduire) la liste de droite en utilisant "JJ"comme valeur initiale pour la réduction

ngn
la source
5

MS-SQL, 137 octets

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'

Un tableau de valeurs dans SQL est renvoyé sous forme de lignes de requête distinctes. Utilise la STRING_SPLITfonction introduite dans SQL 2016 .

Il inclut les jokers en ajoutant deux combinaisons de "chaîne vierge" pour tirer parti du "J" existant pour Jack, puis en filtrant les lignes que nous ne voulons pas. Plus court que l'utilisation d' UNION ALLinstructions pour ajouter les jokers.

BradC
la source
Que se passe-t-il si vous créez le deuxième argument de STRING_SPLIT une chaîne vide? Je n'utilise pas MS-SQL, mais dans de nombreuses langues, cela vous donnerait tous les caractères d'un tableau.
AJFaraday
@AJFaraday Ce serait pratique, mais cela ne fonctionne pas, vous comprenez Procedure expects parameter 'separator' of type 'nchar(1)/nvarchar(1)'. Il serait également pratique pour le golf s'il était par défaut une virgule si vous omettez le deuxième paramètre, mais il ne le prend pas en charge non plus. Un autre élément pour la GolfSQLlangue que je ne pourrai probablement jamais écrire :)
BradC
4

Rubis , 61 octets

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

Essayez-le en ligne!

GB
la source
C'est une certaine habileté à utiliser le J pour Jack et Joker :-)
Marty Neal
Vous ne pouvez pas économiser 4 octets en omettant le ->{... }? Il fonctionne seul et n'a pas besoin de paramètres, il ne devrait donc pas être un lambda
Piccolo
4

C # .NET, 114 octets

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

Port de ma réponse Java (crédit à @mazzy ) .

Essayez-le en ligne.


Alternative intéressante de 119 octets par @Corak .

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

Essayez-le en ligne.

Si un System.Collections.Generic.IEnumerable<string>au lieu de string[]est une sortie acceptable, la fin .ToArray()peut être supprimée pour devenir 109 octets .

Explication:

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
Kevin Cruijssen
la source
4

PHP, 108 99 97 octets

Essayez-le en ligne!

Essayez-le en ligne! (Modifier 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]);

J'ai essayé d'utiliser des fonctions purement php, mais le nombre d'octets était inférieur avec une boucle :(

Sortie (en utilisant 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
)

modifier

Merci à @JoKing en suggérant un changement explode(" ","H$t S$t D$t C$t")pour[H.$t,S.$t,D.$t,C.$t]

Francisco Hahn
la source
Ne serait pas [H.$t,S.$t,D.$t,C.$t]plus court que d'exploser?
Jo King du
Vous avez absolument raison, allez suivre votre avis, merci.
Francisco Hahn
1
73 octets: essayez-le en ligne!
Night2
2
@FranciscoHahn, désolé, je ne l'ai pas remarqué! Voici donc une version de 87 octets: Essayez-la en ligne!
Night2
1
@ Nigth2 je n'avais aucune idée que vous pouvez utiliser array_push($arr, $item1,$item2,$item3...$itemN)comme ça, gentil
Francisco Hahn
4

SMBF , 169 octets

représente un octet NUL littéral \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

Telle est la solution naïve.

Parce que ce programme contient un octet NUL, il n'y a pas de moyen facile d'utiliser TIO. Exécutez ceci dans le interpréteur Python en utilisant

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')
mbomb007
la source
TIO
Erik the Outgolfer
@EriktheOutgolfer Comment avez-vous généré cela?
mbomb007
1
J'ai ouvert les outils de développement F12, sélectionné la zone de texte en survolant, suis allé à la console et, après avoir copié et collé la partie avant l'octet nul, tapé $0.value+='\0'.
Erik the Outgolfer
4

Japt, 32 30 26 octets

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

Essaye-le

'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
Hirsute
la source
3

Lot, 118 octets

@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
Neil
la source
3

J , 41 octets

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

Essayez-le en ligne!

Galen Ivanov
la source
1
'J';^:2,;&.>{_13<\'10';;/'23456789AJKQHCDS'un peu plus simple mais pour 43. J'ai l'impression qu'il y a plus à raser ici ... mais je ne vois pas comment.
Jonah
@Jonah Oui, j'ai également essayé quelque chose de similaire et je suis sûr que ma solution peut être étudiée plus loin, mais il y a toujours de nouveaux problèmes à résoudre :)
Galen Ivanov
3

R , 67 66 octets

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

Essayez-le en ligne!

Un seul octet de plus que la solution golfier de digEmAll . Inspiré par la solution de Giuseppe à ce défi connexe - le même Giuseppe qui a joué un octet par réponse!

Je publie séparément car c'est une approche légèrement différente qui tire parti du fait que 4 n'est pas un diviseur de 13 et que la sortie n'a pas besoin d'être dans un ordre particulier.

JayCe
la source
oh haha ​​je n'ai pas remarqué cela, j'ai commenté cette solution sur l'autre
Giuseppe
@Giuseppe J'étais très proche de commenter au lieu de me poster. Je suppose que je n'ai tout simplement pas pu résister à l'envie de répondre :)
JayCe
iiiit est aussi golfique que la réponse de digemall :-) essayez-le en ligne
Giuseppe
@J'étais juste en train d'expérimenter avec ça :) donc digemall et moi pouvons jouer un octet grâce à vous :)
JayCe
3

C (gcc) , 126 137 133 octets

#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"}

Essayez-le en ligne!

+11 octets pour être plus complet grâce à Jakob.

-4 octets grâce à Zachary

Abusant principalement du préprocesseur pour comprimer les combinaisons. Pourrait probablement être hors-golf, mais est assez efficace tout compte fait.

LambdaBeta
la source
1
Je dirais que ce cn'est pas une "[...]" fonction "bizarre [...]" mais plutôt une déclaration de tableau stockée dans une macro. À ma connaissance, une telle forme de sortie n'est pas autorisée par défaut.
Jonathan Frech
1
Sauf que c n'est pas un tableau, ce serait un littéral sur place. Chaque «invocation» de cdans la source créera une nouvelle copie du tableau dans l'exécutable résultant (sauf optimisations). Ainsi, le code char *a[] = c; char *b[] = c;crée deux copies complètes de c. Ce comportement correspond également à ce que vous attendez d'une fonction.
LambdaBeta
1
S'il y avait un défi pour sortir le zéro entier, considéreriez-vous le code C comme c=0;une soumission valide, la regardant ccomme une fonction?
Jonathan Frech
1
non, mais je considère #define z 0valable. Le raisonnement est le suivant: les c=0; c++; x=c;résultats dans x == 1so cn'agissent pas comme une fonction. Pendant ce temps, #define z 0 c=z; c++; x=z;il en résulte x == 0donc zagit comme une fonction.
LambdaBeta
1
Je ne pense pas que ce soit une comparaison juste car vous changez d'abord la fonction supposée, puis changez seulement la valeur de retour de la fonction supposée. z=0;/**/c=z;c++;x=z;résulte en x==0, zagit donc comme une fonction.
Jonathan Frech
3

Javascript (ES6) 77 74 72 octets

Ceci est un programme complet.

`J,J,${[..."A23456789JQK",10].map(c=>[..."SDHC"].map(s=>c+s))}`.split`,`
MattH
la source
1
Agréable. Vous pouvez économiser quelques octets en divisant les virgules au lieu de concaténer: BTJ,J,${[..."A23456789JQK","10"].map(c=>[..."SDHC"].map(s=>c+s))}BT.splitBT,BT (où BT est un backtick).
Rick Hitchcock
Super suggestion! Merci.
MattH
3

C (gcc, clang), 138 octets

#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");}

L'approche consiste à coder les séquences dans des tableaux de caractères.

Exemple de sortie

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

Essayez-le en ligne!

Bruce Lueckenhoff
la source
Astuce: vous pouvez utiliser un seul printfpour vous débarrasser de tous les putchars.
Dennis
1
127 octets .
Jonathan Frech
1
Concernant votre méthode de sortie, l'OP ne permet pas l'impression .
Jonathan Frech
Building on Jonathan Frech and Dennis 113 bytes
ceilingcat
3

Oracle SQL, 164 bytes

Not a golfing language but...

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

Try it online - SQL Fiddle

MT0
la source
2
I love that someone answered this with Oracle SQL
AJFaraday
postgres nearly beats this with just a string 172 bytes, 'select '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''
dwana
@dwana That is not an array of strings (or, since this is SQL, a set of rows). You would need to split the string into rows (or columns) to meet the question's specifications. If you want to do that as a separate PostgreSQL solution then I would like to see that.
MT0
sorry, didn't see the array requirement
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'

Try it online!

Based on Jo King's code. As he suggested in the comments, my original answer wasn't valid (I'm still learning how code golf works 😬), and linked a better and valid answer. Then I made it smaller.


Original solution (156 bytes):

r={}s="SDHC"c={"J","Q","K"}t=table.insert for x in s:gmatch"."do for y=1,13 do t(r,(y==1 and"A"or y>10 and c[y-10]or y)..x)end end for _=1,2 do t(r, "J")end
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

I just want to say that I'm new to this Code Golf stuff, so if I'm doing something wrong, feel free to tell me. I know this answer isn't one of the smallest, I just wanted to challenge myself.

If you have suggestions for reducing my code you can say too. :)

Visckmart
la source
1
Welcome to the site!
Wheat Wizard
@WW thanks! Hahah :D
Visckmart
What happens with the table r? Either you need to print it to STDOUT, or change this to a function and return r
Jo King
I'm no expert with Lua, but here's a valid 142 byte anonymous function
Jo King
138 bytes
Jo King
3

Perl 6,  43  42 bytes

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

Try it

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

Try it from Jo King

Expanded:

{  # 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
}
Brad Gilbert b2gills
la source
41 bytes
Jo King
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

Release Notes:

  • V1.0 Initial deploy
  • V1.1 Misread the challenge requirements, so switched to a more expensive array r$. All the rest of the code is pretty much the same.
  • V1.2 Suggestions from @TaylorScott lead to a complete rewrite saving 15 bytes!

Sample output

If we add this snippet to our code, we can see what is put into 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

But how? Well, let me tell you:

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.
steenbergh
la source
This does not meet the Array of strings requirement, and printing to STDOUT is explicitly forbidden
Taylor Scott
@TaylorScott Thanks for noticing. Fixed now, @ 30 bytes extra.
steenbergh
1
I think that you should be able to get the bytecount down by dropping the a$ and b$ vars and using a line something like r$(i)=MID$("JQKA2345678910",1+m,1-(m=12))+MID$("CDHS",(i-1)\13+1,1)
Taylor Scott
1
@TaylorScott Thanks! That reshuffling in the values-string is particularly clever. Nice!
steenbergh
This is longer than just PRINT "<output>"
Tornado547
3

Pyth, 26 25 bytes

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

Saved a byte thanks to hakr14.
Try it here

Explanation

+ 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.

la source
+\J+\J and +*2]\J are equivalent and both 6 bytes, but the latter is considered better form, as it allows for up to 10 copies to be added before any additional bytes are needed.
hakr14
@hakr14 True, but I'm not into code golf for the sake of writing the cleanest or most generalizable code.
+\J+\J can be replaced with + B\J to save a byte.
hakr14