Gere um baralho de cartas


32

Aqui está uma matriz que representa um baralho de cartas padrão, incluindo dois 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"
]

É composto desta maneira:

  • Existem quatro naipes; copas, espadas, diamantes e paus (H, S, D, C).
  • Cada naipe tem uma carta para os números 2 a 10, mais 4 cartas 'Ás', Ás, Valete, Rainha e Rei (A, J, Q, K).
  • Para cada combinação de naipe e valor, deve haver um item na matriz, que é uma sequência, e é composto pelo valor seguido pelo naipe (espaço em branco entre eles é permitido).
  • Além disso, existem duas cartas do Coringa ('J').
  • Escreva em qualquer idioma que desejar.
  • Golf it up! Tente produzir essa saída no menor número de bytes.
  • Não importa em que ordem está a saída.

2
@KevinCruijssen está correto. A pergunta inicial especifica os números 2 a 10 e uma matriz de seqüências de caracteres como uma saída.
AJFaraday

15
Eu só queria saber se você poderia obter 23456789 multiplicando 2 números menores ... apenas para descobrir que é primo!
coincidir com

4
@match Como a ordem da saída não importa, talvez você ainda possa criá-la com números menores terminando-a com 2ou 4ou qualquer outra coisa, para que não seja mais primo.
Kevin Cruijssen

5
As regras nos comentários não contam. Se não pudermos imprimir o resultado em STDOUT (e isso é muito importante, pois substitui nossos padrões de E / S e impede que idiomas sem funções e matrizes de string participem), essa regra deve ser declarada explicitamente na especificação do desafio.
Dennis

7
Isso não descarta uma representação em cadeia de tal matriz, que pode ser impressa em STDOUT. Se não fosse a seção de comentários, eu nunca imaginaria que isso não era permitido.
Dennis

Respostas:




13

brainfuck , 200 197 bytes

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

Experimente online!

Usa uma célula negativa (+1 bytes para corrigir), agrupando células (lotes de bytes para corrigir) e 0 no EOF (+2 bytes para remover a dependência).

Saídas

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

Explicação:

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

Isso é mais de 2,5 vezes menor que a minha solução. Bem feito.
O cara aleatório

11

05AB1E , 28 27 25 24 23 bytes

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

Experimente online.

-1 byte graças a @Emigna removendo o Sdepois"HSDC" , porque âfaz isso implicitamente.

Explicação:

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)

Consulte esta dica 05AB1E (seção Como compactar cadeias de caracteres que não fazem parte do dicionário? ) Para entender por que .•-Ÿ•é "ajqk"e .•ôì•é "cdhs".


9

brainfuck , 550 504 bytes

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

Experimente online!

Resposta antiga, também online!


8

Java 10, 153 151 125 77 75 bytes

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

-28 bytes graças a @ OlivierGrégoire .
-50 bytes graças a @mazzy .

Experimente online.

Explicação:

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
tente "AJQK2345678910".replace("1?.","$0H,$0S,$0D,$0C,")+"J,J"dividir.
Mazzy

11
Smart @mazzy Obrigado. E já estava editando, Olivier. :)
Kevin Cruijssen

2
legal! Eu acredito que é possível remover mais 2 bytes - colchetes no padrão. consulte regex101.com/r/aDbz9C/1
mazzy

11
@mazzy Oh, nem sabia que $0era possível em Java. Até, obrigado. :)
Kevin Cruijssen

7

APL (Dyalog Unicode) , 29 bytes

1 byte economizado graças ao Probie usando em 1+⍳9vez de1↓⍳10

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

Experimente online!

Este é um programa completo. No link TIO, ativei o boxe para que os elementos individuais da matriz pudessem ser distinguidos.

Aqui está a saída em caixa.

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

'JJ', 2 curingas concatenados para

, a forma embaralhada de

∘.,⍨ a matriz criada concatenando todas as combinações de

  • 'HCDS' esta corda contra

  • 'AKJQ', essa string com

    • ⍕¨ as formas rigorosas de cada um

      • 1+⍳9 os números 2..10 (1 mais o intervalo 1..9)

Alterei o recuo da sua lista na explicação. Parecia um pouco estranho com os dois e três pontos. Se isso foi planejado por algum motivo, fique à vontade para reverter.
Kevin Cruijssen 11/06/19

Graças @KevinCruijssen, eu não conseguia descobrir como fazer isso, então eu usei vários pontos de bala hah
Kritixi Lithos

