Kart destesi oluşturun


32

İki Joker de dahil olmak üzere standart bir kart destesini temsil eden bir dizi.

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

Bu şekilde oluşur:

  • Dört takım elbise var; Kalpler, maçalar, elmaslar ve kulüpler (H, S, D, C).
  • Her takım elbisede 2 ila 10 numara için bir kart, artı 4 'resim' kart, Ace, Jack, Queen ve King (A, J, Q, K) bulunur.
  • Her bir takım elbise ve değer kombinasyonu için, dizide bir dize olan ve bir takım elbise tarafından takip edilen değerden oluşan bir öğe olmalıdır (bunlar arasında boşluk olmasına izin verilir).
  • Bunun üzerine iki Joker kartı var ('J').
  • Lütfen dilediğiniz dili yazın.
  • Golf topla! Bu çıktıyı en küçük bayt sayısında üretmeye çalışın.
  • Çıktının hangi sırada olduğu önemli değil.

2
@KevinCruijssen bu doğru. İlk soru, 2 ila 10 sayılarını ve çıktı olarak bir dizi dizeyi belirtir.
AJFaraday

15
Sadece daha küçük olan 2 sayıyı çarparak 23456789 alabilecek misin diye merak etmiştim ... sadece asal olanı bulmak için!
maç

4
@match Çıktının sırası önemli olmadığından, belki daha küçük sayılarla 2ya 4da ya da başka bir şeyle bitirerek oluşturabilirsiniz, böylece artık bir asal değildir.
Kevin Cruijssen

5
Yorumlardaki kurallar sayılmaz. Eğer biz STDOUT sonucu yazdırmak edemez (ve katılan fonksiyonları ve dize diziler olmadan I / O ve önler diller için bizim varsayılan geçersiz kılar olarak bu, eğer büyük bir var), bu kural belirtilmesi gereken bir nokta açıkça meydan spesifikasyonundaki.
Dennis,

7
Bu, STDOUT'a yazdırılabilecek böyle bir dizinin dizgi gösterimini dışlamaz. Eğer yorum bölümünde olmasaydı, buna izin verilmediğini asla tahmin edemezdim.
Dennis,

Yanıtlar:



24

Bash 43 34 bayt

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

Çevrimiçi deneyin!



Diş tellerinin nesnel olduğunu düşünmedim. Teşekkürler.
glenn jackman

Ve burada "hangi dizgilerin dizeleri listelerinde doğrudan ürünleri uygun bir şekilde kullandığını bilirim?" Diye düşünüyordum. Eski güzel dünya hakkında düşünmedim bile!
aschepler

1
Teknik olarak ayraç genişletme glob bir model değildir, kendi özel sözdizimidir
glenn jackman

13

brainfuck , 200 197 bayt

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

Çevrimiçi deneyin!

Bir negatif hücre (düzeltmek için +1 bayt), hücreleri (düzeltmek için çok sayıda bayt) ve EOF'de 0 (bağımlılığı kaldırmak için +2 bayt) kullanır.

çıktılar

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

Açıklama:

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

Benim çözümümden 2,5 kattan daha kısa. Aferin.
Rastgele adam

11

05AB1E , 28 27 25 24 23 bayt

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

Çevrimiçi deneyin.

-1 için bayt sayesinde @Emigna çıkarmadan SSONRA "HSDC", çünkü âdolaylı yapar.

Açıklama:

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)

Bu 05AB1E madenin ucu bakın (bölüm kompres dizeleri sözlükte parçası olmayan nasıl? ) Anlamak için .•-Ÿ•ise "ajqk"ve .•ôì•olup "cdhs".


9

brainfuck , 550 504 bayt

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

Çevrimiçi deneyin!

Eski cevap, ayrıca çevrimiçi!


8

Java 10, 153 151 125 77 75 bayt

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

@ OlivierGrégoire sayesinde -28 bayt . @Mazzy
sayesinde -50 bayt .

Çevrimiçi deneyin.

Açıklama:

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
dene "AJQK2345678910".replace("1?.","$0H,$0S,$0D,$0C,")+"J,J"ve böl.
mazzy

1
Smart @mazzy Teşekkürler. Ve zaten düzenliyordum Olivier. :)
Kevin Cruijssen

2
güzel! Desendeki 2 baytı daha fazla çıkarmanın mümkün olduğuna inanıyorum. bkz regex101.com/r/aDbz9C/1
mazzy

1
@mazzy Oh, $0Java'da mümkün olduğunu bile bilmiyordum . TIL, teşekkürler. :)
Kevin Cruijssen

