产生一副扑克牌


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张“图片”卡片,即Ace,Jack,Queen和King(A,J,Q,K)。
  • 对于花色和值的每种组合,数组中应该有一个项目,它是一个字符串,由值和花色组成,后跟花色(允许在两者之间使用空格)。
  • 最重要的是,有两张Joker卡('J')。
  • 用你喜欢的任何语言写。
  • 打高尔夫球!尝试以最小的字节数产生此输出。
  • 输出的顺序无关紧要。

2
@KevinCruijssen是正确的。最初的问题指定2到10的数字,以及一个字符串数组作为输出。
AJFaraday

15
我只是想知道您是否可以通过将2个较小的数字相乘得到23456789 ...只是发现它是素数!
匹配

4
@match由于输出的顺序无关紧要,也许您仍然可以通过以24或其他任何字符结尾来创建较小的数字,因此它不再是质数。
凯文·克鲁伊森

5
注释中的规则不计算在内。 如果我们不能将结果打印到STDOUT(这很重要,因为它会覆盖我们的I / O默认值,并阻止没有函数和字符串数组的语言参与),那么该规则必须在质询规范中明确说明。
丹尼斯

7
这并不排除此类数组的字符串表示形式,可以将其打印到STDOUT中。如果不在评论部分,我绝对不会猜到这是不允许的。
丹尼斯

Answers:


29

JavaScript(ES6),62 60字节

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

在线尝试!


动作平稳!!!
窃窃私语

我不知道存在传播语法,直到我读了这篇文章–非常酷
逻辑


13

脑干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

05AB1E28 27 25 24 23 字节

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

在线尝试。

-1个字节感谢@Emigna删除了Safter "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技巧(如何压缩字符串(不属于字典的一部分?部分以了解为什么.•-Ÿ•is "ajqk".•ôì•is "cdhs"


9

brainfuck550个 504字节

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

在线尝试!

旧答案,也在线!


8

爪哇10,153 151 125 77 75个字节

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

-28个字节,感谢@OlivierGrégoire
-50字节感谢@mazzy

在线尝试。

说明:

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
聪明@mazzy谢谢。Olivier已经在编辑它了。:)
Kevin Cruijssen

2
凉!我相信可以再删除2个字节-模式中的括号。参见regex101.com/r/aDbz9C/1
mazzy

1
@mazzy哦,甚至都不知道$0Java中有没有可能。TIL,谢谢。:)
Kevin Cruijssen

7

APL(Dyalog Unicode),29个字节

多亏了Probie使用1+⍳9代替节省了1个字节1↓⍳10

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

在线尝试!

这是一个完整程序。在TIO链接中,我启用了装箱,以便可以区分数组的各个元素。

这是盒装输出。

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

'JJ', 2个小丑连在一起

, 奇妙的形式

∘.,⍨ 通过串联以下各项的组合而创建的矩阵

  • 'HCDS' 这个字符串反对

  • 'AKJQ', 这个字符串

    • ⍕¨ 每个的字符串化形式

      • 1+⍳9 数字2..10(1加上范围1..9)

我已更改了说明中您的清单的缩进。两个点和三个点看起来有点奇怪。如果出于某种原因,请随时回滚。
凯文·克鲁伊森

@KevinCruijssen谢谢,我不知道该怎么做,所以我使用了多个要点哈
Kritixi Lithos

是的,我是这么认为的,这就是为什么我更改了它。:)您需要四个前导空格的倍数-才能缩进。
凯文·克鲁伊森

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不会跳过初始化。初始化push 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)

在线尝试!

-2字节,感谢@Giuseppe和@JayCe建议


1
这是我的确切答案,尽管我认为我使用双引号而不是单引号。
朱塞佩

抱歉,我把您的答案重复了两次吗?我检查了一下,但找不到任何R答案...
digEmAll

哦,不,我刚刚在TIO中亲自输入了所有内容,然后才看到您的:-)
朱塞佩

