Tạo một cỗ bài


32

Đây là một mảng đại diện cho một cỗ bài tiêu chuẩn, bao gồm hai Joker.

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

Nó được sáng tác theo cách này:

  • Có bốn bộ quần áo; trái tim, thuổng, kim cương và câu lạc bộ (H, S, D, C).
  • Mỗi bộ đồ có một thẻ cho các số từ 2 đến 10, cộng với 4 thẻ 'hình ảnh, Ace, Jack, Nữ hoàng và Vua (A, J, Q, K).
  • Đối với mỗi kết hợp của sự phù hợp và giá trị, cần có một mục trong mảng, đó là một chuỗi và được tạo thành từ giá trị theo sau sự phù hợp (Khoảng trắng giữa các mục này được cho phép).
  • Trên hết, có hai thẻ Joker ('J').
  • Viết bằng bất kỳ ngôn ngữ nào bạn muốn.
  • Chơi gôn lên! Cố gắng tạo đầu ra này với số byte nhỏ nhất.
  • Không quan trọng thứ tự đầu ra là gì.

2
@KevinCruijssen đúng. Câu hỏi ban đầu chỉ định các số từ 2 đến 10 và một chuỗi các chuỗi làm đầu ra.
AJFaraday

15
Tôi chỉ tự hỏi liệu bạn có thể có được 23456789 bằng cách nhân 2 số nhỏ hơn ... chỉ để khám phá ra số nguyên tố đó!
trận đấu

4
@match Kể từ thứ tự của các đầu ra không quan trọng, có lẽ bạn vẫn có thể tạo ra nó với số lượng nhỏ hơn bằng cách kết thúc nó với 2hoặc 4hoặc bất cứ điều gì khác nên nó không phải là một thủ nữa.
Kevin Cruijssen

5
Quy tắc trong ý kiến ​​không được tính. Nếu chúng tôi không thể in kết quả thành STDOUT (và đó là một vấn đề lớn, vì nó sẽ ghi đè mặc định của chúng tôi cho I / O và ngăn các ngôn ngữ không có chức năng và mảng chuỗi tham gia), quy tắc đó phải được nêu trong thông số thách thức.
Dennis

7
Điều đó không loại trừ một chuỗi đại diện của một mảng như vậy, có thể được in ra STDOUT. Nếu không có phần bình luận, tôi sẽ không bao giờ đoán điều này không được phép.
Dennis

Câu trả lời:



24

Bash 43 34 byte

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

Hãy thử trực tuyến!



Tôi không nghĩ niềng răng là lồng nhau. Cảm ơn.
glenn jackman

Và ở đây tôi đã suy nghĩ "tôi biết ngôn ngữ nào thuận tiện cho các sản phẩm trực tiếp trong danh sách các chuỗi?" Tôi thậm chí không nghĩ về thế giới cũ tốt!
aschepler

1
Về mặt kỹ thuật mở rộng cú đúp không phải là một mô hình toàn cầu, nó là cú pháp đặc biệt của riêng nó
glenn jackman

13

Brainfuck , 200 197 byte

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

Hãy thử trực tuyến!

Sử dụng một ô âm (+1 byte để sửa), gói các ô (rất nhiều byte để sửa) và 0 trên EOF (+2 byte để loại bỏ phụ thuộc).

Đầu ra

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

Giải trình:

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

Điều đó ngắn hơn 2,5 lần so với giải pháp của tôi. Làm tốt.
chàng ngẫu nhiên

11

05AB1E , 28 27 25 24 23 byte

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

Hãy thử trực tuyến.

-1 byte nhờ @Emigna loại bỏ Ssau "HSDC", bởi vì âđiều này hoàn toàn.

Giải trình:

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)

Xem 05AB1E mẹo này của tôi (phần Làm thế nào để chuỗi nén không nằm trong từ điển? ) Để hiểu tại sao .•-Ÿ•"ajqk".•ôì•"cdhs".


9

