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!
T
bukan10
?J
mewakili10
, sih ?2 3 4 5 6 7 8 9 10 J Q K A
.J
mewakili11
.J
adalah huruf ke-10 dari alfabet, tapi bukan itu masalahnya . :)Jawaban:
Windows Batch (CMD),
205204 byteLilitkan jas dan pangkat yang membangun setumpuk lengkap, lalu hapus kartu input. Hemat 1 byte jika
T
diizinkan10
. Simpan 11 byte jika argumen baris perintah adalah input yang dapat diterima. Sunting: Disimpan 1 byte berkat @ user202729.sumber
/v
ke CMD (+3 byte?) UntukEnableDelayedExpansion
, menghilangkancall
di dalam for loop. / Sepertinya kamu memiliki ruang ekstra antara(%c%)
dando
?Python,
147146145138131129127125120 byteMendapat 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_
inraw_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
list
suite-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 karenaraw_
)sumber
`d`
alih-alihstr(d)
jika Anda menggunakan Python 2, selain menghapus parens untukprint
.for y in 'HDSC'
juga berfungsi untuk mendapatkan semua karakter di sana. (Namun, Anda masih membutuhkanlist('JQKA')
bagian lainnya.)'1 2 3 4 5 6 7 8 9 10 J Q K A'.split()
Mungkin menyimpan beberapa byte bukan[
dfor d in range(2,11)]+list('JQKA')
manipulasi Anda telah terjadi.1
tidak perlu ditambahkan. Juga, Anda dapat menghapus tanda kurung luar untuk pemahaman daftar pertama Anda karenaset
konstruktor mengambil objek generator dengan baik.05AB1E , 39 byte
Cobalah online!
Penjelasan
sumber
CJam ,
4947 byteCobalah online!
Penjelasan
sumber
Jelly , 39 byte
Cobalah online!
Bagaimana?
sumber
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".
sumber
PowerShell ,
114111110 byteCobalah online!
Mengambil input
$n
sebagai string yang dibatasi ruang atau dibatasi baris baru. Membangun array dari rentang yang2..10
digabungkan denganJQKA
(diindeks dengan[0..3]
untuk menjadikannyachar
array). Array itu dimasukkan ke dalam loop|%{}
yang menetapkan helper$i
lalu 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 aWhere-Object
(|?{}
) dengan filter sebagai elemen$_
yang-notmatch
mengatur 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!!$a
berubah menjadi Boolean$false
atau$true
. Jika$a
kosong (yang berarti setiap kartu di dek adalah pada input), kemudian!!$a
adalah0
, sehingga"No missing cards"
dipilih. Begitu juga sebaliknya karena$a
dipilih. Dalam kedua kasus, yang tersisa di pipa, dan output tersirat.sumber
Bash + coreutils, 89
I / O sebagai daftar terbatas-baris baru.
Penjelasan
sort
membaca input yang dibatasi-baris baru dari STDIN dan mengurutkannyacomm
printf %s\\n {10,{2..9},A,J,K,Q}{C,D,H,S}
adalah brace-ekspansi untuk menghasilkan setumpuk penuh kartu. Theprintf
mencetak setiap kartu pada baris sendiri. Perintah diberikan sedemikian rupa sehingga hasilnya sama seperti jika telah disalurkan kesort
comm
membandingkan dek penuh terhadap input yang diurutkan dan menghasilkan perbedaan.-3
menekan output dari kolom 3 (yang umum)comm
disalurkan kegrep .
. Jika tidak ada output daricomm
(yaitu semua kartu berada di input), maka kartu||
klausa "atau" menampilkan pesan yang diperlukan. Kalau tidakgrep .
cocok dengan semua garis keluaran daricomm
.Cobalah online .
sumber
Python 2 ,
104,93.130, 114 byteCobalah online!
sumber
list('23456789JQKA')+['10']
pintar. Saya mengolah otak saya untuk cara yang lebih baik untuk membagi10
keluar dari daftar karakter tunggal dalam jawaban python lain, tetapi itu bekerja dengan indah.Ruby, 108 + 1 = 109 byte
Menggunakan
-p
bendera.sumber
PHP, 143 Bytes
sumber
sed , 157 +1 (
-r
bendera) =170158 byteCobalah online!
Ini menghasilkan semua kartu yang mungkin dan kemudian menghapus setiap kartu di input dari kartu yang dihasilkan.
sumber
C # , 282 byte
Golf
Tidak disatukan
Tidak terbaca dibaca
Kode lengkap
Rilis
282 bytes
- Solusi awal.Catatan
Tidak ada yang perlu ditambahkan
sumber
JavaScript (ES6),
117114111 byteIni mengambil keuntungan dari fakta bahwa entri yang tidak ditentukan dalam array yang dihasilkan oleh
map()
dipaksa untuk mengosongkan string ketikajoin()
'd.Demo
Tampilkan cuplikan kode
sumber
Retina , 76 byte
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:
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.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
r
membuat ini beroperasi dari kanan ke kiri, menjaga kemudian kejadian terakhir dari setiap potongan.Kami hanya menyimpan baris pertama, yang sekarang berisi kartu yang hilang.
Jika hasilnya kosong kami menggantinya dengan "Tidak ada kartu yang hilang"
sumber
Python 3, 106 byte
Kombinasi dari dua jawaban python sebelumnya dicampur dengan beberapa string shenanigans membongkar.
sumber
Julia , 116 byte
Cobalah online!
Sangat mirip dengan solusi python Kyle Gullions. Setdiff bukannya - dan lambda untuk menguji string kosong membuatnya lebih buruk.
sumber
Japt, 39 byte
Cobalah
sumber
Tcl ,
270228 karakter(Diperpendek dengan bantuan dari Wit Wisarhd)
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.
sumber
PHP , 138 byte
Berlari dengan
-n
dan-d error_reporting=0
Saya menggunakan kembali beberapa kode dari kiriman lama yang saya buat yang meminta dibuatkan setumpuk kartu
Kode
Cobalah online!
Penjelasan
sumber
$argv
bisa bekerja seperti itu, terima kasih @ gwaughC # (.NET Core) , 197 byte
Tanpa LINQ.
Cobalah online!
sumber
Perl 6 , 73 byte
Cobalah online!
Beberapa set pengurangan yang cukup sederhana antara setumpuk kartu dan input.
sumber
Python 3 , 102 byte
Cobalah online!
sumber