Bantu dealer membangun kembali geladak

19

Dealer telah ceroboh dan kehilangan jejak kartu apa yang terdapat di geladaknya dan kartu apa yang hilang, dapatkah Anda membantunya?


Dek lengkap terdiri dari 52 kartu remi, yaitu:

Setiap warna di geladak (hati, berlian, sekop, klab) berisi:

  • Angka-angka [2 - 10]
  • Jack
  • Seorang ratu
  • Seorang raja
  • Ace

Tugas

Program Anda akan membaca isi dek dari STDIN sampai baris baru dibaca. Anda dapat mengasumsikan bahwa inputnya akan dalam bentuk "nX nX nX nX" dll. Di mana:

  • n - angka antara [2 - 10] atau 'J', 'Q', 'K' atau 'A'. (Anda dapat mengasumsikan huruf besar hanya untuk karakter non-numerik)
  • X - salah satu dari yang berikut ini: 'H', 'D', 'S', 'C' (Anda dapat mengasumsikan hanya huruf besar)

Dimana:

  • 'J' = Jacks
  • 'Q' = Ratu
  • 'K' = Raja
  • 'A' = Ace

Dan

  • 'H' = Hati
  • 'D' = Berlian
  • 'S' = Sekop
  • 'C' = Klub

Anda dapat mengasumsikan bahwa tidak akan ada duplikat dalam input.

Program Anda kemudian harus mencetak kartu yang hilang di dek untuk STDOUT dengan cara yang sama seperti input ("nX nX nX") atau mencetak 'Tidak ada kartu yang hilang' jika semua 52 kartu disediakan. Tidak ada batasan pada urutan output kartu.

Contoh input:

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

Keluaran:

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

Selamat bermain golf!

Ayam Sombrero
sumber
3
Bisakah kita menggunakan Tbukan 10?
Arnauld
@Arnauld Saya khawatir ini semua informasi yang diberikan dealer sehingga Anda harus tetap menggunakan '10' atau dia akan murung.
Ayam Sombrero
@GillBates Tidak Jmewakili 10, sih ?
Okx
@Okx 2 3 4 5 6 7 8 9 10 J Q K A. Jmewakili 11.
HyperNeutrino
@Okx Jadalah huruf ke-10 dari alfabet, tapi bukan itu masalahnya . :)
mbomb007

Jawaban:

8

Windows Batch (CMD), 205 204 byte

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

Lilitkan jas dan pangkat yang membangun setumpuk lengkap, lalu hapus kartu input. Hemat 1 byte jika Tdiizinkan 10. Simpan 11 byte jika argumen baris perintah adalah input yang dapat diterima. Sunting: Disimpan 1 byte berkat @ user202729.

Neil
sumber
Saya menghitung 200 byte.
HyperNeutrino
@HyperNeutrino Karena saya di Windows, saya menggunakan Notepad untuk menyimpan file, yang berarti bahwa baris baru biayanya 2 byte, bukan satu. Saya terlalu malas untuk menggunakan editor yang berbeda untuk menyimpan byte.
Neil
Oh lol, oke. Saya mendapatkan 200 byte menggunakan Teks Sublime.
HyperNeutrino
@Neil Pada Windows Anda dapat menggunakan LF daripada CR LF, menyimpan 5 byte (komentar HyperNeutrino di atas) dan masih berfungsi.
user202729
Juga, Anda dapat beralih /vke CMD (+3 byte?) Untuk EnableDelayedExpansion, menghilangkan calldi dalam for loop. / Sepertinya kamu memiliki ruang ekstra antara (%c%)dan do?
user202729
8

Python, 147 146 145 138 131 129 127 125 120 byte

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')

Mendapat semua kartu yang mungkin sebagai satu set dan mengurangi kartu input.

