Hasilkan setumpuk kartu


32

Berikut adalah array yang mewakili setumpuk kartu standar, termasuk dua Jokers.

[
  "AS", "2S", "3S", "4S", "5S", "6S", "7S", "8S", "9S", "10S", "JS", "QS", "KS", 
  "AD", "2D", "3D", "4D", "5D", "6D", "7D", "8D", "9D", "10D", "JD", "QD", "KD", 
  "AH", "2H", "3H", "4H", "5H", "6H", "7H", "8H", "9H", "10H", "JH", "QH", "KH", 
  "AC", "2C", "3C", "4C", "5C", "6C", "7C", "8C", "9C", "10C", "JC", "QC", "KC", 
  "J", "J"
]

Ini disusun dengan cara ini:

  • Ada empat setelan; hati, sekop, berlian, dan pentung (H, S, D, C).
  • Setiap suit memiliki satu kartu untuk angka 2 hingga 10, ditambah 4 kartu 'gambar', Ace, Jack, Queen, dan King (A, J, Q, K).
  • Untuk setiap kombinasi setelan dan nilai, harus ada satu item dalam array, yang merupakan string, dan terdiri dari nilai yang diikuti oleh setelan tersebut (Ruang kosong di antaranya diizinkan).
  • Selain itu, ada dua kartu Joker ('J').
  • Tolong tulis dalam bahasa apa saja.
  • Golf itu! Cobalah untuk menghasilkan output ini dalam jumlah byte terkecil.
  • Tidak masalah urutan outputnya.

2
@KevinCruijssen itu benar. Pertanyaan awal menentukan angka 2 hingga 10, dan serangkaian string sebagai output.
AJFaraday

15
Saya hanya ingin tahu apakah Anda bisa mendapatkan 23456789 dengan mengalikan 2 angka lebih kecil ... hanya untuk menemukan itu prima!
cocokkan

4
@match Sejak urutan output tidak masalah, mungkin Anda masih dapat membuat dengan angka yang lebih kecil dengan mengakhiri dengan 2atau 4atau apa pun sehingga tidak prima lagi.
Kevin Cruijssen

5
Aturan dalam komentar tidak masuk hitungan. Jika kami tidak dapat mencetak hasilnya ke STDOUT (dan itu besar jika, karena mengesampingkan default kami untuk I / O dan mencegah bahasa tanpa fungsi dan array string untuk berpartisipasi), aturan itu harus dinyatakan secara eksplisit dalam spesifikasi tantangan.
Dennis

7
Itu tidak mengesampingkan representasi string dari array seperti itu, yang dapat dicetak ke STDOUT. Kalau bukan karena bagian komentar, saya tidak akan pernah menduga ini tidak diizinkan.
Dennis

Jawaban:




13

brainfuck , 200 197 byte

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

Cobalah online!

Menggunakan satu sel negatif (+1 byte untuk diperbaiki), membungkus sel (banyak byte 'untuk diperbaiki) dan 0 pada EOF (+2 byte untuk menghapus ketergantungan).

Keluaran

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

Penjelasan:

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

Itu lebih dari 2,5 kali lebih pendek dari solusi saya. Sudah selesai dilakukan dengan baik.
Pria acak

11

05AB1E , 28 27 25 24 23 byte

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

Cobalah online.

-1 byte terima kasih kepada @Emigna menghapus Safter "HSDC", karena âmelakukan ini secara implisit.

Penjelasan:

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)

Lihat tip tambang 05AB1E ini (bagian Bagaimana mengompresi string bukan bagian dari kamus? ) Untuk memahami mengapa .•-Ÿ•ini "ajqk"dan .•ôì•itu "cdhs".


9

brainfuck , 550 504 byte

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

Cobalah online!

Jawaban lama, juga online!


8

Java 10, 153 151 125 77 75 byte

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

-28 byte terima kasih kepada @ OlivierGrégoire .
-50 byte berkat @mazzy .

Cobalah online.

Penjelasan:

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
coba "AJQK2345678910".replace("1?.","$0H,$0S,$0D,$0C,")+"J,J"dan bagi.
mazzy

1
Cerdas @ Mazzy Terima kasih. Dan sudah mengeditnya, Olivier. :)
Kevin Cruijssen

2
keren! Saya percaya mungkin untuk menghapus 2 byte lebih - tanda kurung dalam pola. lihat regex101.com/r/aDbz9C/1
mazzy