Brainfuck , 550 504 byte

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

Hãy thử trực tuyến!

Câu trả lời cũ, cũng trực tuyến!


8

Java 10, 153 151 125 77 75 byte

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

-28 byte nhờ @ OlivierGrégoire .
-50 byte nhờ @mazzy .

Hãy thử trực tuyến.

Giải trình:

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
Hãy thử "AJQK2345678910".replace("1?.","$0H,$0S,$0D,$0C,")+"J,J"và chia nó.
mê mẩn

1
Thông minh @mazzy Cảm ơn. Và đã chỉnh sửa nó, Olivier. :)
Kevin Cruijssen

2
mát mẻ! Tôi tin rằng có thể loại bỏ thêm 2 byte - dấu ngoặc trong mẫu. xem regex101.com/r/aDbz9C/1
mazzy

1
@mazzy Ồ, thậm chí còn không biết $0là có thể có trong Java. TIL, cảm ơn. :)
Kevin Cruijssen

7

APL (Dyalog Unicode) , 29 byte

Lưu 1 byte nhờ Probie bằng cách sử dụng 1+⍳9thay vì1↓⍳10

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

Hãy thử trực tuyến!

Đây là một chương trình đầy đủ. Trong liên kết TIO, tôi đã kích hoạt quyền anh để có thể phân biệt các yếu tố riêng lẻ của mảng.

Đây là đầu ra đóng hộp.

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

'JJ', 2 người thích đùa

, hình thức của

∘.,⍨ ma trận được tạo ra bằng cách ghép mọi kết hợp của

  • 'HCDS' chuỗi này chống lại

  • 'AKJQ', chuỗi này với

    • ⍕¨ các hình thức chuỗi của mỗi

      • 1+⍳9 các số 2..10 (1 cộng với phạm vi 1..9)

Tôi đã thay đổi cách thụt lề danh sách của bạn trong phần giải thích. Nó trông hơi kỳ lạ với hai và ba dấu chấm .. Nếu điều đó được dự định vì một lý do nào đó, hãy thoải mái quay lại.
Kevin Cruijssen

@KevinCruijssen Cảm ơn, tôi không thể tìm ra cách để làm điều đó, vì vậy tôi đã sử dụng nhiều điểm đạn hah
Kritixi Lithos

Vâng, tôi nghĩ vậy, đó là lý do tại sao tôi thay đổi nó. :) Bạn cần bội số của bốn không gian hàng đầu trước khi -thụt lề nó.
Kevin Cruijssen

7

Befunge-98 (FBBI) , 75 byte

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

Hãy thử trực tuyến!

Cấu trúc chương trình

nhập mô tả hình ảnh ở đây

Lúc đầu, ngăn xếp chứa đầy 0, và jkhông nhảy qua khởi tạo. Việc khởi tạo đẩy 4 * 13 = 52, đó là bộ đếm chương trình. Trong các lần lặp sau, dấu vết 3làm cho con trỏ nhảy qua phần này.

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

Mã in 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

Chấm dứt:

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

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

7

R , 65 byte

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

Hãy thử trực tuyến!

-2 byte nhờ các đề xuất @Giuseppe và @JayCe


1
Đây là câu trả lời chính xác của tôi, mặc dù tôi nghĩ rằng tôi đã sử dụng dấu ngoặc kép thay vì dấu ngoặc đơn.
Giuseppe

Xin lỗi, tôi đã đăng đôi câu trả lời của bạn chưa? Tôi đã kiểm tra nhưng tôi không thể tìm thấy bất kỳ câu trả lời R nào ...
digEmAll

Ôi không, tôi vừa tự gõ tất cả vào TIO trước khi thấy bạn :-)
Giuseppe

1
Có bên ngoài chắc chắn là con đường để đi đây! Mặc dù khoảng trắng được đặt trước theo thông số kỹ thuật để bạn có thể lưu một byte bằng cách sử dụng paste. @Giuseppe cũng vậy.
JayCe

