pengantar
Dobble / SpotIt adalah permainan kartu, di mana orang harus melihat simbol yang sama pada pasangan kartu dalam waktu singkat, menunjukkannya dan pindah ke pasangan berikutnya. Setiap kartu memiliki banyak simbol (8 dalam versi normal), tetapi persis satu yang umum di antara setiap pasangan kartu.
Contoh dari salinan fisik game:
Tantangan
Menulis sebuah program, yang diberi set simbol (karakter ascii tunggal) dan jumlah simbol pada kartu tunggal akan menghasilkan kartu daftar keluaran dengan simbol untuk setiap kartu. Jelas ada banyak kombinasi yang setara, program Anda hanya perlu menulis kombinasi yang menghasilkan jumlah kartu terbesar untuk input yang diberikan.
Ini adalah kode-golf, jadi kodenya lebih pendek, lebih baik.
Akan lebih bagus jika perhitungan akan selesai sebelum panasnya kematian alam semesta untuk kasus yang paling rumit.
Memasukkan
Dua argumen berfungsi / stdin (pilihan Anda)
Pertama-tama mereka adalah kumpulan simbol, seperti 'ABCDE "atau [' A ',' B ',' C ',' D ',' E '] - pilihan format Anda, baik itu string, set, list, stream , atau apa pun yang idiomatis untuk bahasa pilihan. Karakter akan diberikan dari set [A-Za-z0-9], tidak ada duplikat (jadi ukuran maksimum set simbol input adalah 62). Mereka tidak akan perlu dipesan dalam ( sehingga Anda bisa mendapatkan "yX4i9A" juga untuk kasus 6-simbol).
Argumen kedua adalah bilangan bulat, menunjukkan jumlah simbol pada kartu tunggal. Itu akan menjadi <= dari ukuran set simbol.
Keluaran
Cetak beberapa baris yang dipisahkan oleh baris baru, masing-masing mengandung simbol untuk kartu tunggal.
Contohnya
ABC
2
>>>>
AB
BC
AC
Atau
ABCDEFG
3
>>>>
ABC
BDE
CEF
BFG
AEG
CDG
ADF
Atau
ABCDE
4
>>>>
ABCD
Petunjuk
- Jumlah kartu yang dihasilkan tidak boleh lebih besar dari jumlah simbol yang berbeda dan dalam banyak kombinasi akan jauh lebih kecil
- Anda mungkin ingin membaca beberapa latar belakang matematika jika Anda memerlukan bantuan dengan sisi matematika masalah
Ini adalah tantangan golf kode pertama saya, jadi tolong maafkan masalah yang mungkin terjadi dengan pemformatan / gaya - Saya akan mencoba memperbaiki kesalahan jika Anda mengarahkannya dalam komentar.
sumber
('abcdefghijklmnopqrstu', 5)
->['abcde', 'afghi', 'ajklm', 'anopq', 'arstu', 'bfjnr', 'bgkpt', 'bhlou', 'bimqs', 'cfkqu', 'cgjos', 'chmpr', 'cilnt', 'dfmot', 'dglqr', 'dhkns', 'dijpu', 'eflps', 'egmnu', 'ehjqt', 'eikor']
atau solusi kerja 21 kartu lainnya. (Perhatikan bahwa ini adalah bidang hingga proyektif pesanan 4).Jawaban:
Python 2 ,
192162 byteSaya punya argumen bahwa ini menghasilkan set kartu maksimum untuk setiap skenario dan itu menangani 3 kasus uji.
Cobalah online!
Algoritma
Diberi alfabet
a
dan ukuran kartus
, masukkan semua kombinasis
elemena
dan sebutC
, lalu:C
, sebut sajaC0
C0
C
yang memiliki persatuan denganC0
tidak sama dengan1
C
C
kosongKemudian cetak elemen yang disimpan.
Argumen
Beberapa subset kosong
C
adalah solusi maksimal kamiK
,. Karena mengandung setidaknya satu elemen dan dua elemen apa pun tidak dapat dibedakan, pilih elemen yang arbitrerC0
,C
untuk dimasukkanK
. Untuk setiap elemene
dalamK
, kardinalitase
persatuanx
adalah 1 untukx != e
dalamK
; jadi hilangkan semua elemenC
yang persatuannyaC0
tidak memiliki kardinalitas 1. Dengan alasan yang sama, pilih elemen arbitrer baruC
, tambahkanK
, dan kurangiC
. AkhirnyaC
adalah himpunan kosong danK
akan menjadi solusi maksimal karena pada titik mana pun kami memilih elemen yang dapat dibedakan dari elemen lainnya.Uji Kasus
Kasing uji ini ditulis sebelum saya menyadari bahwa percetakan adalah persyaratan.
Memperbarui
R
variabel sayaK
variabel saya , Terima kasih kepada @Leo !sumber
A for A in C if len(set(A)&set(C[0]))==1
) sudah menghilangkan elemen yang dipilih, kecuali s == 1 (dalam hal ini len (set (C [0]) & set (C [0])) akan menjadi 1). Anda bisa bermain golf baris kedua ke terakhir ke:C=[A for A in C if len(set(A)&set(C[0]))==1<s]
Haskell,
175156 bytesPertama saya bermain golf, beri tahu saya jika saya mengacaukan sesuatu.
Cobalah online!
Terima kasih kepada @Paul Mutser untuk peningkatan dan -19 byte
Versi asli
sumber
Perl 6 ,
8877 byteCobalah online!
sumber