1
@ Mazzy Oh, bahkan tidak tahu $0itu mungkin di Jawa. TIL, terima kasih. :)
Kevin Cruijssen

7

APL (Dyalog Unicode) , 29 byte

1 byte disimpan berkat Probie dengan menggunakan 1+⍳9alih-alih1↓⍳10

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

Cobalah online!

Ini adalah program lengkap. Di tautan TIO, saya telah mengaktifkan tinju sehingga masing-masing elemen array dapat dibedakan.

Ini adalah output kotak.

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

'JJ', 2 pelawak bergabung untuk

, bentuk miring dari

∘.,⍨ matriks dibuat dengan menggabungkan setiap kombinasi

  • 'HCDS' string ini melawan

  • 'AKJQ', string ini dengan

    • ⍕¨ bentuk-bentuk string dari masing-masing

      • 1+⍳9 angka-angka 2..10 (1 ditambah kisaran 1..9)

Saya telah mengubah lekukan daftar Anda dalam penjelasan. Itu tampak agak aneh dengan dua dan tiga titik .. Jika itu dimaksudkan untuk beberapa alasan, jangan ragu untuk mengembalikannya.
Kevin Cruijssen

@KevinCruijssen Terima kasih, saya tidak tahu cara melakukannya, jadi saya menggunakan beberapa poin peluru hah
Kritixi Lithos

Ya, saya pikir begitu, itu sebabnya saya mengubahnya. :) Anda perlu kelipatan empat spasi terdepan sebelum -indentasi.
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" <

Cobalah online!

Struktur program

masukkan deskripsi gambar di sini

Pada awalnya, tumpukan diisi dengan 0, dan jtidak melompati inisialisasi. Inisialisasi mendorong 4 * 13 = 52, yang merupakan penghitung program. Dalam iterasi berikut, trailing 3menyebabkan pointer melompati bagian ini.

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

Kode yang mencetak 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

Penghentian:

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

Cobalah online!

-2 Bytes berkat saran @Giuseppe dan @JayCe


1
Ini adalah jawaban tepat saya, meskipun saya pikir saya menggunakan tanda kutip ganda dan bukan tanda kutip tunggal.
Giuseppe

Maaf, sudahkah saya memposting ganda jawaban Anda? Saya memeriksa tetapi saya tidak dapat menemukan jawaban R ...
digEmAll

Oh tidak, saya baru saja mengetik semuanya sendiri di TIO sebelum melihat milik Anda :-)
Giuseppe

1
Ya luar pasti cara untuk pergi ke sini! Meskipun ruang putih dipasangkan sesuai spesifikasi sehingga Anda dapat menyimpan satu byte dengan menggunakan paste. @ Giuseppe juga.
JayCe

Saya menunjukkan ini pada jawaban JayCe, tetapi Anda dapat mengatur x<-'J'di dalam outerdan kemudian menggunakan kembali xsebagai variabel dalam c()pernyataan terluar untuk memotong satu byte: Coba online!
Giuseppe

6

Powershell, 63 61 59 56 byte

-3 byte: terima kasih ConnorLSW

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

1
-3 menggunakan string untuk 2..10+'AJQK'[0..4]|%{"$_`H";"$_`S";"$_`D";"$_`C"};,'J'*2
menyusun

1
keren! tahu cara menghapus `` ``?
mazzy

1
Sejauh yang saya tahu itu adalah cara termurah untuk memecah variabel dalam sebuah string, saya melihat sebuah loop tetapi lebih mahal dengan 2 karakter untuk melakukannya dengan cara itu.
colsw


5

Python 3 , 67 64 byte

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

Cobalah online!


Python 2 , 78 76 74 68 byte

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

Cobalah online!

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

disimpan

  • -3 byte, terima kasih atas ovs

Itu jawaban yang cukup teliti ...
AJFaraday


Jika kita tidak harus menggunakan print, tidak bisa kita lakukan [*[a+b for a in['10',*'A23456789JQK']for b in'CHSD'],*'JJ']dalam 59 byte. Solusi Haskell tidak perlu output ke stdout, mengapa Python?
Enrico Borba

5

K (ngn / k) , 30 byte

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

Cobalah online!

!9 adalah daftarnya 0 1 ... 8

2+!9 adalah daftarnya 2 3 ... 10

$ ke string

, menggabungkan

,'/:menyatukan masing-masing dengan masing-masing hak, yaitu produk Cartesian; biasanya itu ,/:\:atau ,\:/:tetapi di sebelah kanan kita hanya memiliki skalar ( "SHDC"), jadi kita bisa menggunakan 'alih-alih\:

