カードのデッキを生成する


32

これは、2枚のジョーカーを含む標準的なカードのデッキを表す配列です。

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

次のように構成されています。

  • 4つのスーツがあります。ハート、スペード、ダイヤモンド、クラブ(H、S、D、C)。
  • 各スーツには、2〜10の数字用のカードが1枚と、「絵」カードが4枚、エース、ジャック、クイーン、キング(A、J、Q、K)があります。
  • スーツと値の組み合わせごとに、配列内に文字列である1つの項目があり、値とそれに続くスーツで構成されます(これらの間の空白は許可されます)。
  • さらに、2枚のジョーカーカード(「J」)があります。
  • 好きな言語で書いてください。
  • それをゴルフ!最小バイト数でこの出力を生成してみてください。
  • 出力の順序は関係ありません。

2
@KevinCruijssenそれは正しいです。最初の質問では、出力として2〜10の数字と文字列の配列を指定します。
-AJFaraday

15
2つの小さい数を掛けることで23456789を取得できるかどうか、ただそれが素数であることがわかるだけです。
一致

4
出力の順序は問題ではないので、多分あなたはまだでそれを終了することにより、より小さな数字でそれを作成することができ@match 2または4それはもう首相ではないか何か。
ケビンCruijssen

5
コメント内のルールはカウントされません。 場合は、我々はSTDOUTに結果を印刷することはできません(とあれば、それは参加してから関数や文字列配列なしI / Oおよび防止の言語のための私達のデフォルト設定を上書きしているが、大きいです)、そのルールを明記する必要が明示的にチャレンジ仕様に。
デニス

7
これは、そのような配列の文字列表現を除外するものではなく、STDOUTに出力できます。コメントセクションがなければ、これが許可されていないとは思わなかったでしょう。
デニス

回答:



24

Bash 43 34バイト

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

オンラインでお試しください!



ブレースは入れ子にできるとは思いませんでした。ありがとう。
グレンジャックマン

そして、ここで私は「文字列のリストに直接製品を載せることが便利だと知っているのはどの言語か」と考えていました。古き良き世界についても考えていませんでした!
アシェプラー

1
技術的にブレースの展開はグロブパターンではなく、独自の特別な構文
です

13

brainfuck200 197バイト

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

オンラインでお試しください!

1つの負のセル(修正する場合は+1バイト)、セル(修正する場合は0バイト)、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取り除い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のヒント(辞書に含まれていない文字列を圧縮する方法?を参照して、.•-Ÿ•is "ajqk"および.•ôì•is を理解してください"cdhs"


9

brainfuck550 504バイト

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

オンラインでお試しください!

古い答え、オンラインでも!


8

Java 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"分割してみてください。
マジー

1
スマート@mazzyありがとう。そして、すでに編集していた、オリヴィエ。:)
ケビンクルーッセン

2
クール!パターン内の括弧-さらに2バイトを削除することが可能だと思います。参照regex101.com/r/aDbz9C/1
mazzy

1
@mazzyああ、$0Javaで可能なことさえ知らなかった。TIL、ありがとう。:)
ケビンクルーッセン

7

APL(Dyalog Unicode)、29バイト

Probieのおかげで、1+⍳9代わりに1↓⍳10

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

オンラインでお試しください!

これは完全なプログラムです。TIOリンクでは、配列の個々の要素を区別できるようにボクシングを有効にしました。

これがボックス化された出力です。

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

'JJ', 連結された2人のジョーカー

, ほつれた形

∘.,⍨ のすべての組み合わせを連結して作成された行列

  • 'HCDS' この文字列に対して

  • 'AKJQ', この文字列

    • ⍕¨ それぞれの文字列化された形式

      • 1+⍳9 番号2..10(1に加えて範囲1..9)

説明のリストのインデントを変更しました。2つと3つのドットで少し奇妙に見えました。
ケビンCruijssen

@KevinCruijssenありがとう、どうすればそれができるかわからなかったので、複数の箇条書きを使用しました
Kritixi Lithos

ええ、そう思ったので、変更しました。:) -インデントする前に、4つの先行スペースの倍数が必要です。
ケビンCruijssen

7

Befunge-98(FBBI)、75バイト

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

オンラインでお試しください!

プログラム構成

ここに画像の説明を入力してください

最初は、スタックがで満たされている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でそれをすべて自分で入力しただけでした:
ジュゼッペ

1
はい、アウターは間違いなくここに行く方法です!空白は仕様に従って許可されているため、を使用して1バイトを節約できますpaste。@ジュゼッペも。
JayCe

JayCeの答えでこれを指摘しましたが、x<-'J'内部で設定し、最も外側のステートメントの変数としてouter再利用してバイトを削ることができます:オンラインで試してみてください!xc()
ジュゼッペ

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
クール!「」を削除する方法はありますか?
奇抜な

1
それが文字列の変数を分割する最も安価な方法であることがわかっている限り、ループを見てみましたが、そのようにするのは2文字分高価です。
colsw


5

Pythonの367の、64バイト

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

オンラインでお試しください!


パイソン278の 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",/"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関数を使用します

ジャックの既存の「J」を利用するために2つの「空白文字列」スーツを追加し、不要な行を除外することで、ジョーカーが含まれます。UNION ALLステートメントを使用してジョーカーを追加するよりも短い。


STRING_SPLITの2番目の引数を空の文字列にするとどうなりますか?私はMS-SQLを使用しませんが、多くの言語では配列内のすべての文字を提供します。
-AJFaraday

