Wygeneruj talię kart


32

Oto tablica reprezentująca standardową talię kart, w tym dwóch Jokerów.

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

Składa się w następujący sposób:

  • Istnieją cztery kolory; kier, pik, karo i trefl (H, S, D, C).
  • Każdy kolor ma jedną kartę dla liczb od 2 do 10, plus 4 karty „obrazkowe”, as, walet, królowa i król (A, J, Q, K).
  • Dla każdej kombinacji koloru i wartości powinien być jeden element w tablicy, który jest łańcuchem i składa się z wartości, po której następuje kolor (dozwolone są białe spacje między nimi).
  • Ponadto istnieją dwie karty Jokera („J”).
  • Pisz w dowolnym języku.
  • Zagraj w golfa! Spróbuj wygenerować ten wynik w jak najmniejszej liczbie bajtów.
  • Nie ma znaczenia, w jakiej kolejności jest wyjście.

2
@KevinCruijssen to prawda. Początkowe pytanie określa liczby od 2 do 10 oraz tablicę ciągów jako wynik.
AJFaraday

15
Zastanawiałem się, czy uda ci się zdobyć 23456789, mnożąc 2 mniejsze liczby ... tylko po to, by odkryć, że jest to najlepsza!
mecz

4
@match Ponieważ kolejność wyjścia nie ma znaczenia, może nadal można go utworzyć z mniejszych numerach kończąc go 2lub 4czy cokolwiek innego, więc nie jest już premierem.
Kevin Cruijssen

5
Reguły w komentarzach się nie liczą. Jeśli nie możemy wydrukować wyniku do STDOUT (a to jest duże, ponieważ, ponieważ zastępuje on nasze wartości domyślne dla We / Wy i zapobiega udziałom języków bez funkcji i tablic łańcuchowych), reguła ta musi być wyraźnie określona w specyfikacji wyzwania.
Dennis

7
To nie wyklucza reprezentacji ciągu takiej tablicy, którą można wydrukować do STDOUT. Gdyby nie sekcja komentarzy, nigdy bym nie zgadł, że to niedozwolone.
Dennis

Odpowiedzi:



24

Bash 43 34 bajty

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

Wypróbuj online!



Nie sądziłem, że nawiasy klamrowe można zagnieździć. Dzięki.
glenn jackman

I tutaj myślałem „w jakim języku znam, że wygodnie jest bezpośrednio umieszczać produkty na listach ciągów?” Nie myślałem nawet o starym dobrym globu!
aschepler

1
Technicznie ekspansja nawiasów klamrowych nie jest globalnym wzorcem, lecz swoją własną specjalną składnią
glenn jackman

13

pieprzenie mózgu , 200 197 bajtów

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

Wypróbuj online!

Wykorzystuje jedną ujemną komórkę (+1 bajty do naprawy), zawija komórki (dużo bajtów do naprawy) i 0 na EOF (+2 bajty, aby usunąć zależność).

Wyjścia

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

Wyjaśnienie:

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

To ponad 2,5 raza krócej niż moje rozwiązanie. Dobra robota.
Przypadkowy facet

11

05AB1E , 28 27 25 24 23 bajtów

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

Wypróbuj online.

-1 bajt dzięki usunięciu @EmignaS po "HSDC", ponieważ ârobi to niejawnie.

Wyjaśnienie:

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)

Zobacz moją wskazówkę 05AB1E (sekcja Jak kompresować ciągi znaków nie będące częścią słownika? ), Aby zrozumieć, dlaczego .•-Ÿ•jest "ajqk"i .•ôì•jest "cdhs".


9

pieprzenie mózgu , 550 504 bajtów

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

Wypróbuj online!

Stara odpowiedź, także online!


8

Java 10, 153 151 125 77 75 bajtów

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

-28 bajtów dzięki @ OlivierGrégoire .
-50 bajtów dzięki @mazzy .

Wypróbuj online.

Wyjaśnienie:

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
spróbuj "AJQK2345678910".replace("1?.","$0H,$0S,$0D,$0C,")+"J,J"to podzielić.
mazzy

1
Smart @mazzy Thanks. I już go edytowałem, Olivier. :)
Kevin Cruijssen

2
fajne! Wierzę, że można usunąć 2 bajty więcej - nawiasy we wzorcu. patrz regex101.com/r/aDbz9C/1
mazzy