Sim, eu pensei que sim, por isso mudei. :) Você precisa de múltiplos de quatro espaços à esquerda antes do -recuo.
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" <

Experimente online!

Estrutura do programa

insira a descrição da imagem aqui

No início, a pilha é preenchida com 0's' e jnão pula sobre a inicialização. A inicialização empurra 4 * 13 = 52, que é o contador do programa. Nas iterações a seguir, o final 3faz com que o ponteiro pule essa parte.

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

Código que 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

Terminação:

@; ... ;,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)

Experimente online!

-2 bytes graças às sugestões @ Giuseppe e @JayCe


11
Esta foi a minha resposta exata, embora eu acho que usei aspas duplas em vez de aspas simples.
Giuseppe

Desculpe, eu publiquei sua resposta duas vezes? Eu verifiquei, mas não consegui encontrar nenhuma resposta R ...
digEmAll

Oh não, eu apenas tivesse digitado tudo isso me em TIO antes de ver o seu :-)
Giuseppe

11
Sim exterior é definitivamente o caminho a percorrer aqui! Embora o espaço em branco seja premido de acordo com as especificações, você pode salvar um byte usando paste. @Giuseppe também.
JayCe

Eu indiquei isso na resposta de JayCe, mas você pode definir x<-'J'dentro do outere, em seguida, reutilizá-lo xcomo uma variável na c()instrução mais externa para eliminar um byte: Experimente online!
Giuseppe

6

Powershell, 63 61 59 56 bytes

-3 bytes: obrigado ConnorLSW

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

11
-3 usando string para array para a primeira parte:2..10+'AJQK'[0..4]|%{"$_`H";"$_`S";"$_`D";"$_`C"};,'J'*2
colsw

11
legal! alguma idéia como remover `` ``?
Mazzy

11
Até onde eu sei que é a maneira mais barata de dividir uma variável em uma string, dei uma olhada em um loop, mas é mais caro por 2 caracteres fazer dessa maneira.
colsw


5

Python 3 , 67 64 bytes

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

Experimente online!


Python 2 , 78 76 74 68 bytes

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

Experimente 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

salvou

  • -3 bytes, graças a ovs

Essa é uma resposta muito profunda ...
AJFaraday


Se não precisamos usar print, não podemos fazer [*[a+b for a in['10',*'A23456789JQK']for b in'CHSD'],*'JJ']em 59 bytes. A solução Haskell não precisa gerar saída para stdout, por que o Python?
Enrico Borba

5

K (ngn / k) , 30 bytes

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

Experimente online!

!9 é a lista 0 1 ... 8

2+!9 é a lista 2 3 ... 10

$ para sequenciar

, concatenar

,'/:concatenar cada um com cada direito, isto é, produto cartesiano; normalmente é ,/:\:ou ,\:/:mas, à direita, temos apenas escalares ( "SHDC"), para que possamos usar em 'vez de\:

"JJ",/juntar (concat reduzir) a lista à direita usando "JJ"como valor inicial para a redução


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'

Uma matriz de valores no SQL é retornada como linhas de consulta separadas. Usa a STRING_SPLITfunção introduzida no SQL 2016 .

Isso inclui os curingas, adicionando dois fatos de "sequência em branco" para tirar proveito do "J" existente para Jack e filtrando as linhas que não queremos. Mais curto do que usar UNION ALLinstruções para adicionar os curingas.


O que acontece se você transformar o segundo argumento para STRING_SPLIT em uma sequência vazia? Eu não uso o MS-SQL, mas em muitas linguagens daria a você todos os caracteres em uma matriz.
AJFaraday

@AJFaraday Isso seria útil, mas não funciona, você entende Procedure expects parameter 'separator' of type 'nchar(1)/nvarchar(1)'. Também seria útil para jogar golfe se o padrão fosse uma vírgula se você deixasse de fora o segundo parâmetro, mas ele também não é compatível. Outro item para a GolfSQLlíngua que eu provavelmente nunca vou dar a volta a escrever :)
BradC

4

Ruby , 61 bytes

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

Experimente online!


Isso é alguma habilidade para usar o J para ambos Jack e Joker :-)
Marty Neal

Você não pode salvar 4 bytes deixando de fora o ->{... }? Ele roda em sua própria e não precisa de parâmetros, por isso não precisa ser um lambda
Piccolo

4

C # .NET, 114 bytes

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

Porta da minha resposta Java (crédito para @mazzy ) .

Experimente online.


Alternativa interessante de 119 bytes por @Corak .

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