Tôi đã chỉ ra điều này trên câu trả lời của JayCe, nhưng bạn có thể đặt x<-'J'bên trong outervà sau đó sử dụng lại xnhư một biến trong c()câu lệnh ngoài cùng để tắt một byte: Hãy thử trực tuyến!
Giuseppe

6

Powershell, 63 61 59 56 byte

-3 byte: cảm ơn ConnorLSW

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

1
-3 sử dụng chuỗi để mảng cho phần đầu tiên:2..10+'AJQK'[0..4]|%{"$_`H";"$_`S";"$_`D";"$_`C"};,'J'*2
colsw

1
mát mẻ! bất kỳ ý tưởng làm thế nào để loại bỏ `` ``?
mê mẩn

1
theo như tôi biết đó là cách rẻ nhất để phá vỡ một biến trong một chuỗi, tôi đã xem xét một vòng lặp nhưng nó đắt hơn bởi 2 ký tự để làm theo cách đó.
colsw


5

Python 3 , 67 64 byte

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

Hãy thử trực tuyến!


Python 2 , 78 76 74 68 byte

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

Hãy thử trực tuyến!

Alt:

Python 2 , 68 byte

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

đã lưu

  • -3 byte, nhờ có lò nướng

Đó là một câu trả lời khá kỹ lưỡng ...
AJFaraday


Nếu chúng ta không phải sử dụng print, chúng ta không thể làm [*[a+b for a in['10',*'A23456789JQK']for b in'CHSD'],*'JJ']trong 59 byte. Giải pháp Haskell không cần xuất ra thiết bị xuất chuẩn, tại sao Python?
Enrico Borba

5

K (ngn / k) , 30 byte

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

Hãy thử trực tuyến!

!9 là danh sách 0 1 ... 8

2+!9 là danh sách 2 3 ... 10

$ xâu chuỗi

, ghép

,'/:nối từng cái với mỗi quyền, tức là sản phẩm của Cartesian; thông thường nó ,/:\:hoặc ,\:/:nhưng bên phải chúng ta chỉ có vô hướng ( "SHDC"), vì vậy chúng ta có thể sử dụng 'thay vì\:

"JJ",/tham gia (concat giảm) danh sách bên phải bằng cách sử dụng "JJ"làm giá trị ban đầu để giảm


5

MS-SQL, 137 byte

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'

Một mảng các giá trị trong SQL được trả về dưới dạng các hàng truy vấn riêng biệt. Sử dụng STRING_SPLITchức năng được giới thiệu trong SQL 2016 .

Nó bao gồm những người thích đùa bằng cách thêm hai bộ quần áo "chuỗi trống" để tận dụng "J" hiện có cho Jack, sau đó lọc ra các hàng chúng tôi không muốn. Ngắn hơn so với việc sử dụng các UNION ALLbáo cáo để thêm những người thích đùa.


Điều gì xảy ra nếu bạn tạo đối số thứ hai cho STRINGinksLIT một chuỗi trống? Tôi không sử dụng MS-SQL, nhưng trong nhiều ngôn ngữ, nó sẽ cung cấp cho bạn tất cả các ký tự trong một mảng.
AJFaraday

@AJFaraday Điều đó sẽ hữu ích, nhưng nó không hoạt động, bạn nhận được Procedure expects parameter 'separator' of type 'nchar(1)/nvarchar(1)'. Nó cũng sẽ thuận tiện cho việc chơi gôn nếu nó được mặc định là dấu phẩy nếu bạn bỏ qua tham số thứ hai, nhưng nó cũng không hỗ trợ điều đó. Một mục khác cho GolfSQLngôn ngữ có lẽ tôi sẽ không bao giờ viết được :)
BradC

4

Ruby , 61 byte

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

Hãy thử trực tuyến!


Đó là một số kỹ năng sử dụng J cho cả Jack và Joker :-)
Marty Neal

