Apa cara terpendek untuk melihat apakah input adalah wordinian menggunakan bahasa pemrograman apa pun?
Wordinian adalah kata yang berisi kata-kata dengan panjang 1 hingga panjang kata aslinya. Sebagai contoh,
tempat sampah
'I' adalah kata
'in' adalah kata
'bin' adalah kata
Atau,
tahap
'a' adalah kata
'ta' adalah kata ( ya itu )
'usia' adalah kata
'rusa jantan' adalah kata
'tahap' adalah kata
Memasukkan
Kode Anda harus mengambil kata dan kamus sebagai input, dalam format apa pun yang masuk akal.
Keluaran
Outputnya harus berupa nilai untuk menunjukkan benar atau salah, untuk memberi tahu kami jika kata tersebut adalah wordinian.
Untuk info lebih lanjut tentang wordinians klik di sini .
Berikut adalah daftar kata yang akan saya gunakan sebagai input dan subword. Juga, sebagai respons terhadap @xnor, harus berisi subwords dari setiap panjang, bukan rantai subwords. Perhatikan bahwa hanya satu kata yang akan digunakan sebagai input.
sumber
Jawaban:
Pyth,
2016151311 byteTerima kasih kepada Leaky Nun karena telah menghemat 4 byte! Sayangnya, saya mengubah seluruh metode setelahnya, tetapi masih membantu.
Diharapkan input sebagai kamus diikuti oleh kata. Output Benar atau Salah.
Coba di sini!
Penjelasan:
Ini tidak berfungsi jika string kosong
""
adalah kata yang valid.sumber
.E
dapat diganti dengans
m}kH
dapat diganti dengan}RH
Python, 52 byte
Fungsi anonim yang menggunakan kata
w
dan kamusd
. Dibutuhkan kata-katad
yang merupakan substring dariw
, membuat seperangkat panjangnya, dan kemudian memeriksa bahwa ada panjang yang berbeda sebanyak ada huruf di dalamnyaw
.sumber
[
bukan{
.{...}
adalah seperangkat pemahaman (sama denganset([...])
).Python 3, 108 byte
Fungsi anonim yang mengambil input, melalui argumen, dari kata
w
sebagai string dan kamusd
sebagai daftar string dan mengembalikanTrue
atauFalse
.Bagaimana itu bekerja
Langkah pertama adalah pemahaman daftar yang menghasilkan daftar daftar semua substring
w
tidak termasukw
, dikelompokkan berdasarkan panjangnya. Misalnya, untuk'stage'
, daftar[['s', 't', 'a', 'g', 'e'], ['st', 'ta', 'ag', 'ge'], ['sta', 'tag', 'age'], ['stag', 'tage']]
dibuat. Ini dicapai dengan mengulang semua indeks awal yang validi
untuk setiap panjang substrings
, dan mengiris setiaps
substring panjang menggunakanw[i:i+s]
. Untuk setiap daftar dalam daftar ini, keberadaan setiap substring dalam kamus diperiksa; panggilanany
mengembalikan hit jika setidaknya satu kecocokan untuk panjang tertentu ditemukan. Akhirnya, memanggilall
cek jika kecocokan telah ditemukan untuk semua panjang substring, dan hasilnya dikembalikan.Cobalah di Ideone
sumber
Ruby, 44 byte
w[x]&.size
:)Ini adalah fungsi anonim yang mengambil kata
w
dan kamus (array kata)d
. Membuat dua array: Yang pertama berisi angka 1 hingga dan termasuk panjangw
; Array kedua adalahd
dengan setiap kata dipetakan ke ukuran mereka jika mereka adalah substringw
, jika tidaknil
. Kemudian mengatur substraksi untuk memeriksa apakah array kedua berisi semua elemen dari array pertama.sumber
w[x]&.size==i
alih-alihx.size==i&&w[x]
.uniq
dan-[p]
dan menggunakan set pengurangan sebagai gantinya:[*1..w.size]-d.map{...}==[]
PowerShell
v3 +v2 +,1271107065 byte(Saya melihat sekarang bahwa pendekatan saya mirip dengan @ xnor, meskipun saya mengembangkannya secara independen)
Mengambil input kata
$a
dan kamus$d
, mengharapkan$d
sebagai array (lihat contoh di bawah). Loop melalui keseluruhan$d
dan melakukanWhere-Object
untuk menarik keluar entri di mana kata saat ini$_
adalah regex-match
terhadap kata input$a
(yaitu, adalah kata saat ini substring dari kata input).Kami mengumpulkan semua kata-kata substring dan pipa mereka ke
Select-Object
padalength
parameter dan-U
batasan nique. Itu akan menarik panjang unik dari masing-masing substring. Misalnya, untuk kata inputcomb
, ini akan menjadi array(4,2)
untuk('comb','om')
.Kami mengambil
.count
array yang dihasilkan dan membandingkannya dengan kata input.length
. Jika sama dengan, itu berarti bahwa setiap panjang substring ada di kamus, jadi$TRUE
, kalau tidak, kita kehilangan setidaknya satu, jadi$FALSE
. Nilai Boolean yang tersisa di pipa dan output tersirat.NB - Ini harus bekerja di v2 +, karena
-in
operator tidak lagi ada, tapi saya belum menguji versi itu.Contohnya
sumber
Perl, 86 byte
Membutuhkan
-E
tanpa biaya tambahan.Menerima semua input melalui STDIN. Input pertama adalah kata target, sisanya input adalah kamus. Mencetak
1
pada kesuksesan, mengosongkan string pada kegagalan.Pemakaian
sumber
Mathematica, 90 byte
Menggunakan Mathematica ini builtin
DictionaryWordQ
.Mengambil input
d
sebagai kamus lebih pendek 5 byte, tetapi jauh lebih lambat untuk daftar panjang:sumber
MATL , 15 byte
1 byte disimpan menggunakan ide dari jawaban @ xnor .
Keluaran
1
atau0
kebenaran atau kepalsuan.Cobalah online!
sumber
Perl,
4241 byteTermasuk +2 untuk
-p0
Beri kata diikuti oleh kamus di STDIN:
(Saat menguji pada unix, pastikan dictionary.txt menggunakan
\n
sebagai terminator garis, bukan\r\n
)wordinian.pl
:sumber
JavaScript (Firefox 30-57), 68 byte
Menggunakan pemahaman generator menghindari membuat array perantara. Versi ES6 73 byte:
sumber
05AB1E , 8 byte
Kata sebagai input pertama, kamus-daftar sebagai input kedua.
Cobalah secara online atau verifikasi beberapa kasus uji lagi .
Penjelasan:
sumber
Kotlin , 51 byte
Cobalah online!
sumber
SQF , 147 byte
Menggunakan format fungsi-sebagai-file:
Panggil sebagai:
["WORD", DICTIONARY] call NAME_OF_COMPILED_FUNCTION
Tidak Terkumpul:
sumber