Experimente online.

Se um em System.Collections.Generic.IEnumerable<string>vez de string[]for uma saída aceitável, o final .ToArray()pode ser eliminado, tornando-se 109 bytes .

Explicação:

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

Experimente online!

Experimente online! (Editar 1)

Código

<?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]);

Tentei usar funções puramente php, mas bytecount foi menor com um loop :(

Saída (usando 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
)

Editar

Obrigado a @JoKing, sugerindo alterações explode(" ","H$t S$t D$t C$t")para[H.$t,S.$t,D.$t,C.$t]


Não [H.$t,S.$t,D.$t,C.$t]seria mais curto do que explodir?
Jo rei

Você está absolutamente certo, vai seguir o seu conselho, obrigado.
Francisco Hahn


2
@FranciscoHahn, desculpe, eu não percebi isso! Aqui está uma versão de 87 bytes: Experimente online!
night2

11
@ Nigth2, eu não tinha ideia de que você pode usar array_push($arr, $item1,$item2,$item3...$itemN)assim, legal #
Francisco Hahn

4

SMBF , 169 bytes

representa um byte NUL literal \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

Esta é a solução ingênua.

Como este programa contém um byte NUL, não há maneira fácil de usar o TIO. Execute isso no interpretador Python usando

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 Como você gerou isso?
mbomb007

11
Abri as ferramentas de desenvolvedor do F12, selecionei a caixa de texto ao passar o mouse, fui para o console e, depois de copiar e colar a parte antes do byte nulo, digitado $0.value+='\0'.
Erik the Outgolfer

4

Japt, 32 30 26 bytes

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

Teste-o

'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

Lote, 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'

Experimente online!


11
'J';^:2,;&.>{_13<\'10';;/'23456789AJKQHCDS'um pouco mais simples, mas com 43 anos. Sinto que há mais para fazer a barba aqui ... mas não consigo ver como.
Jonah

@Jonah Sim, eu também tentou algo semelhante e tenho certeza que a minha solução pode ser golfed ainda mais, mas há sempre novos problemas a serem resolvidos :)
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)

Experimente online!

Apenas mais um byte que a solução de golfe da digEmAll . Inspirado pela solução de Giuseppe para este desafio relacionado - o mesmo Giuseppe que jogou um byte de resposta!

Estou publicando separadamente, pois é uma abordagem um pouco diferente, aproveitando o fato de que 4 não é um divisor de 13 e que a saída não precisa estar em nenhuma ordem específica.


ah haha ​​eu não percebi isso, comentei essa solução por outro
Giuseppe

@ Giuseppe Eu estava muito perto de comentar em vez de me postar. Acho que não resisti à vontade de responder :)
JayCe

iiiit é tão golfy quanto a resposta do digemall :-) experimente on-line
Giuseppe

@ Eu estava apenas experimentando isso :) para que tanto o digemall quanto eu possamos jogar um byte graças a você :)
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"}

Experimente online!

11 bytes para ser mais completo, graças a Jakob.

-4 bytes graças a Zachary

Abuso principalmente de pré-processador para comprimir os fatos. Provavelmente poderia ser fora do golfe, mas é bastante eficiente considerando todas as coisas.


11
Eu argumentaria que cnão é uma "[...] 'função' estranha '", [...] mas uma declaração de matriz armazenada em uma macro. Essa forma de saída é, até onde sei, não é permitida por padrão.
111318 Jonathan Frech

11
Exceto c não é uma matriz, seria um literal no local. Cada 'invocação' de cna fonte criará uma nova cópia da matriz no executável resultante (otimizações de restrição). Assim, o código char *a[] = c; char *b[] = c;cria duas cópias profundas de c. Esse comportamento é o que você esperaria de uma função também.
LambdaBeta

11
Se houvesse um desafio para gerar o número inteiro zero, você consideraria o código C c=0;um envio válido, visualizando ccomo uma função?
Jonathan Frech

11
não, mas eu consideraria #define z 0válido. O raciocínio é que: c=0; c++; x=c;os resultados em x == 1tão cnão age muito parecido com uma função. Enquanto isso #define z 0 c=z; c++; x=z;não resultar em x == 0modo zage como uma função.
LambdaBeta

11
Eu não acho que seja uma comparação justa quando você primeiro altera a função suposta, depois apenas altera o valor de retorno da função suposta. z=0;/**/c=z;c++;x=z;resulta em x==0, portanto, zatua como uma função.
Jonathan Frech

3