-1 byte terima kasih kepada mbomb007 yang menunjukkan ruang ekstra dalam kode saya.
-1 byte terima kasih kepada mbomb007 untuk menunjukkan beberapa golf yang dapat dilakukan dengan Python 2 (-5 byte dan +4 byte untuk raw_in raw_input)
-7 byte dengan beralih menggunakan set dan atur pengurangan bukan dari daftar pemahaman
-7 byte berkat ValueInk untuk menunjukkan bahwa saya tidak perlu ke listsuite
-2 byte terima kasih kepada Datastream untuk menunjukkan bahwa hanya menuliskan semua nilai lebih efektif daripada byte hal aneh yang saya miliki sebelumnya
-2 byte terima kasih kepada ValueInk untuk menunjukkan set yang dapat mengambil generator jadi saya tidak perlu memasukkannya ke dalam daftar pemahaman
-2 byte terima kasih kepada Datastream karena menunjukkan bahwa saya dapat menurunkan golf lebih banyak lagi jika saya beralih ke Python 3 lagi ... (+2 untuk parens setelah untuk cetak, -4 untuk raw_)
-5 byte terima kasih kepada Lulhum dan saya sendiri karena menunjukkan bahwa dengan beralih kembali ke Python 2 (!!!) dapat membantu saya menghemat byte (menggunakan rentang lagi, menggunakan backticks alih-alih str(, dan +4 karena raw_)

HyperNeutrino
sumber
1
Anda memiliki ruang ekstra yang dapat Anda hapus, dan Anda dapat menggunakan `d`alih-alih str(d)jika Anda menggunakan Python 2, selain menghapus parens untuk print.
mbomb007
@ mbomb007 Terima kasih!
HyperNeutrino
for y in 'HDSC'juga berfungsi untuk mendapatkan semua karakter di sana. (Namun, Anda masih membutuhkan list('JQKA')bagian lainnya.)
Value Ink
1
'1 2 3 4 5 6 7 8 9 10 J Q K A'.split()Mungkin menyimpan beberapa byte bukan [d for d in range(2,11)]+list('JQKA')manipulasi Anda telah terjadi.
Datastream
Setuju, sepertinya itu akan menghemat 2 byte karena fakta yang 1tidak perlu ditambahkan. Juga, Anda dapat menghapus tanda kurung luar untuk pemahaman daftar pertama Anda karena setkonstruktor mengambil objek generator dengan baik.
Value Ink
7

05AB1E , 39 byte

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

Cobalah online!

Penjelasan

ð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
sumber
5

CJam , 49 47 byte

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

Cobalah online!

Penjelasan

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)
Kucing Bisnis
sumber
5

Jelly , 39 byte

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

Cobalah online!

Bagaimana?

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
sumber
5

C #, 343 byte

Pertama kali memposting salah satu golf saya, bukan pesaing yang sangat bagus. Saya yakin saya bisa mengurangi ini lebih banyak.

Gagasan di baliknya adalah array yang jarang menyimpan kejadian kartu, dengan indeks yang dihitung oleh nilai ASCII dari nilai yang berbeda dan pakaian yang dikalikan satu sama lain (misalnya kartu as sekop (AS) akan disimpan di area pada indeks (65 *) 83 = 5395)). Dengan cara ini, setiap jenis kartu mendapatkan indeks unik yang dapat diperiksa kemudian untuk keberadaannya dalam larik "peta".

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
sumber
4

PowerShell , 114 111 110 byte

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

Cobalah online!

Mengambil input $nsebagai string yang dibatasi ruang atau dibatasi baris baru. Membangun array dari rentang yang 2..10digabungkan dengan JQKA(diindeks dengan [0..3]untuk menjadikannya chararray). Array itu dimasukkan ke dalam loop |%{}yang menetapkan helper $ilalu loop di atas suit untuk menggabungkan hasilnya bersama $i$_. Pada akhir dari loop ini, kami memiliki array berupa string ("2C", "2S", "2H", ... "AH", "AD"). Array itu diumpankan ke a Where-Object( |?{}) dengan filter sebagai elemen $_yang -notmatchmengatur ulang input $n. Hasil dari penyaringan disimpan ke dalam $a.