1
是的,外在绝对是前往这里的方式!尽管根据规范允许使用空格,所以您可以使用来节省一个字节paste。@Giuseppe。
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

Python 3中67 64个字节

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

在线尝试!


Python 2中78个 76 74 68字节

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

在线尝试!

Alt:

Python 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

已保存

  • -3个字节,多亏了ovs

那是一个非常彻底的答案……
AJFaraday


如果我们不必使用print,就不能使用[*[a+b for a in['10',*'A23456789JQK']for b in'CHSD'],*'JJ']59个字节。Haskell解决方案不需要输出到stdout,为什么要使用Python?
恩里科·博尔巴

5

K(ngn / k),30个字节

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

在线尝试!

!9 是清单 0 1 ... 8

2+!9 是清单 2 3 ... 10

$

, 级联

,'/:将每个权利与每个权利(即笛卡尔乘积)连接起来;通常是,/:\:,\:/:但是在右边我们只有标量("SHDC"),因此我们可以使用'代替\:

"JJ",/加入(concat reduce)右边的列表"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个字节留下了->{... }?它自己运行,不需要参数,因此它不必是lambda
Piccolo

4

C#.NET,114字节

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

我的Java答案的端口(贷记为@mazzy

在线尝试。


的有趣的选择119个字节@Corak

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

在线尝试。

如果a 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

您绝对正确,请听取您的意见,谢谢。
弗朗西斯科·哈恩

1
73个字节:在线尝试!
2

2
@FranciscoHahn,对不起,我没有注意到!然后是87字节的版本:在线尝试!
夜间2

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。使用以下命令在Python解释器中运行

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

1
我打开了F12开发人员工具,通过悬停选择了文本框,转到控制台,然后在复制并粘贴了空字节之前的部分之后,键入$0.value+='\0'
暴民埃里克

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

R67 66字节

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

在线尝试!

仅比digEmAll的golfier解决方案多一个字节。灵感来自朱塞佩的解决方案,以此相关的挑战谁golfed一个字节关闭的回答同样的朱塞佩- !

我将单独发布,因为利用4不是13的除数,并且输出不需要按任何特定顺序的事实,这是一种稍微不同的方法。


哦哈哈,我没有注意到这一点,我在另一处评论了该解决方案
Giuseppe

@Giuseppe我非常喜欢发表评论,而不是发表自己的看法。我想我无法抗拒回答的欲望:)
JayCe

iii和digemall的回答一样:-) 在线试用
Giuseppe

@我只是在尝试:),所以digemall和我都可以打高尔夫球,多亏了你一个字节:)
JayCe

3

C(GCC) 126个 137 133字节的

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

在线尝试!

雅各布(Jakob)使+11字节更完整。

-4字节归功于Zachary

大多数情况是滥用预处理程序来压缩西装。可能会超出标准,但考虑到所有因素,效率非常高。


1
我认为这c不是“ [...]奇怪的'函数'[...]”,而是存储在宏中的数组声明。据我所知,这种输出形式默认情况下是不允许的。
乔纳森·弗雷奇

1
除非c不是数组,否则它将是就地文字。源中的每个“调用”都c将在结果可执行文件中创建阵列的新副本(除非进行优化)。因此,代码char *a[] = c; char *b[] = c;创建了c的两个深层副本。这种行为也是您对函数的期望。
LambdaBeta

1
如果存在输出整数零的挑战,您是否会认为C代码c=0;是有效的提交(c作为函数查看)?
乔纳森·弗雷希

1
不,但我认为#define z 0有效。其理由是:c=0; c++; x=c;导致x == 1如此c不采取行动很像功能。同时#define z 0 c=z; c++; x=z;确实导致x == 0这样的z行为。
LambdaBeta

1
我不认为这是一个公平的比较,因为您先更改假定函数,然后才更改假定函数的返回值。z=0;/**/c=z;c++;x=z;结果为x==0,因此z就像一个函数。
乔纳森·弗雷希