Javascript (ES6) 77 74 72 bytes

Este é um programa completo.

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

11
Agradável. Você pode salvar alguns bytes dividindo vírgulas em vez de concatenar: BTJ,J,${[..."A23456789JQK","10"].map(c=>[..."SDHC"].map(s=>c+s))}BT.splitBT,BT (onde BT é um backtick).
Rick Hitchcock

Sugestão impressionante! Obrigado.
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");}

A abordagem é codificar as seqüências nas matrizes de caracteres.

Saída de amostra

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

Experimente online!


Dica: você pode usar um único printfpara se livrar de todos os putchars.
Dennis


11
Em relação ao seu método de saída, o OP não permite impressão .
111318 Jonathan Frech

Com base em Jonathan Frech e Dennis 113 bytes
roofcat

3

Oracle SQL, 164 bytes

Não é uma linguagem de golfe, mas ...

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

Experimente online - SQL Fiddle


2
Eu amo que alguém respondeu isso com Oracle SQL
AJFaraday

O postgres quase supera isso com apenas uma string de 172 bytes, 'selecione' 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 Essa não é uma matriz de strings (ou, como SQL, um conjunto de linhas). Você precisaria dividir a string em linhas (ou colunas) para atender às especificações da pergunta. Se você quiser fazer isso como uma solução separada do PostgreSQL, gostaria de ver isso.
MT0

Desculpe, não viu a exigência variedade
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'

Experimente online!

Baseado no código de Jo King. Como ele sugeriu nos comentários, minha resposta original não era válida (ainda estou aprendendo como o code golf funciona 😬) e vinculei uma resposta melhor e válida. Então eu fiz menor.


Solução original (156 bytes):

r = {} s = "SDHC" c = {"J", "Q", "K"} t = tabela.insira x em s: gmatch "." faça para y = 1,13 faça t (r, (y == 1 e "A" ou y> 10 ec [y-10] ou y) .. x) fim final para _ = 1,2 do t (r, "J") final
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

Eu só quero dizer que sou novo nesse material do Code Golf, por isso, se estou fazendo algo errado, fique à vontade para me dizer. Eu sei que essa resposta não é uma das menores, eu só queria me desafiar.

Se você tiver sugestões para reduzir meu código, também pode dizer. :)


11
Bem vindo ao site!
Assistente de trigo

@WW thanks! Hahah: D
Visckmart

O que acontece com a mesa r? Ou você precisa imprimi-lo para STDOUT, ou alterá-lo para uma função e retornarr
Jo rei

Não sou especialista com Lua, mas aqui está um válido função anônima 142 bytes
Jo rei


3

Perl 6 ,  43  42 bytes

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

Tente

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

Experimente de Jo King

Expandido:

{  # 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

Notas da versão:

  • V1.0 Implementação inicial
  • V1.1 Leia mal os requisitos do desafio, portanto mudei para uma matriz mais cara r$. Todo o resto do código é praticamente o mesmo.
  • As sugestões da V1.2 do @TaylorScott levam a uma reescrita completa, economizando 15 bytes!

Saída de amostra

Se adicionarmos esse trecho ao nosso código, podemos ver o que é colocado em 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

Mas como? Bem, deixe-me dizer-lhe:

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.

Isso não atender a matriz de exigência cordas, e imprimindo STDOUTé explicitamente proibido
Taylor Scott

@TaylorScott Obrigado por perceber. Corrigido agora, @ 30 bytes extras.
steenbergh

11
Eu acho que você deve ser capaz de obter o bytecount para baixo, soltando o a$e b$Vars e usando uma linha algo comor$(i)=MID$("JQKA2345678910",1+m,1-(m=12))+MID$("CDHS",(i-1)\13+1,1)
Taylor Scott

11
@TaylorScott Thanks! Essa reorganização na cadeia de valores é particularmente inteligente. Agradável!
steenbergh

Isso é mais do que apenasPRINT "<output>"
Tornado547

3

Pitão, 26 25 bytes

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

Guardou um byte graças a hakr14.
Experimente aqui

Explicação

+ 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+\Je +*2]\Jsão equivalentes e ambos os 6 bytes, mas o último é considerado de melhor forma, pois permite que até 10 cópias sejam adicionadas antes que sejam necessários bytes adicionais.
hakr14

@ hakr14 É verdade, mas não gosto de código de golfe para escrever o código mais limpo ou mais generalizável.

+\J+\Jpode ser substituído por + B\Jpara salvar um byte.
hakr14
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.