1
@mazzy Oh, nawet nie wiedziałem, że $0jest możliwe w Javie. TIL, dzięki. :)
Kevin Cruijssen

7

APL (Dyalog Unicode) , 29 bajtów

1 bajt zapisany dzięki Probie przy użyciu 1+⍳9zamiast1↓⍳10

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

Wypróbuj online!

To jest pełny program. W linku TIO włączyłem boks, aby można było rozróżnić poszczególne elementy tablicy.

Oto wyjście w pudełku.

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

'JJ', 2 jokerów połączone

, popsuta forma

∘.,⍨ macierz utworzona przez połączenie każdej kombinacji

  • 'HCDS' ten ciąg przeciwko

  • 'AKJQ', ten ciąg z

    • ⍕¨ formy rygorystyczne każdego z nich

      • 1+⍳9 liczby 2..10 (1 plus zakres 1..9)

Zmieniłem wcięcie twojej listy w wyjaśnieniu. Z dwiema i trzema kropkami wyglądało to trochę dziwnie. Jeśli to z jakiegoś powodu było zamierzone, nie krępuj się.
Kevin Cruijssen

@KevinCruijssen Dzięki, nie mogłem wymyślić, jak to zrobić, więc użyłem wielu punktorów hah
Kritixi Lithos

Tak, tak myślałem, dlatego to zmieniłem. :) Potrzebujesz wielokrotności czterech wiodących spacji przed -wcięciem.
Kevin Cruijssen

7

Befunge-98 (FBBI) , 75 bajtów

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

Wypróbuj online!

Struktura programu

wprowadź opis zdjęcia tutaj

Na początku stos jest wypełniony literami 0„s” i jnie przeskakuje podczas inicjalizacji. Inicjalizacja popycha 4 * 13 = 52, czyli licznik programu. W kolejnych iteracjach trailing 3powoduje przeskakiwanie wskaźnika przez tę część.

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

Kod drukujący 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

Zakończenie:

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

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

7

R , 65 bajtów

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

Wypróbuj online!

-2 bajty dzięki sugestiom @Giuseppe i @JayCe


1
To była moja dokładna odpowiedź, chociaż myślę, że użyłem podwójnych cudzysłowów zamiast pojedynczych cudzysłowów.
Giuseppe

Przepraszam, czy podwójnie opublikowałem twoją odpowiedź? Sprawdziłem, ale nie mogłem znaleźć żadnej odpowiedzi R ...
digEmAll

O nie, właśnie napisałem to wszystko w TIO, zanim cię zobaczyłem :-)
Giuseppe

1
Tak, zewnętrzny to zdecydowanie sposób, aby przejść tutaj! Chociaż spacje są wstępnie stosowane zgodnie ze specyfikacją, dzięki czemu można zapisać jeden bajt za pomocą paste. @Giuseppe też.
JayCe,

Zwróciłem na to uwagę w odpowiedzi JayCe, ale możesz ustawić x<-'J'wewnątrz zmiennej, outera następnie ponownie użyć jej xjako zmiennej w skrajnym c()zestawieniu, aby zgubić bajt: Wypróbuj online!
Giuseppe

6

PowerShell, 63 61 59 56 bajtów

-3 bajty: dzięki ConnorLSW

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

1
-3 użycie ciągu do tablicy w pierwszej części:2..10+'AJQK'[0..4]|%{"$_`H";"$_`S";"$_`D";"$_`C"};,'J'*2
colsw

1
fajne! jakiś pomysł, jak usunąć `` ``?
mazzy

1
O ile wiem, jest to najtańszy sposób na rozbicie zmiennej w łańcuchu, przyjrzałem się pętli, ale jest to o 2 znaki droższe, aby zrobić to w ten sposób.
colsw


5

Python 3 , 67 64 bajtów

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

Wypróbuj online!


Python 2 , 78 76 74 68 bajtów

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

Wypróbuj online!

Alt:

Python 2 , 68 bajtów

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

zapisane

  • -3 bajty, dzięki ovs

To dość dokładna odpowiedź ...
AJFaraday


Jeśli nie musimy używać print, nie możemy tego zrobić [*[a+b for a in['10',*'A23456789JQK']for b in'CHSD'],*'JJ']w 59 bajtach. Rozwiązanie Haskell nie musi być wysyłane na standardowe wyjście, dlaczego Python?
Enrico Borba