"JJ",/gabung (concat kurangi) daftar di sebelah kanan menggunakan "JJ"sebagai nilai awal untuk reduksi


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'

Array nilai dalam SQL dikembalikan sebagai baris kueri yang terpisah. Menggunakan STRING_SPLITfungsi yang diperkenalkan di SQL 2016 .

Ini termasuk pelawak dengan menambahkan dua setelan "string kosong" untuk mengambil keuntungan dari "J" yang ada untuk Jack, kemudian menyaring baris yang tidak kita inginkan. Lebih pendek daripada menggunakan UNION ALLpernyataan untuk menambahkan pelawak.


Apa yang terjadi jika Anda menjadikan argumen kedua untuk STRING_SPLIT sebagai string kosong? Saya tidak menggunakan MS-SQL, tetapi dalam banyak bahasa itu akan memberi Anda semua karakter dalam array.
AJFaraday

@ AJFaraday Itu akan berguna, tetapi tidak berhasil, Anda mengerti Procedure expects parameter 'separator' of type 'nchar(1)/nvarchar(1)'. Ini juga akan berguna untuk bermain golf jika standarnya adalah koma jika Anda mengabaikan parameter kedua, tetapi tidak mendukungnya juga. Item lain untuk GolfSQLbahasa yang mungkin tidak akan pernah saya tuliskan :)
BradC

4

Ruby , 61 byte

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

Cobalah online!


Itulah beberapa keterampilan untuk menggunakan J untuk Jack dan Joker :-)
Marty Neal

Tidak bisakah Anda menyimpan 4 byte dengan meninggalkan ->{... }? Ini berjalan sendiri dan tidak perlu parameter, jadi tidak perlu menjadi lambda
Piccolo

4

C # .NET, 114 byte

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

Port jawaban Java saya (dikreditkan ke @ mazzy ) .

Cobalah online.


Alternatif menarik dari 119 byte oleh @Corak .

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

Cobalah online.

Jika System.Collections.Generic.IEnumerable<string>bukan string[]merupakan output yang dapat diterima, trailing .ToArray()dapat dijatuhkan sehingga menjadi 109 byte .

Penjelasan:

using System.Linq;       // Required import for the `from .. in ..` and `select` parts
o=>                      // Method with empty unused parameter and string-array return-type
  new[]{"J","J"}         //  Return a string-array containing two times "J"
   .Concat(              //  And add:
     from s in"SDCH"     //   Loop over the suits
       from n in"A234567890JQK"
                         //    Inner loop over the cards
         select(n=='0'?  //     If the current card item is '0'
                 "10"    //      Use 10 instead
                :        //     Else:
                 n+"")   //      Simply use the card item as is
                      +s)//     And append the suit
   .ToArray()            //  Convert the IEnumerable to an array

4

PHP, 108 99 97 Bytes

Cobalah online!

Cobalah online! (Edit 1)

Kode

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

Sudah mencoba menggunakan fungsi php murni, tetapi bytecount lebih rendah dengan loop :(

Output (menggunakan 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
)

Edit

Berkat @ JoKing dengan menyarankan perubahan explode(" ","H$t S$t D$t C$t")untuk[H.$t,S.$t,D.$t,C.$t]


Bukankah [H.$t,S.$t,D.$t,C.$t]lebih pendek dari meledak?
Jo King

Anda benar sekali, akan menerima saran Anda, terima kasih.
Francisco Hahn


2
@FranciscoHahn, maaf, saya tidak memperhatikan itu! Berikut ini adalah versi 87 byte: Cobalah secara online!
Night2

1
@ Nigth2 saya tidak tahu Anda dapat menggunakan array_push($arr, $item1,$item2,$item3...$itemN)seperti itu, bagus
Francisco Hahn

4

SMBF , 169 byte

mewakili byte NUL literal \x00.

<[.<]␀J J HA HK HQ HJ H01 H9 H8 H7 H6 H5 H4 H3 H2 SA SK SQ SJ S01 S9 S8 S7 S6 S5 S4 S3 S2 DA DK DQ DJ D01 D9 D8 D7 D6 D5 D4 D3 D2 CA CK CQ CJ C01 C9 C8 C7 C6 C5 C4 C3 C2

Ini adalah solusi naif.

Karena program ini mengandung byte NUL, tidak ada cara mudah untuk menggunakan TIO. Jalankan ini menggunakan juru bahasa 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 Bagaimana Anda menghasilkan itu?
mbomb007

1
Saya membuka alat pengembang F12, memilih kotak teks dengan melayang, pergi ke konsol dan, setelah saya menyalin dan menempel bagian sebelum byte nol, diketik $0.value+='\0'.
Erik the Outgolfer

4

Japt, 32 30 26 byte

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

Menguji

'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

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

Cobalah online!


1
'J';^:2,;&.>{_13<\'10';;/'23456789AJKQHCDS'sedikit lebih sederhana tetapi untuk 43. Saya merasa seperti ada lagi yang harus dicukur di sini ... tapi saya tidak bisa melihat caranya.
Jonah

@Jonah Ya, saya juga mencoba sesuatu yang serupa dan saya yakin solusi saya dapat di-golf lebih lanjut, tetapi selalu ada masalah baru yang harus dipecahkan :)
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)

