카드 덱 생성


32

다음은 두 조커를 포함하여 표준 카드 덱을 나타내는 배열입니다.

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

다음과 같이 구성됩니다.

  • 네 벌이있다; 하트, 스페이드, 다이아몬드 및 클럽 (H, S, D, C).
  • 각 슈트에는 숫자 2에서 10까지의 카드 하나와 4 개의 '사진'카드, 에이스, 잭, 퀸 및 킹 (A, J, Q, K)이 있습니다.
  • 수트와 값의 각 조합에 대해 배열에 하나의 항목이 있어야하며, 이는 문자열이며 값 뒤에 수트가 뒤 따릅니다 (이들 사이의 공백은 허용됨).
  • 그 위에 두 개의 조커 카드 ( 'J')가 있습니다.
  • 원하는 언어로 작성하십시오.
  • 골프! 이 출력을 최소 바이트 수로 생성하십시오.
  • 출력 순서가 중요하지 않습니다.

2
@KevinCruijssen 맞습니다. 초기 질문은 2에서 10까지의 숫자와 출력으로 문자열 배열을 지정합니다.
AJFaraday

15
작은 숫자 2 개를 곱하여 23456789를 얻을 수 있는지 궁금합니다.
와 일치

4
@match 출력의 순서는 중요하지 않으므로 더 이상 소수가 아닌 다른 것으로 끝내 2거나 더 작은 숫자로 출력을 만들 수 있습니다 4.
케빈 크루이 센

5
주석의 규칙은 포함되지 않습니다. 결과를 STDOUT으로 인쇄 할 수없는 경우 (그리고 I / O의 기본값을 무시하고 함수 및 문자열 배열이없는 언어가 참여하지 못하도록 막는 경우), 해당 규칙은 챌린지 사양에 명시 적으로 명시 되어야합니다.
Dennis

7
STDOUT에 인쇄 할 수있는 그러한 배열의 문자열 표현을 배제하지는 않습니다. 코멘트 섹션이 아니라면 이것이 허용되지 않았다고 생각하지 않았을 것입니다.
Dennis

답변:



24

배쉬 43 34 바이트

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

온라인으로 사용해보십시오!



나는 중괄호가 중첩 가능하다고 생각하지 않았습니다. 감사.
glenn jackman 2016 년

그리고 여기서 나는 "문자열 목록에서 제품을 편리하게 지시하는 언어는 무엇입니까?"라고 생각했습니다. 나는 좋은 오래된 글로브에 대해 생각조차하지 않았다!
aschepler 2018 년

1
기술적으로 중괄호 확장, 그것은 자신의 특별한 구문 글로브 패턴입니다하지 않습니다
글렌 잭맨

13

brainfuck , 200 197 바이트

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

온라인으로 사용해보십시오!

하나의 네거티브 셀 (수정하려면 +1 바이트)을 사용하고 셀을 래핑 (o '바이트는 고정)하고 EOF (0은 종속을 제거하기 위해 +2 바이트)를 래핑합니다.

출력

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

설명:

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

내 솔루션보다 2.5 배 이상 짧습니다. 잘 했어.
무작위 남자

11

05AB1E , 28 27 25 24 23 바이트

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

온라인으로 사용해보십시오.

-1 바이트 덕분에 @Emigna는 , 제거 S후를 "HSDC"하기 때문에, â암시 적으로이 작업을 수행합니다.

설명:

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)

이 05AB1E 광산의 팁을 참조하십시오 (섹션 압축 문자열 사전의 일부에 어떻게? ) 이유를 이해하는 .•-Ÿ•것입니다 "ajqk"하고 .•ôì•있다 "cdhs".


9

브레인 퍽 , 550 504 바이트

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

온라인으로 사용해보십시오!

온라인 답변!


8

자바 10 153 151 125 77 75 바이트

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

@ OlivierGrégoire 덕분에 -28 바이트 . @mazzy
덕분에 -50 바이트 .

온라인으로 사용해보십시오.