Bạn không thể lưu 4 byte bằng cách bỏ qua ->{... }? Nó tự chạy và không cần tham số, vì vậy nó không cần phải là lambda
Piccolo

4

C # .NET, 114 byte

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

Cổng câu trả lời Java của tôi (ghi có vào @mazzy ) .

Hãy thử trực tuyến.


Sự thay thế thú vị của 119 byte bởi @Corak .

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

Hãy thử trực tuyến.

Nếu một System.Collections.Generic.IEnumerable<string>thay thế string[]là một đầu ra chấp nhận được, thì .ToArray()có thể bỏ đi để nó trở thành 109 byte .

Giải trình:

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 byte

Hãy thử trực tuyến!

Hãy thử trực tuyến! (Chỉnh sửa 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]);

Đã thử sử dụng các chức năng php hoàn toàn, nhưng bytecount thấp hơn với một vòng lặp :(

Đầu ra (sử dụng 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
)

Chỉnh sửa

Cảm ơn @JoKing bằng cách đề xuất thay đổi explode(" ","H$t S$t D$t C$t")cho[H.$t,S.$t,D.$t,C.$t]


Sẽ không [H.$t,S.$t,D.$t,C.$t]ngắn hơn nổ tung?
Jo King

Bạn hoàn toàn đúng, sẽ lấy lời khuyên của bạn, cảm ơn bạn.
Francisco Hahn


2
@FranciscoHahn, xin lỗi, tôi đã không nhận thấy điều đó! Đây là phiên bản 87 byte sau đó: Hãy thử trực tuyến!
Đêm2

1
@ Nigth2 tôi không biết bạn có thể sử dụng array_push($arr, $item1,$item2,$item3...$itemN)như thế nào, hay đấy
Francisco Hahn

4

SMBF , 169 byte

đại diện cho một byte NUL bằng chữ \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

Đây là giải pháp ngây thơ.

Vì chương trình này chứa byte NUL, không có cách nào dễ dàng sử dụng TIO. Chạy cái này trong trình thông dịch Python bằng

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 Bạn đã tạo ra nó như thế nào?
mbomb007

1
Tôi đã mở các công cụ dành cho nhà phát triển F12, chọn hộp văn bản bằng cách di chuột, đi đến bàn điều khiển và sau khi tôi sao chép và dán phần trước byte null, đã gõ $0.value+='\0'.
Erik the Outgolfer

4

Japt, 32 30 26 byte

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

Kiểm tra nó

'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

Mẻ, 118 byte

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

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

Hãy thử trực tuyến!


1
'J';^:2,;&.>{_13<\'10';;/'23456789AJKQHCDS'đơn giản hơn một chút nhưng với 43. Tôi cảm thấy như có nhiều thứ để cạo râu ở đây ... nhưng tôi không thể thấy thế nào.
Giô-na

@Jonah Vâng, tôi cũng đã thử một cái gì đó tương tự và tôi chắc chắn rằng giải pháp của tôi có thể được đánh gôn hơn nữa, nhưng luôn có những vấn đề mới cần giải quyết :)
Galen Ivanov

3

R , 67 66 byte

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

Hãy thử trực tuyến!

Chỉ có một byte nhiều hơn giải pháp golfier của digEmAll . Lấy cảm hứng từ giải pháp của Giuseppe cho thử thách liên quan này - cùng một Giuseppe đã đánh gôn một byte bằng câu trả lời!

Tôi đang đăng riêng vì đây là một cách tiếp cận hơi khác, lợi dụng thực tế là 4 không phải là ước số của 13 và đầu ra không cần phải theo bất kỳ thứ tự cụ thể nào.


oh haha ​​Tôi không nhận thấy điều này, tôi đã nhận xét giải pháp này trên một giải pháp khác
Giuseppe

@Giuseppe Tôi đã rất gần để bình luận thay vì tự đăng. Tôi đoán tôi không thể cưỡng lại sự thôi thúc trả lời :)
JayCe

