Pomóż dealerowi odbudować talię

19

Krupier był niechlujny i stracił kontrolę nad tym, jakie karty zawiera jego / jej talia i jakich kart brakuje, czy możesz mu pomóc?


Kompletna talia składa się z 52 kart do gry, a mianowicie:

Każdy kolor w talii (kier, karo, pik, trefl) zawiera:

  • Liczby [2–10]
  • Lewarek
  • Królowa
  • Król
  • As

Zadanie

Twój program będzie czytał zawartość talii ze STDIN aż do odczytania nowej linii. Możesz założyć, że dane wejściowe będą miały postać „nX nX nX nX” itd. Gdzie:

  • n - dowolna liczba między [2–10] lub „J”, „Q”, „K” lub „A”. (Wielkie litery można założyć tylko dla znaków nienumerycznych)
  • X - dowolny z poniższych: „H”, „D”, „S”, „C” (można założyć tylko wielkie litery)

Gdzie:

  • „J” = walety
  • „Q” = królowa
  • „K” = król
  • „A” = as

I

  • „H” = serca
  • „D” = Diamenty
  • „S” = pik
  • „C” = trefl

Możesz założyć, że na wejściu nie będzie duplikatów.

Twój program musi następnie wydrukować brakujące karty w talii do STDOUT w taki sam sposób jak wejście („nX nX nX”) lub wydrukować „Brak brakujących kart”, jeśli wszystkie 52 karty są dostarczone. Nie ma ograniczeń co do kolejności wydawania kart.

Przykładowe dane wejściowe:

9H AH 7C 3S 10S KD JS 9C 2H 8H 8C AC AS AD 7D 4D 2C JD 6S

Wynik:

3H 4H 5H 6H 7H 10H JH QH KH 2D 3D 5D 6D 8D 9D 10D QD 2S 4S 5S 7S 8S 9S QS KS 3C 4C 5C 6C 10C JC QC HC

Miłej gry w golfa!

Kurczak Sombrero
źródło
3
Czy możemy użyć Tzamiast 10?
Arnauld,
@Arnauld Obawiam się, że to wszystkie informacje, które dał mi sprzedawca, więc będziesz musiał trzymać się „10”, bo inaczej zrobi się kapryśny.
Kurczak Sombrero,
@GillBates Nie Jreprezentuje 10jednak?
Okx,
@Okx 2 3 4 5 6 7 8 9 10 J Q K A. Jreprezentuje 11.
HyperNeutrino,
@Okx Jto dziesiąta litera alfabetu, ale nie o to chodzi. :)
mbomb007

Odpowiedzi:

8

Windows Batch (CMD), 205 204 bajtów

@set/pc=
@set d=
@for %%s in (H D S C)do @for %%r in (2 3 4 5 6 7 8 9 10 J Q K A)do @call set d=%%d%% %%r%%s
@for %%c in (%c%)do @call set d=%%d: %%c=%%
@if "%d%"=="" set d= No missing cards
@echo%d%

Pętle i kolory tworzą kompletną talię, a następnie usuwa karty wejściowe. Zapisz 1 bajt, jeśli Tjest dozwolone zamiast 10. Zapisz 11 bajtów, jeśli argumenty wiersza poleceń są akceptowalnymi danymi wejściowymi. Edycja: Zapisano 1 bajt dzięki @ user202729.

Neil
źródło
Liczę 200 bajtów.
HyperNeutrino
@HyperNeutrino W systemie Windows korzystam z Notatnika, aby zapisać plik, co oznacza, że ​​nowa linia kosztuje mnie 2 bajty zamiast jednego. Jestem zbyt leniwy, aby używać innego edytora do zapisywania bajtów.
Neil,
Och lol dobrze. Dostaję 200 bajtów za pomocą Sublime Text.
HyperNeutrino,
@Neil W systemie Windows można użyć LF zamiast CR LF, zapisuje 5 bajtów (komentarz HyperNeutrino powyżej) i nadal działa.
user202729,
Możesz także przekazać /vdo CMD (+3 bajt?), Aby EnableDelayedExpansionwyeliminować callw pętli for. / Wydaje się, że masz dodatkową przestrzeń między (%c%)i do?
user202729,
8

Pyton, 147 146 145 138 131 129 127 125 120 bajtów

print(' '.join(set(`x`+y for x in range(2,11)+list('JQKA')for y in'HDSC')-set(raw_input().split()))or'No missing cards')