7

APL (Dyalog Unicode) , 29 bayt

Probie sayesinde 1+⍳9yerine 1 bayt kullanıldı1↓⍳10

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

Çevrimiçi deneyin!

Bu tam bir programdır. TIO bağlantısında, dizinin tek tek elemanlarını ayırt edebilmek için boksu etkinleştirdim.

İşte kutulu çıktı.

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

'JJ', 2 şakacı bir araya geldi

, eğrilmiş şekli

∘.,⍨ her kombinasyonunu birleştirerek oluşturulan matris

  • 'HCDS' bu dize karşı

  • 'AKJQ', bu dize ile

    • ⍕¨ her birinin dize edilmiş formları

      • 1+⍳9 sayıları 2..10 (1 artı aralık 1..9)

Açıklamadaki listenizdeki girintiyi değiştirdim. İki ve üç noktayla biraz garip görünüyordu .. Bu, bir nedenden dolayı tasarlandıysa, geri dönmekten çekinmeyin.
Kevin Cruijssen

@KevinCruijssen Teşekkürler, nasıl yapılacağını bulamadım, bu yüzden birden fazla mermi noktası kullandım hah
Kritixi Lithos

Evet, öyle düşündüm, bu yüzden değiştirdim. :) Girintiden önce dört ana boşluğun katlarına ihtiyacınız -var.
Kevin Cruijssen

7

Befunge-98 (FBBI) , 75 bayt

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

Çevrimiçi deneyin!

Program yapısı

görüntü tanımını buraya girin

İlk başta, yığın 0's' ile doldurulur jve ilklendirmenin üzerine atlamaz. Başlatma 4 * 13 = 52, program sayacı olan iter . Aşağıdaki yinelemelerde iz 3, işaretçinin bu bölümden atlamasına neden olur.

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 yazdıran kod:

'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

Sonlandırma:

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

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

7

R , 65 bayt

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

Çevrimiçi deneyin!

@Giuseppe ve @JayCe önerileri sayesinde -2 Bayt


1
Bu tam cevabımdı, ancak tek tırnak yerine çift tırnak kullandım.
Giuseppe

Üzgünüm, cevabınızı iki kez mi yolladım? ... ben kontrol ama herhangi R cevabını bulamadık
digEmAll

Oh hayır ben senin hepsini görmeden önce TIO'da kendim yazdım. :-)
Giuseppe

1
Evet dış kesinlikle buraya gitmek için yoldur! Boşluk belirtime göre önceden belirlenmiş olmasına rağmen, bir bayt kullanarak tasarruf edebilirsiniz paste. @Giuseppe de.
JayCe

Bunu JayCe'nin cevabına dikkat çektim, ancak x<-'J'içini ayarlayabilir outerve sonra bir bayt'ı tıraş etmek xiçin en dıştaki c()ifadede bir değişken olarak yeniden kullanabilirsiniz : Çevrimiçi deneyin!
Giuseppe

6

Powershell, 63 61 59 56 bayt

-3 bayt: teşekkürler ConnorLSW

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

1
-3 ilk bölümü için diziye dize kullanarak:2..10+'AJQK'[0..4]|%{"$_`H";"$_`S";"$_`D";"$_`C"};,'J'*2
colsw

1
güzel! `` `` nasıl kaldırılacağı hakkında herhangi bir fikir?
mazzy

1
Bir dizgede bir değişkeni kırmanın en ucuz yolu olduğunu bildiğim kadarıyla, bir döngüye baktım ama bu şekilde yapmak 2 karakter tarafından daha pahalı.
colsw


5

Python 3 , 67 64 bayt

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

Çevrimiçi deneyin!


Python 2 , 78 76 74 68 bayt

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

Çevrimiçi deneyin!

Alt:

Python 2,68 bayt

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

Kayıtlı

  • Ovs sayesinde -3 bayt

Bu oldukça kapsamlı bir cevap ...
AJFaraday


Kullanmamız gerekmiyorsa , 59 baytta printyapamayız [*[a+b for a in['10',*'A23456789JQK']for b in'CHSD'],*'JJ']. Haskell çözümünün stdout'a çıkması gerekmez, neden Python?
Enrico Borba,

5

K (ngn / k) , 30 bayt

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

Çevrimiçi deneyin!

!9 liste 0 1 ... 8

2+!9 liste 2 3 ... 10

$ dizeye

, concatenate

