Masalah
Anda terjebak di sebuah pondok di tengah hutan, dengan hanya scrabble tua yang diatur untuk menghibur diri sendiri. Setelah diperiksa Anda melihat bahwa surat-surat scrabble begitu dikenakan, sehingga hanya poin untuk setiap huruf yang terlihat.
Meskipun demikian Anda memutuskan untuk bermain game. Anda menarik tujuh huruf dari tas dan meletakkannya di baki Anda, tantangan Anda adalah untuk menentukan apa huruf-huruf itu.
Jadi secara umum, diberi daftar poin mengubahnya menjadi string atau daftar surat yang mungkin.
Ubin dan Distribusi Scrabble
- 2 ubin kosong (mencetak 0 poin)
- 1 poin: E × 12, A × 9, I × 9, O × 8, N × 6, R × 6, T × 6, L × 4, S × 4, S × 4, U × 4
- 2 poin: D × 4, G × 3
- 3 poin: B × 2, C × 2, M × 2, P × 2
- 4 poin: F × 2, H × 2, V × 2, W × 2, Y × 2
- 5 poin: K × 1
- 8 poin: J × 1, X × 1
- 10 poin: Q × 1, Z × 1
Jadi jika Anda memiliki daftar poin [10,10,8,5,1,1,1]
maka "QZJKEEE"
akan valid tetapi "QQJKEEE"
tidak akan valid (karena hanya ada 1 ubin Q di tas)
Masalah Aturan Khusus
- Anda dapat mengasumsikan semua input valid dan akan selalu ada 7 petak (mis. Itu tidak akan menjadi daftar tujuh petak 10 poin dan tidak akan ada 9 petak)
- Anda dapat mengasumsikan tidak ada ubin yang sebelumnya ditarik dari tas (jadi distribusinya adalah distribusi standar ubin bahasa Inggris seperti yang ditentukan di atas)
- Anda tidak harus membuat kata yang valid, hanya serangkaian huruf yang valid.
- Urutan string Anda tidak relevan selama untuk setiap ubin ada huruf yang sesuai.
- Poin didasarkan pada poin ubin scrabble inggris standar seperti yang didefinisikan di atas.
- Anda dapat menampilkan dalam huruf besar atau kecil, untuk ubin kosong Anda dapat menampilkan karakter spasi atau garis bawah '_'
- Jawaban Anda dapat ditampilkan sebagai representasi ubin yang wajar seperti Daftar, String, Array, atau Urutan
Aturan umum:
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa yang bukan kode. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa saja'. - Aturan standar berlaku untuk jawaban Anda dengan aturan I / O default , sehingga Anda diizinkan untuk menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program penuh. Panggilanmu.
- Celah default tidak diperbolehkan.
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda (yaitu TIO ).
- Juga, menambahkan penjelasan untuk jawaban Anda sangat dianjurkan.
Uji Kasus
Jelas karena Anda dapat menampilkan nilai yang mungkin, sulit untuk menentukan kasus pengujian yang ketat.
Beberapa kasus dengan kemungkinan nilai pengembalian yang valid :
[10,0,10,5,8,8,0] -> "Q ZKJX "
[1,1,1,1,1,1,1] -> "EEEEEEE"
[1,2,3,4,5,8,0] -> "NDBHKJ "
[2,2,2,2,2,2,2] -> "DGDGDGD"
Beberapa kasus dengan nilai pengembalian tidak valid :
[10,0,10,5,8,8,0] -> "Q QKJX " - Too many Qs
[1,1,1,1,1,1,1] -> "EEEEEE " - Space is 0 points not 1
[1,2,3,4,5,8,0] -> "NDBH" - Too short
[1,2,3,4,5,8,0] -> "NDBHKJ I" - Too long
[1,2,3,4,5,8,0] -> "ÉDBHKJ1" - Contains none scrabble characters
[2,2,2,2,2,2,2] -> "GDGDGDG" - Contains too many Gs (case for invalid cycling)
[2,2,2,2,2,2,2]
(satu-satunya kasing yang penting untuk memulai dengan menggunakan metode bersepedaD
daripadaG
jika)Jawaban:
JavaScript (ES6), 72 byte
Varian yang lebih pendek disarankan oleh @supercat
Cobalah online!
JavaScript (ES6),
137 ... 84 78 7776 byteDisimpan 10 byte dengan menggunakan metode bersepeda Neil
Mengembalikan daftar ubin. Penggunaan
_
untuk ubin kosong.Cobalah online!
Bagaimana?
Untuk setiap jumlah poin, kami menggilir grup tepat 4 ubin, dimulai dengan ubin kedua dari setiap grup (ini penting untuk
G
vsD
):Semua grup ini disimpan sebagai string tunggal 31 karakter:
NB : Kami tidak perlu menyimpan final
"_"
di"_XJ_"
, karena tidak akan pernah diakses pula.Jumlah poinn dikonversi ke indeks yang benar sayan ke dalam string ini dengan:
sumber
a=>a.map(o=n=>('?ED?BWQ?_EG?CFZ?_EDJMH?K?EGXPV'[n*9.4+(o[n]=7-~o[n])&31]))
. Versi yang lebih pendek, "hampir" adalaha=>a.map(o=n=>("_EDBFK_EDCHJQEGMVXZEGPW"[n+(o[n]=5-~o[n])%24]))
tetapi pendekatan itu akan membutuhkan cara yang ringkas untuk memetakan nilai 8 dan 10 menjadi 11 dan 12, ditambah sedikit penyesuaian pada string untuk memperbaiki masalah off-by-one.'_??VKWZHQFP?M?CGBGXDJD'[(n*96+(o[n]=32-~o[n]))%68%33]||'E'
, dengan string pencarian hanya 22 karakter. Kode lengkapnya masih 2 byte lebih lama dari solusi Anda.Arang , 33 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
sumber
Jelly ,
31 30 2726 byteTautan monadik yang menerima daftar bilangan bulat yang menghasilkan daftar karakter.
- kecelakaan saya sebelumnya, di bawah, dan peningkatan saya Nick Kennedy
Cobalah online!
Output tidak diberikan dalam urutan yang sama dengan input (ini diizinkan).
Menggunakan 2 tambahan saya sendiri untuk bahasa dalam jawaban tidak sering terjadi! (
ṃ
dan diɓ
sini).Bagaimana?
sebelumnya @ 30
Tautan monadik yang menerima daftar bilangan bulat yang menghasilkan daftar karakter.
Cobalah online!
Output yang satu ini juga case campuran (ini diizinkan).
Bagaimana?
sumber
' NWGMZQ'
setelah indeks multi-dimensi menjadi cukup prestasi tanpa adaW
dalam string. ;)Pyth -
9286838180756052494236 byteLoop melalui input, muncul surat-surat yang tersedia. Saya hanya punya satu dari setiap huruf yang bersama-sama memberikan 7 untuk kategori poin itu. Sekarang menggunakan pengkodean string yang dikemas.
Btw, ini adalah string surat asli sebelum penyandian:
"_ E DG BCMP FHVW K JX QZ"
.Cobalah online .
sumber
Perl 5 , 71 byte
Cobalah online!
sumber
05AB1E ,
70523938292625 byte-18 byte terima kasih kepada @ExpiredData .
-13 byte dengan menggunakan sama memperpanjang ukuran 7 dari @Maltysen 's Pyth jawabannya .
-9 byte dengan membuat port dari jawaban Jelly @ JonathanAllan , jadi pastikan untuk menambahkannya!
-3 byte terima kasih kepada @Emigna .
Menghasilkan daftar karakter, dan menggunakan huruf kecil dan ruang kosong.
Cobalah secara online atau verifikasi beberapa kasus uji lagi .
Penjelasan:
Lihat ini 05AB1E ujung tambang (bagian Cara string kompres bukan bagian dari kamus? ) Untuk memahami mengapa
.•3Oû}α›ηö‡.ÝŽ{•
adalah"endgmpfykkzzzzjxzzqz "
.Jawaban 38 byte sebelumnya:
Cobalah secara online atau verifikasi beberapa kasus uji lagi .
Penjelasan:
Lihat ini 05AB1E ujung tambang (bagian Cara string kompres bukan bagian dari kamus? ) Untuk memahami mengapa
.•Mñ&Àû«ì{₆v*Å+µ-•
adalah"e dg bcmp fhvw k jx qz"
.sumber
" 0eeeeeee0ddddggg0bbccmmp0ffhhvvw0k000jx00qz"
?{v
bukan7F
dany
bukanI{Nè
.C (gcc) , 110 byte
Cobalah online!
Menggunakan
_
array sebagai indeks ke string statis"DDDDGGGBBCCMMPFFHHVVWKJXQZ"
secara dinamis dengan pengecualian untuk 0 dan 1.Argumen adalah
-1
array skor -minminasi yang diubah di tempat menjadi-1
string -minminminasi.sumber
C # (Visual C # Interactive Compiler) ,
10490 byteCobalah online!
sumber
Jelly ,
3432 byteCobalah online!
Saya belum melihat ada jawaban Jelly yang lebih pendek ketika saya menulis ini, dan ini menggunakan pendekatan yang berbeda jadi saya pikir layak untuk diposkan juga.
Terima kasih kepada @JonathanAllan karena telah menghemat 2 byte!
sumber
ṃ
Anda dapat menyimpan 2 bytePython 3 ,
178142135127112117 byteCobalah online!
-1 byte berkat cdlane
benar terima kasih kepada mathmandan
sumber
d=list(map(list,"...".split('_')))
untuk menyimpan byte lainf
mungkin tidak perlu dinamai, sehingga Anda dapat menyimpan 2 byte. Namun,f
mengkonsumsi entrid
, jadi saya tidak yakin itu sesuai dengan persyaratan konsensus bahwa "fungsi harus dapat digunakan kembali secara sewenang-wenang, tanpa ... menyatakan kembali ... kode lain yang menyertai pengiriman." (Misalnya, menjalankanf([10,0,10,5,8,8,0])
lebih dari satu kali akan menghasilkan kesalahan.) Silakan lihat diskusi meta di sini: codegolf.meta.stackexchange.com/a/7615/36885Python 2 , 102 byte (atau mungkin 95?)
(Juga baik untuk Python 3.)
Cobalah online!
Saya pikir hal berikut tidak akan diterima:
Versi kedua ini akan memberikan output seperti
['__', 'JX', 'QZ', 'K']
. Jadi surat-surat itu benar, tetapi dikumpulkan dengan nilai poin. (Jika ini dapat diterima, itu akan menghemat 7 byte.)sumber
PHP , 101 byte
Sebagai program mandiri, masukan melalui baris perintah:
Cobalah online!
Atau 112 byte sebagai fungsi
Cobalah online!
Keluaran
sumber
Ruby ,
7776 byteCobalah online!
sumber
Perl 6 , 63 byte
Cobalah online!
Jadi pada dasarnya itu membuat pencarian offset untuk setiap nilai ubin dan menambahkannya sesuai kebutuhan, menggunakan offset untuk menarik karakter dari set yang tersedia.
sumber