iiiit cũng giống như câu trả lời của digemall :-) hãy thử trực tuyến
Giuseppe

@ Tôi chỉ đang thử nghiệm điều đó :) vì vậy cả digemall và tôi có thể chơi golf một byte nhờ bạn :)
JayCe

3

C (gcc) , 126 137 133 byte

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

Hãy thử trực tuyến!

+11 byte để hoàn thiện hơn nhờ Jakob.

-4 byte nhờ Zachary

Chủ yếu là lạm dụng tiền xử lý để nén các bộ quần áo. Có thể là ngoài golf, nhưng là khá hiệu quả tất cả những điều được xem xét.


1
Tôi sẽ lập luận rằng đó ckhông phải là một "[...] lạ" hàm '[...] "mà là một khai báo mảng được lưu trữ trong một macro. Một hình thức đầu ra như vậy là theo hiểu biết của tôi không được phép theo mặc định.
Jonathan Frech

1
Ngoại trừ c không phải là một mảng, nó sẽ là một chữ đúng chỗ. Mỗi 'yêu cầu' ctrong nguồn sẽ tạo ra một bản sao mới của mảng trong kết quả thực thi (tối ưu hóa chặn). Do đó, mã char *a[] = c; char *b[] = c;tạo ra hai bản sao sâu của c. Hành vi này là những gì bạn mong đợi về một chức năng là tốt.
LambdaBeta

1
Nếu có một thách thức để xuất số nguyên bằng 0, bạn có xem mã C c=0;là một đệ trình hợp lệ, xem cnhư là một hàm không?
Jonathan Frech

1
không, nhưng tôi sẽ xem xét #define z 0hợp lệ Lý do là: c=0; c++; x=c;kết quả trong x == 1quá ckhông hành động giống như một hàm. Trong khi đó #define z 0 c=z; c++; x=z;không có kết quả x == 0như vậy zhoạt động như một chức năng.
LambdaBeta

1
Tôi không nghĩ rằng đó là một so sánh công bằng khi bạn lần đầu tiên thay đổi hàm được cho là, sau đó chỉ thay đổi giá trị trả về của hàm được cho là. z=0;/**/c=z;c++;x=z;kết quả là x==0, do đó zhoạt động như một chức năng.
Jonathan Frech

3

Javascript (ES6) 77 74 72 byte

Đây là một chương trình hoàn chỉnh.

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

1
Tốt đẹp. Bạn có thể lưu một vài byte bằng cách chia nhỏ trên dấu phẩy thay vì nối: BTJ,J,${[..."A23456789JQK","10"].map(c=>[..."SDHC"].map(s=>c+s))}BT.splitBT,BT (trong đó BT là backtick).
Rick Hitchcock

Đề nghị tuyệt vời! Cảm ơn.
MattH

3

C (gcc, clang), 138 byte

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

Cách tiếp cận là mã hóa các chuỗi trong mảng ký tự.

Đầu ra mẫu

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

Hãy thử trực tuyến!


Gợi ý: bạn có thể sử dụng một từ printfđể loại bỏ tất cả putchars.
Dennis


1
Về phương thức xuất của bạn, OP không cho phép in .
Jonathan Frech

Xây dựng trên Jonathan Frech và Dennis 113 byte
trần nhà

3

Oracle SQL, 164 byte

Không phải ngôn ngữ chơi gôn nhưng ...

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

Dùng thử trực tuyến - SQL Fiddle


2
Tôi thích việc ai đó đã trả lời điều này với Oracle SQL
AJFaraday

postgres gần như đánh bại điều này chỉ bằng một chuỗi 172 byte, '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, QĐ, 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 Đó không phải là một chuỗi các chuỗi (hoặc, vì đây là SQL, một tập hợp các hàng). Bạn sẽ cần chia chuỗi thành các hàng (hoặc cột) để đáp ứng thông số kỹ thuật của câu hỏi. Nếu bạn muốn làm điều đó như một giải pháp PostgreQuery riêng biệt thì tôi muốn thấy điều đó.
MT0