,'/:her birini her bir hak ile birleştirin, yani Kartezyen ürün; normalde öyle ,/:\:ya ,\:/:da sağda yalnızca skalerlere ( "SHDC") sahibiz, bu yüzden 'yerine kullanabiliriz .\:

"JJ",/"JJ"azaltma için başlangıç ​​değeri olarak kullanarak sağdaki listeye katılın (concat azaltın)


5

MS-SQL, 137 bayt

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'deki bir değerler dizisi ayrı sorgu satırları olarak döndürülür. SQL 2016'da tanıtılanSTRING_SPLIT işlevi kullanır .

Jack için mevcut "J" den yararlanmak için iki "boş dize" kıyafeti ekleyerek ve daha sonra istemediğimiz sıraları filtreleyerek jokerleri içerir. UNION ALLJoker eklemek için ifadeler kullanmaktan daha kısa .


STRING_SPLIT için ikinci argümanı boş bir dize yaparsanız ne olur? MS-SQL kullanmıyorum, ancak birçok dilde bir dizideki tüm karakterleri size verecek.
AJFaraday

@AJFaraday Bu kullanışlı olurdu, ama işe yaramıyor, anlıyorsunuz Procedure expects parameter 'separator' of type 'nchar(1)/nvarchar(1)'. İkinci parametreyi bıraktıysanız, virgül için varsayılan ise, golf oynamak için de elverişlidir, ancak bunu da desteklemez. Bu GolfSQLdilin bir başka maddesi de muhtemelen yazmaktan asla alamayacağım :)
BradC

4

Ruby , 61 bayt

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

Çevrimiçi deneyin!


Bu J'yi hem Jack hem de Joker için kullanma becerisidir
Marty Neal

4 bayt'ı bırakarak kaydedemez misin ->{... }? Kendi başına çalışır ve parametrelere ihtiyaç duymaz, bu nedenle lambda olması gerekmez
Piccolo

4

C # .NET, 114 bayt

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

Java cevabımın limanı ( @mazzy için kredi ) .

Çevrimiçi deneyin.


@Corak tarafından 119 byte ilginç bir alternatif .

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

Çevrimiçi deneyin.

Bir System.Collections.Generic.IEnumerable<string>yerine string[]kabul edilebilir bir çıktı ise, iz .ToArray()bırakılabilir, böylece 109 bayt olur .

Açıklama:

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 Bayt

Çevrimiçi deneyin!

Çevrimiçi deneyin! (Düzenle 1)

kod

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

Tamamen php işlevlerini kullanmaya çalıştım, ancak bytecount bir döngü ile daha düşüktü :(

Çıkış (kullanarak 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
)

Düzenle

explode(" ","H$t S$t D$t C$t")İçin değişiklik önererek @JoKing sayesinde[H.$t,S.$t,D.$t,C.$t]


Patlamaktan [H.$t,S.$t,D.$t,C.$t]daha kısa olmaz mıydı ?
Jo King,

Kesinlikle haklısın, tavsiyene uyacağım, teşekkür ederim.
Francisco Hahn


2
@ FranciscoHahn, üzgünüm, bunu farketmedim! İşte 87 bayt sürümü o zaman: Çevrimiçi deneyin!
Gece2

1
@ Nigth2 array_push($arr, $item1,$item2,$item3...$itemN)böyle kullanabileceğini hiç bir fikrim yoktu , güzel olanı
Francisco Hahn

4

SMBF , 169 bayt

bir hazır bilgi NUL baytını temsil eder \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

Bu saf bir çözüm.

Bu program bir NUL baytı içerdiğinden, TIO kullanmanın kolay bir yolu yoktur. Bunu kullanarak Python yorumlayıcısında çalıştırın.

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 Bunu nasıl ürettiniz?
mbomb007

1
F12 geliştirici araçlarını açtım, gezdirerek metin kutusunu seçtim, konsola gittim ve parçayı boş bayttan önce kopyalayıp yapıştırdıktan sonra yazdım $0.value+='\0'.
Outgolfer Erik,

4

Japt, 32 30 26 bayt

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

Dene

'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

Toplu iş, 118 bayt

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

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

Çevrimiçi deneyin!


1
'J';^:2,;&.>{_13<\'10';;/'23456789AJKQHCDS'biraz daha basit ama 43 için. Burada traş olmak için daha fazla olduğu gibi hissediyorum ... ama nasıl göremiyorum.
Jonah

@Jonah Evet, ben de benzer bir şey denedim ve çözümümün daha fazla golf kullanılabileceğinden eminim, ancak çözülmesi gereken her zaman yeni problemler var :)
Galen Ivanov

3

R , 67 66 bayt

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

Çevrimiçi deneyin!

DigEmAll'in golfçü çözümünden sadece bir bayt daha . Esinlenerek Giuseppe'nin çözümü için bu ilgili meydan cevap olarak kapalıdır tek bayt golfed aynı Giuseppe -!

Ayrı olarak gönderiyorum çünkü 4'ün 13'ün bölen olmadığı ve çıktının belirli bir sırada olması gerekmediği gerçeğinden yararlanmak biraz farklı bir yaklaşım.


oh haha ​​Bunu farketmedim, diğerine bu çözümü yorumladım
Giuseppe

@Giuseppe Kendimi yayınlamak yerine yoruma çok yakındım. Sanırım cevaplama dürtüsüne karşı koyamadım :)
JayCe

