Letter dadu adalah hal biasa di permainan kata. Misalnya, bisa mengeja kata-kata lucu dengan boggle dadu. Jika Anda meraih beberapa dadu, kemungkinan Anda tidak akan bisa mengeja kata-kata tertentu. Tantangan ini adalah generalisasi dari gagasan itu.
Tantangan
Diberikan daftar dadu yang masing-masing memiliki setidaknya 1 wajah dan sebuah kata, tugas Anda adalah untuk menentukan apakah mungkin untuk mengeja kata itu menggunakan dadu yang diberikan (dalam hal ini, itu harus mengembalikan hasil yang benar). Hanya satu huruf dari setiap dadu dapat digunakan dan dadu hanya dapat digunakan satu kali. Anda tidak perlu menggunakan semua dadu yang diberikan.
Contohnya
Dalam contoh sepele, dengan dadu [[A], [C], [T]] dan string CAT, hasilnya benar. BAT akan, tentu saja, mengembalikan false karena tidak ada dadu dengan B pada mereka
Jika diberikan [[A, E, I, O, U], [A, B, C, T], [N, P, R]] sebagai set dadu, Anda akan mengembalikan true untuk ART, TON, dan CUR , tetapi salah untuk CAT, EAT, dan PAN karena string tersebut membutuhkan dadu yang digunakan kembali. Seharusnya juga cukup jelas bahwa CRAB tidak dapat dieja dengan dadu ini karena tidak ada cukup dadu.
Jika diberikan [[A, B, C], [A, E, I], [E, O, U], [L, N, R, S, T]] sebagai himpunan dadu, Anda dapat mengeja CAT, BEE, BEAN, TEH, BEET, dan BAN, tetapi Anda tidak akan bisa mengeja LONE, CAB, BAIL, TAIL, BAA, atau TON
Mungkin ada kelipatan dari dadu yang sama. Jika diberikan [[A, B, C], [A, B, C], [A, B, C]], Anda akan dapat mengeja CAB, BAA, AAA, dll ... tapi jelas tidak ada yang tanpa A, B, atau C di dalamnya.
Aturan
- Tidak mengeksploitasi celah standar
- Ini kode-golf , jadi kode terpendek menang.
- Anda dapat berasumsi bahwa kata dan dadu hanya terdiri dari huruf kapital.
- Anda mungkin berasumsi bahwa kata itu akan selalu setidaknya 1 huruf dan bahwa akan selalu ada setidaknya 1 mati.
- Anda mungkin berasumsi bahwa dadu tidak akan pernah memiliki lebih dari satu surat yang sama.
- Input dan output mungkin dalam format apa pun yang nyaman.
sumber
Jawaban:
Brachylog , 5 byte
Cobalah online!
Kami menggunakan variabel input untuk dadu dan variabel output untuk kata. Ini keluar
true.
saat dimungkinkan untuk mengeja kata danfalse.
sebaliknya.Penjelasan
sumber
Haskell ,
4844 byteIni adalah fungsi anonim. Terikat pada beberapa pengidentifikasi
f
yang dapat digunakan sebagaif "ART" ["AEIOU", "ABCT", "NPR"]
, yang menghasilkanTrue
. Cobalah online!Setara non-point-free adalah
mapM id
lebih dari daftar daftar menggunakanMonad
instance dari daftar dan dapat dilihat sebagai pilihan non-deterministik . Jadi misalnyamapM id ["AB","123"]
hasil["A1","A2","A3","B1","B2","B3"]
.Untuk masing-masing kombinasi dadu itu, kami memeriksa apakah perbedaan daftar
(\\)
kata yang diberikan dan kombinasi menghasilkan daftar kosong.sumber
JavaScript (ES6), 68 byte
sumber
EEE
.Python 2 , 82 byte
Cobalah online!
Rantai perbandingan
w[0]in x>0<f(...)
setara dengan:w[0]in x
danx>0
dan0<f(...)
.Yang kedua selalu benar (
str
>int
) dan yang ketiga adalah sama denganf(...)
, sehingga semuanya adalah cara yang lebih singkat untuk menulisw[0]in x and f(...)
sumber
JavaScript (ES6), 74 byte
Mengambil input dalam sintaks currying
(w)(a)
, di mana w adalah kata yang kita cari dan a adalah daftar string yang menggambarkan dadu. Mengembalikan 0 atau 1 .Cobalah online!
Berkomentar
Kami mengubah setiap subset-permutasi dadu menjadi pola ekspresi reguler dan mengujinya terhadap kata target.
sumber
Sekam , 5 byte
Cobalah online!
Mengembalikan nilai non-nol jika memungkinkan untuk mengeja kata, nol sebaliknya.
Penjelasan
sumber
Perl 5
-plF
,4846 byte@HomHastings menyelamatkan 2 byte
Cobalah online!
Memasukkan:
Keluaran:
0
untuk kata yang tidak divalidasi. Setiap bilangan bulat positif untuk kata yang divalidasiBagaimana?
Penjelasan ini melihat kode dalam urutan eksekusi, efektif dari kanan ke kiri untuk liner satu ini.
sumber
JavaScript (Node.js) , 98 byte
Cobalah online!
Dengan asumsi ada cukup dadu
JavaScript (Node.js) , 100 byte
Cobalah online!
JavaScript (Node.js) , 99 byte
Cobalah online!
sumber
Jelly ,
109 byte-1 berkat Erik the Outgolfer (gunakan
w
daripadaẇ@
>. <)Tautan diad menerima daftar daftar karakter di sebelah kiri (dadu) dan daftar karakter di sebelah kanan (kata) yang mengembalikan 1 jika mungkin dan 0 jika tidak.
Cobalah online! Atau lihat test-suite .
Bagaimana?
Algoritma yang lebih cepat (juga 9 byte):
Sebuah link diad dengan format input yang sama yang mengembalikan bilangan bulat positif (kebenaran) bila memungkinkan dan 0 (falsey) sebaliknya.
sumber
R ,
192 185 135 117 111109 byteCobalah online!
-2 karakter berkat Giuseppe.
sumber
F=
Pyth , 21 byte
Suite uji
Penjelasan:sumber