Kemudian, kita menggunakan pseudo-ternary ( , )[]untuk memilih apakah kita output 'No missing cards'atau $a, berdasarkan pada apakah !!$aberubah menjadi Boolean $falseatau $true. Jika $akosong (yang berarti setiap kartu di dek adalah pada input), kemudian !!$aadalah 0, sehingga "No missing cards"dipilih. Begitu juga sebaliknya karena $adipilih. Dalam kedua kasus, yang tersisa di pipa, dan output tersirat.

AdmBorkBork
sumber
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 sebagai daftar terbatas-baris baru.

Penjelasan

  • sort membaca input yang dibatasi-baris baru dari STDIN dan mengurutkannya
  • Ini disalurkan ke comm
  • printf %s\\n {10,{2..9},A,J,K,Q}{C,D,H,S}adalah brace-ekspansi untuk menghasilkan setumpuk penuh kartu. The printfmencetak setiap kartu pada baris sendiri. Perintah diberikan sedemikian rupa sehingga hasilnya sama seperti jika telah disalurkan kesort
  • commmembandingkan dek penuh terhadap input yang diurutkan dan menghasilkan perbedaan. -3menekan output dari kolom 3 (yang umum)
  • Seluruh output dari commdisalurkan ke grep .. Jika tidak ada output dari comm(yaitu semua kartu berada di input), maka kartu|| klausa "atau" menampilkan pesan yang diperlukan. Kalau tidak grep .cocok dengan semua garis keluaran dari comm.

Cobalah online .

Trauma Digital
sumber
4

Python 2 , 104,93.130 , 114 byte

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'

Cobalah online!

  • -10 byte dengan hardcoding daftar alih-alih menggunakan jangkauan!
  • +37 byte - pencetakan tidak terjawab 'Tidak ada kartu hilang' jika semua kartu ada dalam input!
  • -16 byte dengan memodifikasi kode menjadi daftar pemahaman!
Keerthana Prabhakaran
sumber
1
Tidak mencetak "Tidak ada kartu yang hilang"
L3viathan
1
@ L3viathan terima kasih telah menunjukkannya. Saya telah mengedit jawaban saya!
Keerthana Prabhakaran
Itu list('23456789JQKA')+['10']pintar. Saya mengolah otak saya untuk cara yang lebih baik untuk membagi 10keluar dari daftar karakter tunggal dalam jawaban python lain, tetapi itu bekerja dengan indah.
Datastream
2

Ruby, 108 + 1 = 109 byte

Menggunakan -pbendera.

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*' '
Nilai Tinta
sumber
2

PHP, 143 Bytes

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
sumber
2

sed , 157 +1 ( -rbendera) = 170 158 byte

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.+//

Cobalah online!

Ini menghasilkan semua kartu yang mungkin dan kemudian menghapus setiap kartu di input dari kartu yang dihasilkan.

Kritixi Lithos
sumber
Tidak mencetak "Tidak ada kartu yang hilang"
L3viathan
@ L3viathan Diperbaiki
Kritixi Lithos
2

C # , 282 byte


Golf

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

Tidak disatukan

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

Tidak terbaca dibaca

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

Kode lengkap

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();
      }
   }
}

Rilis

  • v1.0 - 282 bytes- Solusi awal.

Catatan

Tidak ada yang perlu ditambahkan

auhmaan
sumber
1
Ini adalah format yang sangat bagus untuk jawaban Anda, +1.
Rɪᴋᴇʀ
2

JavaScript (ES6), 117 114 111 byte

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

Ini mengambil keuntungan dari fakta bahwa entri yang tidak ditentukan dalam array yang dihasilkan oleh map()dipaksa untuk mengosongkan string ketikajoin() 'd.

Demo

Arnauld
sumber
2

Retina , 76 byte

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

Input / output adalah daftar kartu yang dipisahkan ruang. Output memiliki ruang terdepan.

Cobalah online!

Penjelasan

Sebagian besar kode berkaitan dengan pembuatan daftar kartu yang harus ada di tumpukan:

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