5

K (ngn / k) , 30 bajtów

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

Wypróbuj online!

!9 jest lista 0 1 ... 8

2+!9 jest lista 2 3 ... 10

$ sznurka

, powiązać

,'/:łączenie każdego z każdym prawem, tj. produktu kartezjańskiego; zwykle jest ,/:\:lub, ,\:/:ale po prawej stronie mamy tylko skalary ( "SHDC"), więc możemy użyć 'zamiast\:

"JJ",/dołącz (konkat zmniejsz) do listy po prawej, używając "JJ"jako wartości początkowej redukcji


5

MS-SQL, 137 bajtów

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'

Tablica wartości w SQL jest zwracana jako osobne wiersze zapytania. Korzysta z STRING_SPLITfunkcji wprowadzonej w SQL 2016 .

Obejmuje jokery, dodając dwa „puste ciągi” koloru, aby wykorzystać istniejące „J” dla Jacka, a następnie odfiltrowując wiersze, których nie chcemy. Krótszy niż użycie UNION ALLinstrukcji do dodania jokerów.


Co się stanie, jeśli drugi argument dla STRING_SPLIT będzie pusty? Nie używam MS-SQL, ale w wielu językach dałoby to wszystkie znaki w tablicy.
AJFaraday

@AJFaraday To byłoby przydatne, ale to nie działa, rozumiesz Procedure expects parameter 'separator' of type 'nchar(1)/nvarchar(1)'. Przydałoby się również do gry w golfa, gdyby domyślnie był przecinek, jeśli pominąłeś drugi parametr, ale też nie obsługuje tego. Kolejny element dla GolfSQLjęzyka, którego prawdopodobnie nigdy nie będę pisał :)
BradC

4

Rubin , 61 bajtów

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

Wypróbuj online!


To trochę umiejętność używania J zarówno dla Jacka, jak i Jokera :-)
Marty Neal

Nie możesz zaoszczędzić 4 bajtów, pomijając ->{... }? Działa samodzielnie i nie potrzebuje parametrów, więc nie powinna być lambda
Piccolo,

4

C # .NET, 114 bajtów

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

Port mojej odpowiedzi Java (kredyt dla @mazzy ) .

Wypróbuj online.


Ciekawa alternatywa 119 bajtów autorstwa @Corak .

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

Wypróbuj online.

Jeśli System.Collections.Generic.IEnumerable<string>zamiast string[]jest akceptowalnym wyjściem, końcowe .ToArray()może zostać porzucone, aby uzyskać 109 bajtów .

Wyjaśnienie:

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 bajtów

Wypróbuj online!

Wypróbuj online! (Edytuj 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]);

Próbowałem użyć funkcji czysto php, ale liczba bajtów była mniejsza z pętlą :(

Wyjście (za pomocą 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
)

Edytować

Dzięki @JoKing sugerując zmianę explode(" ","H$t S$t D$t C$t")na[H.$t,S.$t,D.$t,C.$t]


Czy nie [H.$t,S.$t,D.$t,C.$t]byłby krótszy niż eksplodować?
Jo King

Masz absolutną rację, skorzystam z twojej rady, dziękuję.
Francisco Hahn


2
@FranciscoHahn, przepraszam, nie zauważyłem tego! Oto wersja 87-bajtowa: Wypróbuj online!
Noc2,

1
@ Nigth2 nie miałem pojęcia, że ​​możesz tego array_push($arr, $item1,$item2,$item3...$itemN)tak używać , fajny
Francisco Hahn

4

SMBF , 169 bajtów

reprezentuje dosłowny bajt 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

To naiwne rozwiązanie.

Ponieważ ten program zawiera bajt NUL, nie ma łatwego sposobu korzystania z TIO. Uruchom to za pomocą interpretera języka 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 Jak to wygenerowałeś?
mbomb007,

1
Otworzyłem narzędzia programistyczne F12, zaznaczyłem pole tekstowe po najechaniu myszką, poszedłem do konsoli i po skopiowaniu i wklejeniu części przed bajtem zerowym, napisałem $0.value+='\0'.
Erik the Outgolfer,

4

Japt, 32 30 26 bajtów

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

Sprawdź to

'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

Partia, 118 bajtów

@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 bajtów

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

Wypróbuj online!


1
'J';^:2,;&.>{_13<\'10';;/'23456789AJKQHCDS'nieco prostsze, ale jak na 43. Czuję, że jest tu więcej do golenia ... ale nie widzę, jak to zrobić.
Jonah

@Jonah Tak, próbowałem też czegoś podobnego i jestem pewien, że moje rozwiązanie może być dalej gry w golfa, ale zawsze są nowe problemy do rozwiązania :)
Galen Ivanov

3

R , 67 66 bajtów

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

Wypróbuj online!

Tylko jeden bajt więcej niż rozwiązanie digEmAll dla golfistów . Zainspirowany rozwiązaniem Giuseppe do tego pokrewnego wyzwania - ten sam Giuseppe, który odpowiedział jednym bajkiem!

Piszę osobno, ponieważ jest to nieco inne podejście, wykorzystujące fakt, że 4 nie jest dzielnikiem 13 i że wynik nie musi być w określonej kolejności.


o haha, nie zauważyłem tego, skomentowałem to rozwiązanie na drugim
Giuseppe

@Giuseppe Byłem bardzo bliski komentowania zamiast publikowania siebie. Chyba po prostu nie mogłem się oprzeć pokusie odpowiedzi :)
JayCe