Cobalah online!

Hanya satu byte lebih dari solusi golfier digEmAll . Terinspirasi oleh solusi Giuseppe untuk tantangan terkait ini - Giuseppe yang sama yang bermain golf satu byte dengan jawaban!

Saya memposting secara terpisah karena ini pendekatan yang sedikit berbeda mengambil keuntungan dari fakta bahwa 4 bukan pembagi 13 dan bahwa output tidak perlu dalam urutan tertentu.


oh haha ​​saya tidak melihat ini, saya berkomentar solusi ini pada yang lain
Giuseppe

@ Giuseppe Saya sangat dekat dengan komentar daripada memposting sendiri. Saya kira saya tidak bisa menahan keinginan untuk menjawab :)
JayCe

iiiit sama golfy dengan jawaban digemall :-) coba online
Giuseppe

@Aku baru saja bereksperimen dengan itu :) jadi baik digemall dan aku bisa bermain golf satu byte terima kasih :)
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"}

Cobalah online!

+11 byte menjadi lebih lengkap berkat Jakob.

-4 byte terima kasih kepada Zachary

Sebagian besar penyalahgunaan preprocessor untuk mengompres jas. Mungkin bisa bermain golf, tetapi cukup efisien semua hal dipertimbangkan.


1
Saya berpendapat bahwa citu bukan "[...] aneh 'fungsi' [...]" melainkan deklarasi array yang disimpan dalam makro. Bentuk output seperti itu setahu saya tidak diizinkan secara default.
Jonathan Frech

1
Kecuali c bukan array, itu akan menjadi literal di tempat. Setiap 'invokation' cdalam sumber akan membuat salinan baru array di executable yang dihasilkan (pembatasan optimasi). Dengan demikian, kode tersebut char *a[] = c; char *b[] = c;membuat dua salinan dalam c. Perilaku ini adalah apa yang Anda harapkan dari suatu fungsi juga.
LambdaBeta

1
Jika ada tantangan untuk menghasilkan bilangan bulat nol, apakah Anda menganggap kode C c=0;sebagai pengajuan yang valid, dilihat csebagai fungsi?
Jonathan Frech

1
tidak, tapi saya anggap #define z 0valid. Alasannya adalah: c=0; c++; x=c;menghasilkan x == 1begitu ctidak bertindak seperti fungsi. Sementara #define z 0 c=z; c++; x=z;itu menghasilkan x == 0jadi zbertindak seperti fungsi.
LambdaBeta

1
Saya tidak berpikir itu adalah perbandingan yang adil karena Anda pertama kali mengubah fungsi yang seharusnya, maka hanya mengubah nilai pengembalian fungsi yang seharusnya. z=0;/**/c=z;c++;x=z;menghasilkan x==0, dengan demikian zbertindak seperti suatu fungsi.
Jonathan Frech

3

Javascript (ES6) 77 74 72 byte

Ini adalah program yang lengkap.

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

1
Bagus. Anda dapat menyimpan beberapa byte dengan membelah koma alih-alih menyatukan: BTJ,J,${[..."A23456789JQK","10"].map(c=>[..."SDHC"].map(s=>c+s))}BT.splitBT,BT (di mana BT adalah backtick).
Rick Hitchcock

Saran yang luar biasa! Terima kasih.
MattH

3

C (gcc, dentang), 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");}

Pendekatan adalah untuk menyandikan urutan dalam array karakter.

Output Sampel

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

Cobalah online!