Pobiera wszystkie możliwe karty jako zestaw i odejmuje karty wejściowe.

-1 bajt dzięki mbomb007 wskazując dodatkowe miejsce w moim kodzie.
-1 bajt dzięki mbomb007 za wskazanie, niektóre golfa, które mogą być wykonane z Python 2 (-5 bajtów i + 4 bajty raw_w raw_input)
-7 bajtów, przełączając się z użyciem zestawów i są ustawione odejmowania listy listowe
-7 bajty dzięki ValueInk za wskazanie, że nie potrzebuję listpakietów
-2 bajtów dzięki Datastream za zwrócenie uwagi, że samo zapisanie wszystkich wartości jest bardziej efektywne bajtowo niż dziwna rzecz, którą miałem wcześniej
-2 bajty dzięki ValueInk za wskazanie że zestawy mogą przyjmować generatory, więc nie muszę umieszczać ich w liście
-2 bajty dzięki Datastream za wskazanie, że mogę jeszcze bardziej pograć w golfa, jeśli ponownie przełączę się na Python 3 ... (+2 za parens po wydrukowaniu, -4 za raw_)
-5 bajtów dzięki Lulhum i mnie za wskazanie poza tym przejście z powrotem do Pythona 2 (!!!) może pomóc mi zaoszczędzić bajty (ponowne użycie zakresu, użycie odwrotności zamiast str(i +4 z powodu raw_)

HyperNeutrino
źródło
1
Masz dodatkową przestrzeń, którą możesz usunąć, i możesz użyć `d`zamiast, str(d)jeśli używasz Python 2, oprócz usuwania parens dla print.
mbomb007
@ mbomb007 Thanks!
HyperNeutrino,
for y in 'HDSC'Działa również w celu uzyskania wszystkich postaci. (Nadal jednak potrzebujesz list('JQKA')drugiej części.)
Wartość tuszu
1
'1 2 3 4 5 6 7 8 9 10 J Q K A'.split()Może zaoszczędzić kilka bajtów zamiast trwającej manipulacji [d for d in range(2,11)]+list('JQKA').
Datastream
Uzgodnione, wygląda na to, że pozwoli zaoszczędzić 2 bajty z uwagi na fakt, że 1nie trzeba go dodawać. Możesz także usunąć nawiasy zewnętrzne dla pierwszego zrozumienia listy, ponieważ setkonstruktor dobrze przyjmuje obiekty generatora.
Wartość tuszu
7

05AB1E , 39 bajtów

ðIð¡YTŸ"JQKA"S«"CDHS"SâJsKðýDg>i“Noœ¶‡¶

Wypróbuj online!

Wyjaśnienie

ðI                                       # push space and input
  ð¡                                     # split on spaces
    YTŸ                                  # push the range [2 ... 10]
       "JQKA"S«                          # append ['J','Q','K','A']
               "CDHS"Sâ                  # cartesian product with suits
                       J                 # join each card with its suit
                        sK               # remove any cards in input from the list of all cards
                          ðýDg>i         # if the length of the resulting list is 0
                                “Noœ¶‡¶  # push the string "No missing cards"
                                         # output top of stack
Emigna
źródło
5

CJam , 49 47 bajtów

B,2>"JQKA"+"HDSC"m*:slS/-S*"No missing cards"e|

Wypróbuj online!

Wyjaśnienie

B,                    e# The range from 0 to 10
2>                    e# Slice after the first two elements, giving the range from 2 to 10
"JQKA"+               e# Concatenate with "JQKA", giving the array containing all ranks
"HDSC"                e# The string containing all suits
m*                    e# Take the Cartesian product
:s                    e# And cast each pair to a string. Now a full deck has been constructed
l                     e# Read a line of input
S/                    e# Split it on spaces
-                     e# Remove all cards from the deck that were in the input
S*                    e# Join the result with spaces
"No missing cards"    e# Push the string "No missing cards"
e|                    e# Take the logical OR of the result and the string, returning the
                      e#   first truthy value between the two. (empty arrays are falsy)
Business Cat
źródło
5

Galaretka , 39 bajtów

9R‘Ṿ€;“JQKA”p“CDHS”F€œ-ɠḲ¤Kȯ“¡¢ıḍĖ9ṭƥw»

Wypróbuj online!

W jaki sposób?

9R‘Ṿ€;“JQKA”p“CDHS”F€œ-ɠḲ¤Kȯ“¡¢ıḍĖ9ṭƥw» - Main link: no arguments
9R                                      - range(1,9)    [1,2,3,4,5,6,7,8,9]
  ‘                                     - increment     [2,3,4,5,6,7,8,9,10]
   Ṿ€                                   - uneval each  [['2'],['3'],['4'],['5'],['6'],['7'],['8'],['9'],['10']]
     ;“JQKA”                            - concatenate with char-list "JQKA" [['2'],['3'],['4'],['5'],['6'],['7'],['8'],['9'],['10'],['J'],['Q'],['K'],['A']]
            p“CDHS”                     - Cartesian product with char-list "CDHS" [[['2'],['C']],[['2'],['D']],...]
                   F€                   - flatten each [['2','C'],['2','S'],...]
                         ¤              - nilad followed by link(s) as a nilad
                       ɠ                -     read a line from STDIN
                        Ḳ               -     split on spaces
                     œ-                 - multi-set difference
                          K             - join with spaces
                            “¡¢ıḍĖ9ṭƥw» - compressed string "No missing cards"
                           ȯ            - logical or
                                        - implicit print
Jonathan Allan
źródło
5

C #, 343 bajtów

Po raz pierwszy opublikowałem jeden z moich golfów, ale niezbyt dobry kandydat. Jestem pewien, że mogę to jeszcze bardziej zmniejszyć.

Ideą tego jest rzadka tablica przechowująca wystąpienia kart, z indeksami obliczonymi przez wartości ASCII różnych wartości i kolorów pomnożonych względem siebie (np. As pik (AS) byłby przechowywany w obszarze o indeksie (65 * 83 = 5395)). W ten sposób każdy typ karty otrzymuje unikalny indeks, który można później sprawdzić pod kątem istnienia w tablicy „map”.

void M(string[]a){var c=new int[]
{50,51,52,53,54,55,56,57,49,74,81,75,65,72,68,83,67};var e=new 
int[9999];int i=0;int j=0;foreach(var s in a) e[s[0]*s[s.Length-
1]]++;int f=0;for(i=0;i<13;i++)for(j=13;j<17;j++)if(e[c[i]*c[j]]==0)
{f=1;Console.Write(((i<9)?(i+2)+"":(char)c[i]+"")+(char)c[j]+" 
");}if(f==0) Console.WriteLine("No missing cards");}
Patrick Bell
źródło
4

PowerShell , 114 111 110 bajtów

param($n)('No missing cards',($a=(2..10+'JQKA'[0..3]|%{$i=$_;"CSHD"[0..3]|%{"$i$_"}}|?{$n-notmatch$_})))[!!$a]

Wypróbuj online!

Pobiera dane wejściowe $njako ciąg rozdzielany spacjami lub ciąg znaków nowej linii. Konstruuje tablicę z zakresu 2..10konkatenowanego z JQKA(indeksowany za pomocą, [0..3]aby uczynić ją chartablicą). Ta tablica jest wprowadzana do pętli, |%{}która ustawia pomocnika, $ia następnie pętle nad kolorami, aby połączyć wyniki razem z $i$_. Na końcu tej pętli mamy tablicę ciągów takich jak ("2C", "2S", "2H", ... "AH", "AD"). Tablica ta jest wprowadzana do Where-Object( |?{}) z filtrem jako elementy, $_które regexują -notmatchdane wejściowe $n. Wynik tego filtrowania jest zapisywany w $a.

Następnie używamy pseudo trójskładnikowymi ( , )[]wybrać czy wyjście 'No missing cards'lub $a, na podstawie tego, czy !!$azwojów do Boolean $falselub $true. Jeśli $ajest pusty (co oznacza, że ​​każda karta w talii znajduje się na wejściu), to !!$ajest 0, więc "No missing cards"jest zaznaczone. Odwrotnie za $awybór. W obu przypadkach pozostaje to w potoku, a dane wyjściowe są niejawne.

AdmBorkBork
źródło
4

Bash + coreutils, 89

sort|comm -3 <(printf %s\\n {10,{2..9},A,J,K,Q}{C,D,H,S}) -|grep .||echo No missing cards

I / O jako lista rozdzielana znakiem nowej linii.

Wyjaśnienie

  • sort odczytuje dane rozdzielane znakiem nowej linii z STDIN i sortuje je
  • To jest przesyłane do comm
  • printf %s\\n {10,{2..9},A,J,K,Q}{C,D,H,S}jest rozszerzeniem nawiasów klamrowych w celu wygenerowania pełnej talii kart. printfDrukuje każdą kartę na własnej linii. Kolejność jest podana w taki sposób, że dane wyjściowe są takie same, jak gdyby zostały potokowanesort
  • commporównuje pełny deck z posortowanym wejściem i wyprowadza różnicę. -3tłumi wyjście z kolumny 3 (te wspólne)
  • Całe wyjście z commjest przesyłane do grep .. Jeśli nie było danych wyjściowych comm(tzn. Wszystkie karty były na wejściu), wówczas ||klauzula „lub” wyświetla wymagany komunikat. W przeciwnym razie grep .dopasowuje wszystkie linie wyjściowe comm.

Wypróbuj online .

Cyfrowa trauma
źródło
4

Python 2 , 104,93,130 , 114 bajtów

r=input()
print' '.join(n+x for n in list('23456789JQKA')+['10']for x in'HDSC'if n+x not in r)or'No missing cards'

Wypróbuj online!

  • -10 bajtów z zakodowaniem listy na stałe zamiast używania zakresu!
  • +37 bajtów - brakujące drukowanie „Brak brakujących kart”, jeśli wszystkie karty są obecne na wejściu!
  • -16 bajtów poprzez modyfikację kodu do listy!
Keerthana Prabhakaran
źródło
1
Nie drukuje „Brak brakujących kart”
L3viathan
1
@ L3viathan dziękuje za zwrócenie na to uwagi. Zredagowałem swoją odpowiedź!
Keerthana Prabhakaran
To list('23456789JQKA')+['10']jest sprytne. Zrozumiałem, że nie ma lepszego sposobu na rozdzielenie 10listy pojedynczych znaków w drugiej odpowiedzi pytona, ale to działa pięknie.
Datastream
2

Rubinowy, 108 + 1 = 109 bajtów

Używa -pflagi.

a=[*?2..'10',?J,?Q,?K,?A].map{|i|%w"H D S C".map{|c|i+c}}.flatten-$_.split;$_=a==[]?"No missing cards":a*' '
Wartość tuszu
źródło
2

PHP, 143 bajtów

foreach([H,D,S,C]as$c)foreach([2,3,4,5,6,7,8,9,10,J,Q,K,A]as$v)$r[]=$v.$c;echo join(" ",array_diff($r,explode(" ",$argn)))?:"No missing cards";
Jörg Hülsermann
źródło
2

sed , 157 + 1 ( -rflaga) = 170 158 bajtów

x
s/$/;A2345678910JQK/
s/.+/&H&D&S&C;No missing cards/
:
s/(10|\w)(\w+)(.);/\1\3 \2\3;/
t
G
:s
s/(10.|[^ ;1]{2})(.*\n.*)\1/\2/
ts
s/[ ;]+/ /g
s/^ //
s/ N.+//

Wypróbuj online!

To generuje wszystkie możliwe karty, a następnie usuwa każdą kartę z wejścia z wygenerowanych kart.

Kritixi Lithos
źródło
Nie drukuje „Brak brakujących kart”
L3viathan
@ L3viathan Naprawiono
Kritixi Lithos
2

C # , 282 bajtów


Grał w golfa

i=>{var o=new System.Collections.Generic.List<string>();string[] S={"H","D","S","C"},N="A 2 3 4 5 6 7 8 9 10 J Q K".Split(' ');foreach(var s in S){foreach(var n in N){if(!System.Linq.Enumerable.Contains(i,n+s)){o.Add(n+s);}}}return o.Count>0?string.Join(" ",o):"No missing cards";};

Nie golfił

i => {
    var o = new System.Collections.Generic.List<string>();
    string[] S = { "H", "D", "S", "C" }, N = "A 2 3 4 5 6 7 8 9 10 J Q K".Split(' ');

    foreach( var s in S ) {
        foreach( var n in N ) {
            if( !System.Linq.Enumerable.Contains( i, n + s ) ) {
                o.Add( n + s );
            }
        }
    }

    return o.Count > 0
        ? string.Join( " ", o )
        : "No missing cards";
};

Nieczytelny czytelny

i => {
    // Initialize a list to contain the list of cards missing
    var o = new System.Collections.Generic.List<string>();

    // Initialize the list of suits and numbers of cards
    string[] S = { "H", "D", "S", "C" }, N = "A 2 3 4 5 6 7 8 9 10 J Q K".Split(' ');

    // Cycle through the suits...
    foreach( var s in S ) {
        // ... and the numbers ...
        foreach( var n in N ) {
            // ... and check it the combo number + suite is missing
            if( !System.Linq.Enumerable.Contains( i, n + s ) ) {
                // If it's missing, add it to the list of missing cards
                o.Add( n + s );
            }
        }
    }

    // If the count of missing cards is greater than 0...
    return o.Count > 0
        // Build a 'space' separated string with the missing cards
        ? string.Join( " ", o )
        // Or output the missing cards string
        : "No missing cards";
};

Pełny kod

using System;
using System.Collections.Generic;
using System.Linq;

namespace Namespace {
   class Program {
      static void Main( String[] args ) {
         Func<String, Int32> f = i => {
            var o = new List<string>();
            string[] S = { "H", "D", "S", "C" }, N = "A 2 3 4 5 6 7 8 9 10 J Q K".Split(' ');

            foreach( var s in S ) {
               foreach( var n in N ) {
                  if( !i.Contains( n + s ) ) {
                     o.Add( n + s );
                  }
               }
            }

            return o.Count > 0
               ? string.Join( " ", o )
               : "No missing cards";
         };

         List<String>
            testCases = new List<String>() {
                "9H AH 7C 3S 10S KD JS 9C 2H 8H 8C AC AS AD 7D 4D 2C JD 6S"
            };

         foreach( String testCase in testCases ) {
            Console.WriteLine( $"{test}\n{f( test.Split( ' ' ) )}" );
         }

         Console.ReadLine();
      }
   }
}

Prasowe

  • v1.0 - 282 bytes- Wstępne rozwiązanie.

Notatki

Nic do dodania

auhmaan
źródło
1
To bardzo fajny format twojej odpowiedzi +1.
Rɪᴋᴇʀ
2

JavaScript (ES6), 117 114 111 bajtów

s=>[...Array(52)].map((_,i)=>~s.search(c=('JQKA'[v=i>>2]||v-2)+'CDHS'[i&3])?_:c+' ').join``||'No missing cards'

Wykorzystuje to fakt, że niezdefiniowane wpisy w tablicy generowanej przez map()są wymuszane na pustych ciągach kiedyjoin() 'd.

Próbny

Arnauld
źródło
2

Siatkówka , 76 bajtów

^
A2345678910JQK¶ 
\G(10|.)
 $&H $&D $&S $&C
Dr` \S+
G1`
^$
No missing cards

Wejścia / wyjścia to lista kart rozdzielonych spacjami. Wyjście ma wiodącą przestrzeń.

Wypróbuj online!

Wyjaśnienie

Większość kodu dotyczy budowania pełnej listy kart, które powinny znajdować się w talii:

^
A2345678910JQK¶ 
\G(10|.)
 $&H $&D $&S $&C

Najpierw wstawiamy nowy wiersz do danych wejściowych, ze wszystkimi możliwymi wartościami kart, a następnie dla każdego znaku tej linii (lub kilku znaków 10) tworzymy listę wszystkich możliwych kolorów tej karty.

Dr` \S+

Jest to etap deduplikacji, dzieli łańcuch na części składające się ze spacji i niektórych spacji oraz zachowuje tylko jedno wystąpienie każdej części. Modyfikator rsprawia, że ​​działa to od prawej do lewej, zachowując wtedy ostatnie wystąpienie każdej porcji.

G1`

Trzymamy tylko pierwszą linię, która teraz zawiera brakujące karty.

^$
No missing cards

Jeśli wynik jest pusty, zamieniamy go na „Brak brakujących kart”

Lew
źródło
1

Python 3, 106 bajtów

Kombinacja dwóch poprzednich odpowiedzi w pythonie zmieszana z niektórymi shenaniganami rozpakowującymi ciągi.

print(' '.join({x+y for x in[*'23456789JQKA','10']for y in'HDSC'}-{*input().split()})or'No missing cards')
Kyle Gullion
źródło
1

Julia , 116 bajtów

print(join(setdiff(["$x$y"for x=∪(2:10,"JQKA")for y="HDSC"],readline()|>split),' ')|>s->s>""?s:"No missing cards")

Wypróbuj online!

Bardzo podobne do rozwiązania python Kyle Gullions. Setdiff zamiast - i lambda do testowania pustej struny jeszcze gorzej.

Łukasza
źródło
1

Japt, 39 bajtów

"JQKA"¬c9õÄ)ï+"CHSD"q)kU ¸ª`No ÚÍg Ößs

Spróbuj

Kudłaty
źródło
1

Tcl , 270 228 znaków

(Skrócono z pomocą Wit Wisarhda)

foreach s {H D S C} {foreach c {2 3 4 5 6 7 8 9 J Q K A} {dict set d $c$s 0}}
gets stdin l
foreach c $l {dict set d $c 1}
set m {}
dict for {c h} $d {if {!$h} {lappend m $c}}
if {![llength $m]} {set m "No missing cards"}
puts $m

Wypróbuj online!

Wyjaśnienie:

Ta implementacja buduje słownik składający się z flagi logicznej dla każdej karty reprezentowanej przez kartezjański produkt HDSC i 2-do-A. Czyta wiersz ze standardowego wejścia, który, jeśli jest podany jako specyfikacja zgodnie z żądaniem, jest właściwie dobrze uformowaną listą Tcl. Podczas odczytywania każdej karty w słowniku wprowadzana jest wartość logiczna true dla tej karty.

Na koniec parser zapętla się przez słownik i dodaje do listy brakujących kart dowolną kartę, która nie ma wartości true w słowniku. Jeśli długość listy brakujących kart wynosi zero, wyślij „Brak brakujących kart”, w przeciwnym razie wypisz listę brakujących kart.

Sean Woods
źródło
1

PHP , 138 bajtów

Biegałem z -ni-d error_reporting=0

Ponownie używam kodu ze starej dokumentacji, którą poprosiłem o utworzenie talii kart

Kod

<?$r=[];foreach([A,J,Q,K,2,3,4,5,6,7,8,9,10]as$t)array_push($r,$t.H,$t.S,$t.D,$t.C);
echo join(" ", array_diff($r,explode(" ",$argv[1])));

Wypróbuj online!

Wyjaśnienie

<?$r=[];   # Declare the array that will contain the full deck
# the next line will generate the arry with the full deck  
foreach([A,J,Q,K,2,3,4,5,6,7,8,9,10]as$t)array_push($r,$t.H,$t.S,$t.D,$t.C);
# explode the input string on each blank space and using array_diff to get the
# different elements withing both arrays. (and "echo" of course) 
echo join(" ", array_diff($r,explode(" ",$argv[1])));
Francisco Hahn
źródło
Możesz go obniżyć do 120 za pomocą kilku poprawek. 1) zakończ pierwszą linię znakiem?> Zamień „echo” na <? = 2) wpisanie kart w zwykłym wierszu poleceń spacjami zapełni $ argv jako tablicę, a każdą z nich będzie elementem, dzięki czemu możesz usunąć rozstrzelenie ( ) całkowicie. Spróbuj
640 KB
nie miałem pojęcia, że $argvmoże tak działać, dzięki @gwaugh
Francisco Hahn
Oh btw @gwaugh pytanie powiedziało, że argument jest ciągiem oddzielonym spacjami, może ustawiać argumenty jeden po drugim.
Francisco Hahn
Jeśli uruchomisz go w wierszu poleceń, np .: „php deck.php 2S 5H JC”, to będzie to samo zastosowanie, jakbyś myślał o tym jak o łańcuchu rozdzielanym spacjami. Po prostu pozwalasz PHP to przeanalizować. Tylko interfejs użytkownika TIO sprawia, że ​​można je rozdzielić.
640 KB
Rozumiem. Będzie edytować, dzięki za-bajty: D
Francisco Hahn
1

C # (.NET Core) , 197 bajtów

Bez LINQ.

s=>{var w="";for(var j=0;j<52;){var u="";int t=j%13;u=t<1?"K":t<2?"A":t<11?t+"":t<12?"J":"Q";t=j++/13;u+=t<1?"H":t<2?"D":t<3?"S":"C";w+=s.IndexOf(u)<0?u+" ":"";}return w==""?"No missing cards":w;};

Wypróbuj online!

Destroigo
źródło
1

Perl 6 , 73 bajtów

put keys((<<{^9+2}J Q K A>>X~ <C S D H>)∖get.words)||"No missing cards"

Wypróbuj online!

Proste odejmowanie zestawu między talią kart a wejściem.

Jo King
źródło
1

Python 3 , 102 bajty

lambda s:' '.join(i+j for i in[*'A23456789JQK','10']for j in'HDSC'if(i+j)not in s)or'No missing cards'

Wypróbuj online!

Erik the Outgolfer
źródło