Ide terima kasih kepada @ MartinBüttner dari diskusi dalam obrolan
Mahjong adalah gim ubin yang sangat populer di Asia. Biasanya dimainkan dengan empat pemain, dan tujuan permainan ini adalah menjadi orang pertama yang menyelesaikan kartu yang sah menggunakan ubin. Untuk tantangan ini, kami akan mempertimbangkan versi gim yang disederhanakan - PPCG mahjong.
Di PPCG mahjong, ada tiga setelan - m
, p
dan s
- dan ubin dinomori dari 1
ke 9
. Tepatnya ada empat salinan dari setiap ubin, dan ubin ditandai dengan nomornya diikuti dengan setelannya (misalnya 3m
, 9s
).
Tangan mahjong PPCG yang lengkap terdiri dari empat set tiga dan sepasang, dengan total 14 ubin.
Seperangkat tiga dapat berupa:
- Tiga ubin yang sama (misalnya
4s 4s 4s
, tetapi tidak4m 4p 4s
), atau - Urutan tiga ubin berturut-turut dalam setelan yang sama (misalnya
1s 2s 3s
atau6p 7p 8p
tetapi tidak3s 4m 5m
atau3p 5p 7p
). Urutan tidak terbungkus (jadi9m 1m 2m
tidak valid).
Sepasang hanyalah dua ubin yang identik (misalnya 5s 5s
).
Tantangan
Program Anda akan menerima 13 ubin yang dipisahkan oleh ruang, dengan setiap ubin muncul tidak lebih dari empat kali. Anda dapat menulis program lengkap atau fungsi yang mengambil string.
Tugas Anda adalah menemukan semua ubin ke-14 yang mungkin ("menunggu") yang, ketika ditambahkan ke tangan, akan membentuk tangan mahjong PPCG yang lengkap. Ubin yang dikeluarkan harus dipisahkan dengan ruang, tetapi dapat dalam urutan apa pun. Ruang putih terkemuka atau tertinggal diizinkan.
Program Anda harus berjalan dalam jumlah waktu yang wajar, tidak lebih dari satu menit.
Contohnya
Input: 1m 1m 1m 4s 4s 4s 7p 7p 7p 3m 3m 3m 9s
Output: 9s
Input: 1m 1m 1m 3m 3m 3m 5m 5m 5m 2s 3s 7p 8p
Output:
Input: 1m 2m 2m 3m 3m 3m 3m 4m 1s 1s 9s 9s 9s
Output: 1s
Input: 1m 1m 1m 2m 3m 4m 5m 6m 7m 8m 9m 9m 9m
Output: 1m 2m 3m 4m 5m 6m 7m 8m 9m
Input: 1m 1m 1m 5p 2m 3m 5p 7s 8s 5p 9s 9s 9s
Output: 1m 4m 6s 9s
Pada contoh pertama, 1m 4s 7p 3m
semua membentuk kembar tiga yang ada, meninggalkan satu-satunya 9s
untuk membentuk pasangan.
Pada contoh kedua, 2s 3s
dan 7p 8p
hanya dapat membentuk urutan, dan ubin yang tersisa hanya dapat membentuk kembar tiga. Karenanya tidak ada pasangan yang dapat dibentuk, dan tidak ada output.
Pada contoh ketiga, tangan terbagi menjadi 1m2m3m 2m3m4m 3m3m 1s1s 9s9s9s
. Biasanya ini menunggu 3m 1s
, tetapi karena keempat 3m
telah digunakan, satu-satunya menunggu yang tersedia 1s
.
Pada contoh keempat, semua m
ubin melengkapi tangan. Misalnya, untuk 1m
, seseorang dapat memiliki tangan 1m1m1m 1m2m3m 4m5m6m 7m8m9m 9m9m
yang sudah selesai.
Cobalah untuk mengerjakan sisa contoh keempat dan contoh kelima :)
Mencetak gol
Ini adalah kode-golf , sehingga solusi dalam byte paling sedikit menang. Celah standar berlaku.
Jawaban:
Python,
312281 byteW
mengambil string sebagai input dan mengembalikan string sebagai output.Sejumlah kecil ubin (27) membuatnya cukup cepat untuk menguji apakah masing-masing menyelesaikan tangan. Masalahnya menjadi untuk memeriksa apakah sebuah tangan valid. Fungsi ini menggunakan algoritma backtracking sederhana yang mempertimbangkan semua pilihan set yang mungkin dan memeriksa apakah ada di antara mereka yang menambahkan ke tangan yang lengkap.
Tangan direpresentasikan sebagai histogram ubin, yaitu daftar jumlah ubin (untuk semua ubin, tidak hanya yang ada di tangan.) Ini memudahkan untuk memeriksa apakah kita memiliki jumlah tertentu ubin tertentu, dan jika kita memiliki urutan ubin yang berdekatan (bantalan di antara ubin setelan yang berbeda mencegah urutan multi-setelan.)
sumber
map
di beberapa tempat, seperti:H(map((S+t).count,T))
JavaScript (E6) 306
Dijelaskan
Uji di konsol FireFox / FireBug
Keluaran
sumber