@AJFaradayこれは便利ですが、機能しませんProcedure expects parameter 'separator' of type 'nchar(1)/nvarchar(1)'。また、2番目のパラメーターを省略した場合、デフォルトでコンマに設定されていればゴルフにも便利ですが、それもサポートしていません。GolfSQL言語の別の項目は、おそらく私が書くことを回避することは決してないだろう:)
BradC

4

Ruby、61バイト

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

オンラインでお試しください!


これは、ジャックとジョーカーの両方にJを使用するためのスキルです:
マーティニール

->{... を省いて4バイト節約できません}か?単独で実行され、パラメーターを必要としないため、ラムダである必要はありません
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()

オンラインでお試しください。

場合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]爆発するよりも短くありませんか?
ジョーキング

あなたは絶対に正しい、あなたの助言を取るつもりだ、ありがとう。
フランシスコハーン


2
@FranciscoHahn、ごめんなさい、私はそれに気づかなかった!次に、87バイトバージョンを示します。オンラインで試してみてください。
Night2

1
@ Nigth2私はあなたがarray_push($arr, $item1,$item2,$item3...$itemN)そのように使用できるとは思いもしませんでした、素敵なもの
フランシスコ・ハーン

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

1
F12開発者ツールを開き、ホバリングしてテキストボックスを選択し、コンソールに移動して、nullバイトの前の部分をコピーして貼り付けた後、入力しました$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

J、41バイト

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

オンラインでお試しください!


1
'J';^:2,;&.>{_13<\'10';;/'23456789AJKQHCDS'少しシンプルになりますが、43の場合です。ここではもっと剃る必要があると思いますが、どのように見えるかわかりません。
ジョナ

@Jonahはい、私も似たようなを試してみましたが、私は確かに私の解決策をさらにgolfedことができるんだけど、解決すべき常に新たな問題があります:)
ガレン・イワノフ

3

R67 66バイト

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

オンラインでお試しください!

digEmAllのゴルファーソリューションより1バイトだけ多く。この関連する課題に対するジュゼッペのソリューションに触発されました-答えで1バイトをオフにした同じジュゼッペ!

4は13の約数ではなく、出力は特定の順序である必要がないという事実を利用するわずかに異なるアプローチであるため、私は別々に投稿しています。


ああ笑、私はこれに気づかなかった、私はもう一つにこの解決策をコメントした
ジュゼッペ

@Giuseppe私は自分自身を投稿する代わりに、コメントに非常に近かった。私はただ答えたいという衝動に抵抗できなかったと思う:)
JayCe

iiiitはデジモールの答えと同じくらいゴルフです:-) オンラインで試してください
ジュゼッペ

@Iはちょうどあなたのゴルフdigemallと私の両方ができるため、1つのバイトのおかげで:) :)それを試してた
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バイトがより完全になりました。

Zacharyのおかげで-4バイト

主にスーツを圧縮するためのプリプロセッサの乱用。おそらくアウトゴルフである可能性がありますが、考慮されるすべてのものが非常に効率的です。


1
これはc「[...]奇妙な「関数」[...]」ではなく、マクロに格納された配列宣言であると主張します。このような形式の出力は、私の知る限り、デフォルトでは許可されていません。
ジョナサンフレッチ

1
cが配列ではない場合を除き、インプレースリテラルになります。cソース内のの各「呼び出し」により、結果の実行可能ファイルに配列の新しいコピーが作成されます(最適化がなければ)。したがって、コードchar *a[] = c; char *b[] = c;はcの2つの深いコピーを作成します。この動作は、関数に期待するものです。
ラムダベータ

1
整数のゼロを出力するという課題があった場合、関数としてc=0;表示cして、Cコードを有効な送信と見なしますか?
ジョナサンフレッチ

1
いいえ、しかし、私は#define z 0有効だと思います。:推論はということですc=0; c++; x=c;が生じるx == 1のではc関数のようにあまり作用しません。一方#define z 0 c=z; c++; x=z;につながるんx == 0ので、z機能のような役割を果たします。
ラムダベータ

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,BTBTはバックティックです)。
リックヒッチコック

素晴らしい提案!ありがとう。
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すべてputcharのs を取り除くために単一を使用できます。
デニス


1
出力方法に関して、OP は印刷を許可しません
ジョナサンフレッチ

Jonathan FrechとDennisの113バイトの
構築

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

ルア156 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 in 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

私はこのCode Golfのものは初めてだと言いたいので、何か間違ったことをしているなら、気軽に教えてください。この答えは最小のものではなく、自分自身に挑戦したかっただけです。

私のコードを減らすための提案があれば、あなたも言うことができます。:)


1
サイトへようこそ!
小麦ウィザード

@WWありがとう!ハハ:D
Visckmart

テーブルはrどうなりますか?STDOUTに出力するか、これを関数に変更して返す必要がありますr
Jo King

私はLuaの専門家ではありませんが、有効な142バイトの匿名関数
ジョーキング


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

ジョー・キングから試してみてください

拡張:

{  # 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$。残りのコードはすべてほぼ同じです。
  • @TaylorScottからのV1.2の提案は、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$b$varsのと同様に行なものを使用してr$(i)=MID$("JQKA2345678910",1+m,1-(m=12))+MID$("CDHS",(i-1)\13+1,1)
テイラー・スコット

1
@TaylorScottありがとう!values-stringの入れ替えは特に賢いです。いいね!
スティーンバーグ

これは単なるよりも長いPRINT "<output>"
-Tornado547

3

Pyth、26 25バイト

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

hakr14のおかげで1バイト節約できました。
ここで試してみてください

説明

+ 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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.