설명:

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
시도 "AJQK2345678910".replace("1?.","$0H,$0S,$0D,$0C,")+"J,J"하고 나누십시오.
mazzy

1
똑똑한 @ 매지 감사합니다. 이미 편집하고있었습니다, 올리비에 :)
Kevin Cruijssen 2016 년

2
시원한! 패턴에서 대괄호를 2 바이트 더 제거 할 수 있다고 생각합니다. regex101.com/r/aDbz9C/1
mazzy

1
@mazzy 아, $0Java 에서도 가능 하다는 것을 몰랐습니다 . 틸, 고마워 :)
Kevin Cruijssen 2016 년

7

APL (Dyalog Unicode) , 29 바이트

1+⍳9대신 Probie 덕분에 1 바이트 절약1↓⍳10

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

온라인으로 사용해보십시오!

이것은 전체 프로그램입니다. TIO 링크에서는 배열의 개별 요소를 구별 할 수 있도록 권투 기능을 활성화했습니다.

박스 출력입니다.

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

'JJ', 2 명의 조커가

, 뾰족한 형태

∘.,⍨ 모든 조합을 연결하여 생성 된 행렬

  • 'HCDS' 이 문자열

  • 'AKJQ', 이 문자열

    • ⍕¨ 각각의 문자열 형태

      • 1+⍳9 숫자 2..10 (1에 1..9 범위)

설명에서 목록의 들여 쓰기를 변경했습니다. 두 점과 세 점에 약간 이상하게 보였습니다. 어떤 이유로 의도 된 경우 자유롭게 롤백하십시오.
케빈 크루이 센

@KevinCruijssen 감사합니다. 어떻게해야할지 모르겠습니다. 그래서 여러 개의 글 머리 기호를 사용했습니다.
Kritixi Lithos

그래, 나도 그렇게 생각 했어 내가 바꿨어 :) -들여 쓰기 전에 4 개의 선행 공백의 배수가 필요 합니다.
케빈 크루이 센

7

Befunge-98 (FBBI) , 75 바이트

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

온라인으로 사용해보십시오!

프로그램 구조

enter image description here

처음에는 스택이 가득 0의, 및 j초기화를 통해 이동하지 않습니다. 초기화는 4 * 13 = 52프로그램 카운터입니다. 다음 반복에서 후행 3은 포인터가이 부분 위로 점프하게합니다.

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

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

종료:

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

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

7

R , 65 바이트

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

온라인으로 사용해보십시오!

@Giuseppe 및 @JayCe 제안 덕분에 -2 바이트


1
비록 내가 작은 따옴표 대신 큰 따옴표를 사용했다고 생각하지만 이것은 정답입니다.
주세페

죄송합니다. 답변을 두 번 게시 했습니까? 확인했지만 R 답변을 찾지 못했습니다 ...
digEmAll

오 아니, 난 그냥 당신을보기 전에 TIO에 자신을 모두 입력했습니다 :-)
Giuseppe

1
그렇습니다 외부는 확실히 여기가는 길입니다! 공백은 사양에 따라 전송되지만을 사용하여 1 바이트를 절약 할 수 있습니다 paste. @ 주세페도.
JayCe

JayCe의 대답에서 이것을 지적했지만 바이트 x<-'J'내부 를 설정 outer한 다음 x가장 바깥 쪽 c()명령문 의 변수로 재사용 하여 바이트 를 줄일 수 있습니다.
주세페

6

Powershell, 63 61 59 56 바이트

-3 바이트 : 감사합니다 ConnorLSW

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

1
-3 첫 번째 부분에 문자열을 배열로 사용 :2..10+'AJQK'[0..4]|%{"$_`H";"$_`S";"$_`D";"$_`C"};,'J'*2
colsw

1
시원한! ````를 제거하는 방법에 대한 아이디어가 있습니까?
mazzy

1
내가 문자열에서 변수를 분해하는 가장 저렴한 방법이라는 것을 알고있는 한, 루프를 살펴 보았지만 그렇게하는 데 2 ​​문자가 더 비쌉니다.
colsw


5

파이썬 3 , 67 64 바이트

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