Petunjuk: Anda dapat menggunakan satu printfuntuk menyingkirkan semua putchars.
Dennis


1
Mengenai metode output Anda, OP tidak mengizinkan pencetakan .
Jonathan Frech

Membangun Jonathan Frech dan Dennis 113 byte
ceilingcat

3

Oracle SQL, 164 byte

Bukan bahasa golf tapi ...

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

Cobalah online - SQL Fiddle


2
Saya suka seseorang menjawab ini dengan Oracle SQL
AJFaraday

postgres hampir mengalahkan ini hanya dengan string 172 byte, 'pilih' 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 Itu bukan array dari string (atau, karena ini adalah SQL, satu set baris). Anda perlu membagi string menjadi baris (atau kolom) untuk memenuhi spesifikasi pertanyaan. Jika Anda ingin melakukan itu sebagai solusi PostgreSQL yang terpisah maka saya ingin melihatnya.
MT0

maaf, tidak melihat persyaratan array
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'

Cobalah online!

Berdasarkan kode Jo King. Seperti yang dia sarankan dalam komentar, jawaban asli saya tidak valid (saya masih belajar bagaimana kode golf bekerja 😬), dan menautkan jawaban yang lebih baik dan valid. Lalu saya membuatnya lebih kecil.


Solusi asli (156 byte):

r = {} s = "SDHC" c = {"J", "Q", "K"} t = table.insert untuk x dalam s: gmatch "." do for y = 1,13 do t (r, (y == 1 dan "A" atau y> 10 dan c [y-10] atau y) .. x) ujung akhir untuk _ = 1,2 akhir 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

Saya hanya ingin mengatakan bahwa saya baru dalam hal Golf Code ini, jadi jika saya melakukan sesuatu yang salah, jangan ragu untuk memberi tahu saya. Saya tahu jawaban ini bukan yang terkecil, saya hanya ingin menantang diri saya sendiri.

Jika Anda memiliki saran untuk mengurangi kode saya, Anda juga bisa mengatakannya. :)


1
Selamat datang di situs ini!
Wheat Wizard

@WW terima kasih! Hahah: D
Visckmart

Apa yang terjadi dengan meja r? Anda harus mencetaknya ke STDOUT, atau mengubahnya ke fungsi dan kembalir
Jo King

Saya bukan ahli dengan Lua, tapi inilah fungsi anonim 142 byte yang
Jo King


3

Perl 6 ,  43  42 byte

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

Cobalah

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

Cobalah dari Jo King

Diperluas:

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

Catatan Rilis:

  • V1.0 Penyebaran awal
  • V1.1 Salah membaca persyaratan tantangan, jadi beralihlah ke array yang lebih mahal r$. Semua kode lainnya hampir sama.
  • V1.2 Saran dari @TaylorScott menghasilkan penghematan penulisan ulang total 15 byte!

Output sampel

Jika kita menambahkan potongan ini ke kode kita, kita dapat melihat apa yang dimasukkan ke dalam 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

Tapi bagaimana caranya? Baiklah, izinkan saya memberi tahu Anda:

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.

Ini tidak memenuhi persyaratan Array of strings, dan pencetakan untuk STDOUTsecara eksplisit dilarang
Taylor Scott

@TaylorScott Terima kasih telah memperhatikan. Diperbaiki sekarang, ekstra @ 30 byte.
steenbergh

1
Saya pikir Anda harus bisa mendapatkan bytecount turun dengan menjatuhkan a$dan b$vars dan menggunakan garis sepertir$(i)=MID$("JQKA2345678910",1+m,1-(m=12))+MID$("CDHS",(i-1)\13+1,1)
Taylor Scott

1
@TaylorScott Terima kasih! Perombakan dalam string nilai sangat pintar. Bagus!
steenbergh

Ini lebih lama dari sekadarPRINT "<output>"
Tornado547

3

Pyth, 26 25 byte

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

Disimpan satu byte berkat hakr14.
Coba di sini

Penjelasan

+ 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+\Jdan +*2]\Jsetara dan keduanya 6 byte, tetapi yang terakhir dianggap sebagai bentuk yang lebih baik, karena memungkinkan hingga 10 salinan untuk ditambahkan sebelum byte tambahan diperlukan.
hakr14

@ hakr14 Benar, tapi saya tidak ke golf kode demi menulis kode terbersih atau paling digeneralisasikan.

+\J+\Jdapat diganti dengan + B\Juntuk menyimpan satu byte.
hakr14
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.