xin lỗi, không thấy yêu cầu về mảng
dwana

3

Lua ,156 127 138 129 byte

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'

Hãy thử trực tuyến!

Dựa trên mã Jo King. Như anh ấy đã đề xuất trong các bình luận, câu trả lời ban đầu của tôi không hợp lệ (tôi vẫn đang học cách chơi golf mã) và liên kết một câu trả lời tốt hơn và hợp lệ. Sau đó, tôi làm cho nó nhỏ hơn.


Giải pháp gốc (156 byte):

r = {} s = "SDHC" c = {"J", "Q", "K"} t = table.insert cho x trong s: gmatch "." làm cho y = 1,13 do t (r, (y == 1 và "A" hoặc y> 10 và c [y-10] hoặc y) .. x) kết thúc cuối cho _ = 1,2 do t (r, "J") kết thúc
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

Tôi chỉ muốn nói rằng tôi chưa quen với nội dung Code Golf này, vì vậy nếu tôi làm sai điều gì đó, vui lòng cho tôi biết. Tôi biết câu trả lời này không phải là một trong những điều nhỏ nhất, tôi chỉ muốn thử thách bản thân.

Nếu bạn có đề xuất giảm mã của tôi, bạn cũng có thể nói. :)


1
Chào mừng đến với trang web!
Phù thủy lúa mì

@WW cảm ơn! Hahah: D
Visckmart

Điều gì xảy ra với cái bàn r? Hoặc bạn cần in nó sang STDOUT, hoặc thay đổi chức năng này thành chức năng và quay lạir
Jo King

Tôi không phải là chuyên gia về Lua, nhưng đây là một hàm ẩn danh
Jo King


3

Perl 6 ,  43  42 byte

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

Thử nó

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

Hãy thử nó từ Jo King

Mở rộng:

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

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

Ghi chú phát hành:

  • V1.0 Triển khai ban đầu
  • V1.1 Đọc sai các yêu cầu thách thức, do đó chuyển sang một mảng đắt tiền hơn r$. Tất cả phần còn lại của mã là khá nhiều như nhau.
  • V1.2 Gợi ý từ @TaylorScott dẫn đến việc viết lại hoàn toàn tiết kiệm 15 byte!

Sản lượng mẫu

Nếu chúng ta thêm đoạn mã này vào mã của mình, chúng ta có thể thấy những gì được đưa vào 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

Nhưng bằng cách nào? Để tôi nói cho bạn biết:

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.

Điều này không đáp ứng yêu cầu Mảng chuỗi và việc in ấn STDOUTbị cấm rõ ràng
Taylor Scott

@TaylorScott Cảm ơn bạn đã chú ý. Đã sửa bây giờ, thêm 30 byte.
steenbergh

1
Tôi nghĩ rằng bạn sẽ có thể giảm số lượng bằng cách bỏ xuống a$b$vars và sử dụng một dòng giống nhưr$(i)=MID$("JQKA2345678910",1+m,1-(m=12))+MID$("CDHS",(i-1)\13+1,1)
Taylor Scott

1
@TaylorScott Cảm ơn! Việc chia sẻ lại trong chuỗi giá trị là đặc biệt thông minh. Tốt đẹp!
steenbergh

Cái này dài hơn chỉPRINT "<output>"
Tornado547

3

Bình thường, 26 25 byte

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

Đã lưu một byte nhờ hakr14.
Hãy thử nó ở đây

Giải trình

+ 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]\Jtương đương và cả 6 byte, nhưng cái sau được coi là hình thức tốt hơn, vì nó cho phép thêm tối đa 10 bản sao trước khi cần thêm bất kỳ byte nào.
hakr14

@ hakr14 Đúng, nhưng tôi không thích chơi golf vì mục đích viết mã sạch nhất hoặc khái quát nhất.

+\J+\Jcó thể được thay thế bằng + B\Jđể lưu một byte.
hakr14
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.