iiiit sadece digemall'in cevabı kadar golfçü :-) çevrimiçi denemek
Giuseppe

@Ben sadece deniyordum :) hem digemall hem de seninle bir byte golf
oynayabiliyorum

3

C (gcc) , 126 137 133 bayt

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

Çevrimiçi deneyin!

+11 bayt Jakob sayesinde daha eksiksiz olacak.

Zachary sayesinde -4 bayt

Elbiseleri sıkıştırmak için çoğunlukla ön işlemciyi kötüye kullanmak. Muhtemelen dışarıda golf oynayabilir, ancak dikkate alınan her şey oldukça verimlidir.


1
Bunun cbir "[...] garip 'işlev' [...]" değil, bir makroda saklanan bir dizi bildiriminin olduğunu iddia ediyorum . Böyle bir çıktı biçimi benim bilgime göre varsayılan olarak izin verilmez.
Jonathan Frech

1
C bir dizi olmadığı sürece, yerinde bir değişmez olacaktır. cKaynaktaki her bir 'çağırma' , sonuçtaki yürütülebilir dosyadaki (engelleme optimizasyonları) dizinin yeni bir kopyasını yaratacaktır. Bu nedenle, kod char *a[] = c; char *b[] = c;c'nin iki derin kopyasını oluşturur. Bu davranış, bir işlevden beklediğiniz şeydir.
LambdaBeta

1
Sıfır tamsayısının çıktısı için bir zorluk olsaydı, C kodunu c=0;geçerli bir gönderim colarak görür ve işlev olarak mı görürdünüz ?
Jonathan Frech

1
hayır, ama #define z 0geçerli sayılırdım . : Akıl olmasıdır c=0; c++; x=c;sonuçlanır x == 1böylece cbir işlev gibi pek davranmıyor. Bu arada #define z 0 c=z; c++; x=z;sonucu yapar x == 0bu yüzden zbir fonksiyonu gibi davranır.
LambdaBeta

1
Sözde işlevi ilk değiştirdiğiniz zaman bunun adil bir kıyaslama olduğunu düşünmüyorum, sonra sadece sözde işlevin dönüş değerini değiştirin. z=0;/**/c=z;c++;x=z;sonuçlanır x==0, böylece bir zişlev gibi davranır.
Jonathan Frech

3

Javascript (ES6) 77 74 72 bayt

Bu tam bir programdır.

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

1
Güzel. Birleştirmek yerine virgüllere bölerek birkaç bayttan tasarruf edebilirsiniz: BTJ,J,${[..."A23456789JQK","10"].map(c=>[..."SDHC"].map(s=>c+s))}BT.splitBT,BT (burada BT bir backtick'tir).
Rick Hitchcock

Müthiş öneri! Teşekkürler.
Matt,

3

C (gcc, clang), 138 bayt

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

Yaklaşım dizileri karakter dizilerinde kodlamaktır.

Örnek çıktı

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

Çevrimiçi deneyin!


İpucu: Hepsini silmek için bir printftanesini kullanabilirsiniz putchar.
Dennis,


1
Çıktı yönteminize gelince, OP yazdırmaya izin vermez .
Jonathan Frech

Jonathan Frech ve Dennis 113 bayt üzerine
inşa

3

Oracle SQL, 164 bayt

Golf dili değil ama ...

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

Çevrimiçi deneyin - SQL Fiddle


2
Birisinin bu
soruyu

postgres neredeyse bunu sadece 172 baytlık bir dizgeyle atıyor, '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, HY, KH, AC, 2C, 3C, 4C, 5C, 6C, 7C, 8C, 9C, 10C, JC, QC, KC, J, J ''
dwana

@dwana Bu bir dizge dizisi değildir (ya da bu SQL olduğundan, bir sıralar dizisidir). Sorunun özelliklerini karşılamak için dizgiyi satırlara (veya sütunlara) bölmeniz gerekir. Bunu ayrı bir PostgreSQL çözümü olarak yapmak istiyorsanız o zaman bunu görmek isterim.
MT0

üzgünüm, dizi gereksinimini
görmedim

3

Lua ,156 127 138 129 bayt

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'

Çevrimiçi deneyin!

Jo King'in koduna göre. Yorumlarda önerdiği gibi, orjinal cevabım geçerli değildi (hala golf kodunun nasıl çalıştığını öğreniyorum 😬) ve daha iyi ve geçerli bir cevabı birbirine bağladı. Sonra daha küçük yaptım.


Orijinal çözüm (156 bayt):

r = {} s = "SDHC" c = {"J", "Q", "K"} t = s için x için table.insert: gmatch "." y = 1,13 için yapın (y == 1 ve "A" veya y> 10 ve c [y-10] veya y) .. x) _ = 1,2 için bitiş sonu t (r, "J") sonu
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