온라인으로 사용해보십시오!


파이썬 2 , 78 76 74 68 바이트

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

온라인으로 사용해보십시오!

Alt :

파이썬 2 , 68 바이트

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

저장

  • ovs 덕분에 -3 바이트

그것은 아주 철저한 대답입니다 ...
AJFaraday


를 사용할 필요가 없으면 59 바이트 를 사용할 print수 없습니다 [*[a+b for a in['10',*'A23456789JQK']for b in'CHSD'],*'JJ']. Haskell 솔루션은 stdout으로 출력 할 필요가 없습니다. 왜 파이썬입니까?
Enrico Borba

5

K (ngn / k) , 30 바이트

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

온라인으로 사용해보십시오!

!9 목록입니다 0 1 ... 8

2+!9 목록입니다 2 3 ... 10

$ 끈으로

, 사슬 같이 잇다

,'/:각각의 권리, 즉 직교 곱과 각각을 연결하고; 일반적으로 ,/:\:또는 ,\:/:오른쪽에 스칼라 ( "SHDC") 만 있으므로 '대신 대신 사용할 수 있습니다\:

"JJ",/"JJ"축소의 초기 값으로 사용하여 오른쪽의 목록을 조인 (연결 축소)


5

MS-SQL, 137 바이트

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'

SQL의 값 배열은 별도의 쿼리 행으로 반환됩니다. SQL 2016에 도입 된STRING_SPLIT 기능을 사용합니다. .

여기에는 Jack의 기존 "J"를 활용하기 위해 두 개의 "빈 문자열"을 추가 한 다음 원하지 않는 행을 필터링하여 조커가 포함됩니다. UNION ALL조커를 추가하기 위해 명령문을 사용하는 것보다 짧습니다 .


STRING_SPLIT의 두 번째 인수를 빈 문자열로 만들면 어떻게됩니까? MS-SQL을 사용하지 않지만 많은 언어에서 배열의 모든 문자를 제공합니다.
AJFaraday

@AJFaraday 편리하지만 작동하지 않습니다 Procedure expects parameter 'separator' of type 'nchar(1)/nvarchar(1)'. 두 번째 매개 변수를 생략하면 쉼표로 기본 설정되어 있으면 골프에 유용하지만 두 가지 매개 변수도 지원하지 않습니다. GolfSQL내가 쓰지 않을 언어에 대한 또 다른 항목 은 아마 :)
BradC

4

루비 , 61 바이트

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

온라인으로 사용해보십시오!


Jack과 Joker 모두 J를 사용하는 것은 약간의 기술입니다 :-)
Marty Neal

->{...을 생략하여 4 바이트를 절약 할 수 없습니다 }. 자체적으로 실행되며 매개 변수가 필요하지 않으므로 람다
Piccolo

4

C # .NET, 114 바이트

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

내 자바 답변 포트 ( @mazzy에 신용 ) .

온라인으로 사용해보십시오.


@Corak에 의한 119 바이트 의 흥미로운 대안 .

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

온라인으로 사용해보십시오.

System.Collections.Generic.IEnumerable<string>대신에 string[]허용되는 출력 인 경우 후행 .ToArray()을 삭제하여 109 바이트됩니다 .

설명:

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 바이트

온라인으로 사용해보십시오!

온라인으로 사용해보십시오! (편집 1)

암호

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

순전히 PHP 기능을 사용하려고했지만 루프 수는 바이트 수보다 적습니다.

출력 (사용 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
)

편집하다

@JoKing에게 다음과 같은 변경 explode(" ","H$t S$t D$t C$t")을 제안 해 주셔서 감사합니다.[H.$t,S.$t,D.$t,C.$t]


하지 않을까요 [H.$t,S.$t,D.$t,C.$t]폭발보다 짧을 수?
Jo King

당신은 절대적으로 옳습니다. 조언을받을 것입니다. 감사합니다.
Francisco Hahn


2
@FranciscoHahn, 죄송합니다, 그 사실을 몰랐습니다! 다음은 87 바이트 버전입니다. 온라인으로 사용해보십시오!
Night2