Pertama, kami menambahkan baris baru ke input, dengan semua nilai kartu yang mungkin, kemudian untuk setiap karakter dari baris ini (atau beberapa karakter 10), kami membuat daftar semua kemungkinan yang cocok dari kartu itu.

Dr` \S+

Ini adalah tahap deduplikasi, ia membagi string menjadi potongan-potongan yang terdiri dari ruang ditambah beberapa non-spasi dan membuat hanya satu kejadian setiap potongan. Pengubah rmembuat ini beroperasi dari kanan ke kiri, menjaga kemudian kejadian terakhir dari setiap potongan.

G1`

Kami hanya menyimpan baris pertama, yang sekarang berisi kartu yang hilang.

^$
No missing cards

Jika hasilnya kosong kami menggantinya dengan "Tidak ada kartu yang hilang"

Leo
sumber
1

Python 3, 106 byte

Kombinasi dari dua jawaban python sebelumnya dicampur dengan beberapa string shenanigans membongkar.

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

Julia , 116 byte

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

Cobalah online!

Sangat mirip dengan solusi python Kyle Gullions. Setdiff bukannya - dan lambda untuk menguji string kosong membuatnya lebih buruk.

LukeS
sumber
1

Japt, 39 byte

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

Cobalah

Shaggy
sumber
1

Tcl , 270 228 karakter

(Diperpendek dengan bantuan dari Wit Wisarhd)

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

Cobalah online!

Penjelasan:

Implementasi ini membangun kamus yang terdiri dari bendera boolean untuk setiap kartu yang diwakili oleh produk cartesian HDSC dan 2-through-A. Bunyinya baris dari stdin, yang jika diberikan sebagai spek sebagaimana dipanggil, sebenarnya adalah daftar Tcl yang terbentuk dengan baik. Saat setiap kartu dibaca, boolean true dimasukkan dalam kamus untuk kartu tersebut.

Pada akhirnya pengurai melewati kamus, dan menambahkan kartu apa pun yang tidak memiliki kebenaran dalam kamus ke daftar kartu yang hilang. Jika panjang daftar kartu yang hilang adalah nol, keluaran "Tidak ada kartu yang hilang", jika tidak, keluarkan daftar kartu yang hilang.

Sean Woods
sumber
1

PHP , 138 byte

Berlari dengan -ndan-d error_reporting=0

Saya menggunakan kembali beberapa kode dari kiriman lama yang saya buat yang meminta dibuatkan setumpuk kartu

Kode

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

Cobalah online!

Penjelasan

<?$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
sumber
Anda bisa mendapatkannya hingga 120 dengan beberapa penyesuaian. 1) akhiri baris pertama dengan?> Ganti 'echo' dengan <? = 2) memasukkan kartu pada baris perintah biasa dengan spasi akan mengisi $ argv sebagai array dengan masing-masing sebagai elemen, sehingga Anda dapat menghapus meledak ( ) seluruhnya. Cobalah
640KB
Saya tidak punya petunjuk yang $argvbisa bekerja seperti itu, terima kasih @ gwaugh
Francisco Hahn
Oh btw @gwaugh pertanyaan sayd bahwa argumen adalah string yang dipisahkan oleh spasi, dapat mengatur argumen satu per satu.
Francisco Hahn
Jika Anda menjalankannya pada baris perintah seperti: 'php deck.php 2S 5H JC' itu adalah penggunaan yang sama seperti jika Anda menganggapnya sebagai string yang dibatasi spasi. Anda hanya membiarkan PHP menguraikannya untuk Anda. Hanya UI dari TIO yang membuat Anda memisahkannya.
640KB
Oh begitu. Akan mengedit, terima kasih untuk -bytes: D
Francisco Hahn
1

C # (.NET Core) , 197 byte

Tanpa 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;};

Cobalah online!

Destroigo
sumber
1

Perl 6 , 73 byte

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

Cobalah online!

Beberapa set pengurangan yang cukup sederhana antara setumpuk kartu dan input.

Jo King
sumber
1

Python 3 , 102 byte

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

Cobalah online!

Erik the Outgolfer
sumber