iiiit jest tak samo golfowy jak odpowiedź digemall :-) spróbuj online
Giuseppe

@ Właśnie eksperymentowałem z tym :), więc zarówno digemall, jak i ja możemy zagrać w golfa dzięki Tobie :)
JayCe

3

C (gcc) , 126 137 133 bajtów

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

Wypróbuj online!

+11 bajtów, aby być bardziej kompletnym dzięki Jakobowi.

-4 bajty dzięki Zachary'emu

Najczęściej nadużywanie preprocesora do kompresji kombinezonów. Prawdopodobnie może być poza golfem, ale jest całkiem skuteczny, biorąc pod uwagę wszystko.


1
Twierdziłbym, że cnie jest to „[...] dziwna” funkcja „[...]”, ale deklaracja tablicowa przechowywana w makrze. Taka forma wyników jest według mojej wiedzy domyślnie niedozwolona.
Jonathan Frech

1
Poza tym, że c nie jest tablicą, byłby literałem na miejscu. Każde „wywołanie” cw źródle utworzy nową kopię tablicy w wynikowym pliku wykonywalnym (optymalizacje blokujące). Zatem kod char *a[] = c; char *b[] = c;tworzy dwie głębokie kopie c. Tego zachowania można się również spodziewać po funkcji.
LambdaBeta

1
Jeśli pojawiłoby się wyzwanie, aby wypisać liczbę całkowitą zero, czy uznalibyście kod C c=0;za poprawne przesłanie, postrzegane cjako funkcja?
Jonathan Frech

1
nie, ale uważam za #define z 0ważne. Powodem jest to, że: c=0; c++; x=c;powoduje x == 1, cże nie działa tak jak funkcja. Tymczasem #define z 0 c=z; c++; x=z;powoduje, x == 0że zdziała więc jak funkcja.
LambdaBeta

1
Nie sądzę, aby było to uczciwe porównanie, ponieważ najpierw zmieniasz przypuszczalną funkcję, a następnie zmieniasz tylko wartość zwracaną przez rzekomą funkcję. z=0;/**/c=z;c++;x=z;powoduje x==0, więc zdziała jak funkcja.
Jonathan Frech

3

JavaScript (ES6) 77 74 72 bajty

To jest kompletny program.

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

1
Miły. Możesz zaoszczędzić kilka bajtów, dzieląc przecinki zamiast konkatenacji: BTJ,J,${[..."A23456789JQK","10"].map(c=>[..."SDHC"].map(s=>c+s))}BT.splitBT,BT (gdzie BT to backstick).
Rick Hitchcock,

Niesamowita sugestia! Dzięki.
MattH

3

C (gcc, clang), 138 bajtów

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

Podejście polega na kodowaniu sekwencji w tablicach znaków.

Przykładowe dane wyjściowe

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

Wypróbuj online!


Wskazówka: możesz użyć jednego, printfaby pozbyć się wszystkich putchars.
Dennis


1
Jeśli chodzi o metodę wydruku, PO nie zezwala na drukowanie .
Jonathan Frech,

Opierając się na Jonathan Frech i Dennis 113 bajtów
pułapkot