1
@ Nigth2 나는 당신이 array_push($arr, $item1,$item2,$item3...$itemN)그런 멋진 것을 사용할 수있을 줄 몰랐습니다
Francisco Hahn

4

SMBF , 169 바이트

리터럴 NUL 바이트를 나타냅니다 \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

이것은 순진한 솔루션입니다.

이 프로그램에는 NUL 바이트가 포함되어 있으므로 TIO를 사용하는 쉬운 방법이 없습니다. 이것을 사용하여 파이썬 인터프리터 에서 이것을 실행하십시오.

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 어떻게 생성 했습니까?
mbomb007

1
F12 개발자 도구를 열고 호버링으로 텍스트 상자를 선택하고 콘솔로 이동하여 null 바이트 전에 부분을 복사하여 붙여 넣은 후 typed $0.value+='\0'.
Outgolfer Erik

4

Japt, 32 30 26 바이트

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

그것을 테스트

'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

배치, 118 바이트

@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'

Try it online!


1
'J';^:2,;&.>{_13<\'10';;/'23456789AJKQHCDS' slightly simpler but for 43. I feel like there's more to shave here... but I can't see how.
Jonah

@Jonah Yes, I also tried something similar and I'm sure my solution can be golfed further, but there are always new problems to be solved :)
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)

Try it online!

Only one more byte than digEmAll's golfier solution. Inspired byGiuseppe's solution to this related challenge - the same Giuseppe who golfed one byte off by answer!

I'm posting separately since it's a slightly different approach taking advantage of the fact that 4 is not a divisor of 13 and that the output does not need to be in any particular order.


oh haha I didn't notice this, I commented this solution on the other one
Giuseppe

@Giuseppe I was very close to comment instead of posting myself. I guess I just couldn't resist the urge to answer :)
JayCe

iiiit's just as golfy as digemall's answer :-) try it online
Giuseppe

@I was just experimenting with that :) so both digemall and I can golf one byte thanks to you :)
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"}

Try it online!

+11 bytes to be more complete thanks to Jakob.

-4 bytes thanks to Zachary

Mostly abusing of preprocessor to compress the suits. Could probably be out-golfed, but is pretty efficient all things considered.


1
I would argue that c is not a "[...] weird 'function' [...]" but rather an array declaration stored in a macro. Such a form of output is to my knowledge not permitted by default.
Jonathan Frech

1
Except c is not an array, it would be an in-place literal. Each 'invokation' of c in the source will create a new copy of the array in the resulting executable (barring optimizations). Thus, the code char *a[] = c; char *b[] = c; create two deep copies of c. This behaviour is what you'd expect of a function as well.
LambdaBeta

1
If there was a challenge to output the integer zero, would you consider the C code c=0; a valid submission, viewing c as a function?
Jonathan Frech

1
no, but I would consider #define z 0 valid. The reasoning is that: c=0; c++; x=c; results in x == 1 so c doesn't act much like a function. Meanwhile #define z 0 c=z; c++; x=z; does result in x == 0 so z acts like a function.
LambdaBeta

1
I do not think that is a fair comparision as you first change the supposed function, then only change the supposed function's return value. z=0;/**/c=z;c++;x=z; results in x==0, thus z acts like a function.
Jonathan Frech

3

Javascript (ES6) 77 74 72 bytes

This is a complete program.

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

1
Nice. You can save a few bytes by splitting on commas instead of concatenating: BTJ,J,${[..."A23456789JQK","10"].map(c=>[..."SDHC"].map(s=>c+s))}BT.splitBT,BT (where BT is a backtick).
Rick Hitchcock

Awesome suggestion! Thanks.
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");}

Approach is to encode the sequences in character arrays.

Sample Output

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

Try it online!


Hint: you can use a single printf to get rid of all putchars.
Dennis


1
Regarding your method of output, the OP does not allow printing.
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


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. :)


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


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
}


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.

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.

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

+\J+\J can be replaced with + B\J to save a byte.
hakr14
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.