3

Javascript(ES6)77 74 72字节

这是一个完整的程序。

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

1
真好 您可以通过分割逗号而不是串联来节省一些字节:( BTJ,J,${[..."A23456789JQK","10"].map(c=>[..."SDHC"].map(s=>c+s))}BT.splitBT,BT 其中BT是反引号)。
里克·希区柯克

很棒的建议!谢谢。
MattH

3

C(gcc,clang),138个字节

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

方法是在字符数组中编码序列。

样本输出

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

在线尝试!


提示:您可以使用单个字符printf来消除所有putchars。
丹尼斯


1
关于您的输出方法,OP 不允许打印
乔纳森·弗雷希

建立在Jonathan Frech和Dennis的113个字节上
ceilingcat

3

Oracle SQL,164字节

不是打高尔夫球的语言,而是...

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

在线尝试-SQL Fiddle


2
我喜欢有人用Oracle SQL回答了这个问题
AJFaraday

postgres仅用172个字节的字符串就几乎击败了它,'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不是字符串数组(或者,因为这是SQL,所以不是一组行)。您需要将字符串拆分为行(或列),以满足问题的要求。如果您想作为一个单独的PostgreSQL解决方案来做,那么我想看看。
MT0

抱歉,没有看到阵列要求
dwana

3

a156 127 138 129字节

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'

在线尝试!

基于Jo King的代码。正如他在评论中所建议的那样,我的原始答案无效(我仍在学习代码高尔夫的工作原理😬),并链接了一个更好且有效的答案。然后我把它缩小了。


原始解决方案(156字节):

r = {} s =“ SDHC” c = {“ J”,“ Q”,“ K”} t = table.insert for x in s:gmatch“。”为y = 1,13做t(r, (y == 1且“ A”或y> 10且c [y-10]或y).. x)结束_ = 1,2的t(r,“ J”)结束
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

我只是想说我是Code Golf的新手,所以,如果我做错了什么,请随时告诉我。我知道这个答案不是最小的答案,我只是想挑战自己。

如果您有减少我的代码的建议,您也可以说。:)


1
欢迎光临本站!
小麦巫师

@WW谢谢!哈哈:D
维斯喀特(Visckmart)

桌子r怎么办?您需要将其打印到STDOUT,或者将其更改为函数然后返回r
Jo King

我不是Lua的专家,但是这里有一个有效的142字节匿名函数
Jo King


3

Perl 6的 43  42个字节

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

试试吧

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

Jo King尝试一下

展开:

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

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

发行说明:

  • V1.0初始部署
  • V1.1误解了挑战要求,因此切换到了更昂贵的阵列 r$。其余所有代码几乎相同。
  • V1.2来自@TaylorScott的建议导致完全重写,节省了15个字节!

样品输出

如果将此代码段添加到代码中,我们可以看到其中的内容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

但是如何?好吧,让我告诉你:

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.

这不符合“字符串数组”的要求,并且STDOUT明确禁止打印到
Taylor Scott

@TaylorScott感谢您的关注。现在已修复,额外增加了30个字节。
steenbergh

1
我认为您应该能够通过删除a$and b$vars并使用类似r$(i)=MID$("JQKA2345678910",1+m,1-(m=12))+MID$("CDHS",(i-1)\13+1,1)
Taylor Scott

1
@TaylorScott谢谢!值字符串中的改组特别聪明。真好!
steenbergh

这比仅仅是更长的时间PRINT "<output>"
Tornado547 '18

3

Pyth,26 25字节

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

多亏了hakr14,节省了一个字节。
在这里尝试

说明

+ 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+*2]\J都是等效的,并且都是6个字节,但是后者被认为是更好的形式,因为它允许在需要任何其他字节之前最多添加10个副本。
hakr14

@ hakr14是的,但是为了编写最干净或最通用的代码,我不喜欢代码。

+\J+\J可以替换+ B\J为保存一个字节。
hakr14
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.