3

Oracle SQL, 164 bajty

Nie język golfa, ale ...

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

Wypróbuj online - SQL Fiddle


2
Uwielbiam to, że ktoś odpowiedział na to przez Oracle SQL
AJFaraday

postgres prawie bije to za pomocą zaledwie 172 bajtów, „wybierz” 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 To nie jest tablica ciągów (lub, ponieważ jest to SQL, zestaw wierszy). Trzeba podzielić ciąg na wiersze (lub kolumny), aby spełnić specyfikację pytania. Jeśli chcesz to zrobić jako osobne rozwiązanie PostgreSQL, to chciałbym to zobaczyć.
MT0

przepraszam, nie widziałem wymagania tablicowego
dwana

3

Lua ,156 127 138 129 bajtów

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'

Wypróbuj online!

Na podstawie kodu Jo Kinga. Jak zasugerował w komentarzach, moja pierwotna odpowiedź była nieprawidłowa (wciąż uczę się, jak działa golf golfowy 😬) i połączyłem lepszą i prawidłową odpowiedź. Potem zmniejszyłem to.


Oryginalne rozwiązanie (156 bajtów):

r = {} s = "SDHC" c = {"J", "Q", "K"} t = table.insert dla x in s: gmatch "." do dla y = 1,13 do t (r, (y == 1 i „A” lub y> 10 i c [y-10] lub y) .. x) koniec końca dla _ = 1,2 do t (r, „J”) koniec
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

Chcę tylko powiedzieć, że jestem nowy w tym golfie, więc jeśli robię coś złego, nie krępuj się i powiedz mi. Wiem, że ta odpowiedź nie jest jedną z najmniejszych, po prostu chciałam rzucić sobie wyzwanie.

Jeśli masz sugestie dotyczące zmniejszenia mojego kodu, możesz również powiedzieć. :)


1
Witamy na stronie!
Wheat Wizard

@WW dzięki! Hahah: D
Visckmart

Co dzieje się ze stołem r? Albo musisz go wydrukować do STDOUT, albo zmienić na funkcję i wrócićr
Jo King

Nie jestem ekspertem od Lua, ale oto ważna anonimowa funkcja
Jo King


3

Perl 6 ,  43  42 bajtów

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

Spróbuj

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

Spróbuj od Jo Kinga

Rozszerzony:

{  # 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 bajtów

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

Informacje o wydaniu:

  • Wersja 1.0 Wstępne wdrożenie
  • Wersja 1.1 Źle odczytano wymagania dotyczące wyzwań, dlatego zmieniono na droższą macierz r$. Cała reszta kodu jest prawie taka sama.
  • V1.2 Sugestie @TaylorScott prowadzą do całkowitego przepisania, oszczędzając 15 bajtów!

Próbka wyjściowa

Jeśli dodamy ten fragment kodu do naszego kodu, możemy zobaczyć, co jest włożone 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

Ale jak? Cóż, powiem ci:

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.

To nie spełnia wymagań tablicy ciągów, a drukowanie do STDOUTjest wyraźnie zabronione
Taylor Scott,

@TaylorScott Dzięki za zauważenie. Naprawiono teraz, dodatkowe 30 bajtów.
steenbergh

1
Myślę, że powinieneś być w stanie zmniejszyć liczbę bajtów, upuszczając a$i b$vars i używając linii czegoś w stylur$(i)=MID$("JQKA2345678910",1+m,1-(m=12))+MID$("CDHS",(i-1)\13+1,1)
Taylor Scott,

1
@TaylorScott Thanks! To przetasowanie łańcucha wartości jest szczególnie sprytne. Miły!
steenbergh

To dłużej niż tylkoPRINT "<output>"
Tornado547,

3

Pyth, 26 25 bajtów

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

Zapisano bajt dzięki hakr14.
Wypróbuj tutaj

Wyjaśnienie

+ 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+\Ji +*2]\Jsą równoważne i oba 6 bajtów, ale ta druga jest uważana za lepszą formę, ponieważ pozwala na dodanie do 10 kopii, zanim potrzebne będą dodatkowe bajty.
hakr14

@ hakr14 To prawda, ale nie interesuję się golfem dla pisania najczystszego lub najbardziej ogólnego kodu.

+\J+\Jmożna zastąpić przez, + B\Jaby zapisać bajt.
hakr14
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.