Sadece bu Code Golf işinde yeni olduğumu söylemek istiyorum, bu yüzden yanlış bir şey yapıyorsam, bana söylemekten çekinmeyin. Bu cevabın en küçük cevaplardan biri olmadığını biliyorum, sadece kendime meydan okumak istedim.

Kodumu azaltmak için önerileriniz varsa da diyebilirsiniz. :)


1
Siteye Hoşgeldiniz!
Buğday Sihirbazı,

@WW teşekkürler! Hahah: D
Visckmart

Masada ne olacak r? Ya STDOUT'a yazdırmanız ya da bunu bir işleve dönüştürmeniz ve geri vermeniz gerekiyorr
Jo King

Lua konusunda uzman değilim, ancak geçerli bir 142 bayt isimsiz işlev
Jo King


3

Perl 6 ,  43  42 bayt

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

Dene

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

Deneyin dan Jo Kral

Expanded:

{  # bare block lambda

    |(  # flatten into outer list

        |(  # flatten into left-side list for X~
          ^9 + 2
          # 0+2 ..^ 9+2
          #   2 ..^ 11
          #   2 ..  10
        ),
        |   # flatten into left-side list for X~

          < A J Q K >

      X~    # cross using &infix:« ~ » (string concatenation)

        <S D H C>

    ),
    |< J J > # flatten two `J`s into outer list
}


3

QBasic 4.5, 114 142 127 bayt

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

Sürüm notları:

  • V1.0 İlk dağıtım
  • V1.1 Meydan okuma gereksinimlerini yanlış anlayın, bu nedenle daha pahalı bir diziye geçin r$. Kodun geri kalanı hemen hemen aynı.
  • V1.2 @TaylorScott'tan gelen öneriler, 15 byte tasarruf sağlayan tam bir yeniden yazma işlemine yol açtı!

Örnek çıktı

Bu pasajı kodumuza eklersek, neyin içine konulduğunu görebiliriz 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

Ama nasıl? Peki, sana söyleyeyim:

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.

Bu dizi dizisi gereksinimlerini karşılamıyor ve baskı yapmak STDOUTkesinlikle yasak
Taylor Scott

@TaylorScott Fark ettiğiniz için teşekkürler. Şimdi düzeltildi, @ 30 bayt ekstra.
steenbergh

1
Sana bırakarak ByteCount aşağı elde edebilmek gerektiğini düşünüyorum a$ve b$vars ve benzeri bir çizgi şey kullanarakr$(i)=MID$("JQKA2345678910",1+m,1-(m=12))+MID$("CDHS",(i-1)\13+1,1)
Taylor Scott

1
@TaylorScott Teşekkürler! Değerler dizisinde yapılan yeniden düzenleme özellikle zekice. Güzel!
steenbergh

Bu sadece daha uzunPRINT "<output>"
Tornado547

3

Pyth, 26 25 bayt

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

Hakr14 sayesinde bir bayt kaydedildi.
Burada dene

açıklama

+ 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+\Jve +*2]\Jeşittir ve her ikisi de 6 bayt, ancak ikincisi daha iyi bir form olarak kabul edilir, çünkü herhangi bir ek bayta ihtiyaç duyulmadan önce 10 kopya eklenmesini sağlar.
hakr14

@ hakr14 Doğru, ancak en temiz veya en genelleştirilebilir kodu yazma uğruna kod golfüne girmiyorum.

+\J+\J+ B\JBir bayt kaydetmek için ile değiştirilebilir .
hakr14
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.