Anda ingin membuka kebun binatang baru. Itu akan luar biasa. Tetapi menjadi pelit seperti Anda, Anda hanya ingin membeli hewan tiga huruf (semua orang tahu bahwa biaya hewan sebanding dengan panjang namanya). Itulah impian Anda membuat orang membayar untuk melihat elephant
. Tapi tiba-tiba Anda punya ide cemerlang. Jika Anda hanya menempatkan hewan dengan benar di kandang, Anda dapat membuat ilusi optik sebuah elephant
! Inilah tampilan top-down dari "kompleks gajah" baru Anda:
elk
eel
pig
hog
ant
-------- (fence)
^
| viewing direction
Haha, para pengunjung yang mudah tertipu!
Ya, beginilah cara kerja persepsi.
Tantangan
Diberi kata tidak kosong yang hanya terdiri dari huruf-huruf bahasa Inggris huruf kecil, tentukan apakah itu dapat dibentuk dari tumpang tindih dengan 30 kata kata hewan tiga huruf berikut:
ant ape asp ass bat bee boa cat cod cow
dab dog eel elk emu fly fox gnu hog ide
jay kea kob koi olm owl pig rat ray yak
Ya, ada lebih dari 30, tapi itu angka bulat yang bagus.
Anda dapat secara opsional menerima daftar ini sebagai input (dalam daftar string atau format string apa pun, asalkan tidak diproses sebelumnya). Anda mungkin ingin melakukan ini, kecuali membaca dan memproses daftar input ini jauh lebih mahal daripada hardcoding dan mengompresnya dalam bahasa pilihan Anda. Perhatikan bahwa bahkan jika Anda mengambil daftar sebagai input, Anda dapat mengasumsikan bahwa itu akan selalu menjadi daftar ini, jadi jika kode Anda bergantung pada daftar yang disahkan yang panjangnya 30 elemen dan tidak mengandung kata z
, itu tidak masalah.
Setiap kata dapat digunakan beberapa kali. Hewan tidak dapat dipotong pada ujungnya, hanya sebagian disembunyikan oleh hewan lain. Jadi ox
bukan string yang mungkin, meskipun kita punya fox
.
Output harus truthy jika hal ini mungkin, dan falsy sebaliknya.
Anda dapat menulis suatu program atau fungsi, mengambil input melalui STDIN (atau alternatif terdekat), argumen baris perintah atau argumen fungsi dan mengeluarkan hasilnya melalui STDOUT (atau alternatif terdekat), nilai pengembalian fungsi atau parameter fungsi (keluar).
Kode Anda harus menangani salah satu kasus uji dalam beberapa detik.
Aturan standar kode-golf berlaku.
Lebih banyak contoh
- Kata satu atau dua huruf jelas salah.
- Begitu juga kata tiga huruf yang tidak ada dalam daftar di atas.
- Meskipun kami punya
gnu
danrat
,gnat
palsu karena tidak ada cara untuk mengaturnya sehingga Anda hanya melihat dua huruf masing-masing (kami tidak ingin memotong hewan menjadi tiga).
Beberapa contoh kebenaran:
pigment
ant
bee
olm
pig
antioxidant
fox
koi ide
ant ant
Uji Kasus
Sebagian besar kasus uji diambil dari menjalankan implementasi referensi terhadap kamus. Beberapa "kata" terakhir dihasilkan secara acak dan hanya ada untuk memastikan bahwa pengiriman cukup efisien.
Benar:
ant
owl
bass
pride
bobcat
peafowl
elephant
hedgehogs
crocodile
antidemocrat
aspidoganoidei
biodegradability
angioelephantiasis
propreantepenultimate
acategnukeaidabeleenaspcodcoidyakwakoasshogattkjaypigkobolcodidaskearaywelkwboaxbeeuflapaspoapemaassaaspeewoglmabiemuwjadogacagnuepigjaycownbatjaemuifoxkeaeekekeagratsseeluejdoghogaolmgpigbeaeelemulasphogjaydabemukgnunueifoasdoglrayyadogpewlayroassasslgnuaspyyakkbokeaodxilopgnuasppigkobelratelkolmakob
koigdgaspslycoyakehrdabowbatdkkeapogkobelrowlyarpidepetlfoxeboaiderbeefoxbgnuapeocowgiecowlkoieeltbategspemuideatdogbeeecatgeaoccattbbeassgnasolkeaflyelkaognubeeabrratoccolmobodoglyelraywelkoxantowleedrayflypeappigogatraoyakccpiganaaspkobabjaspkointantybjbeeanolmuijaylratojaynueidflyjarayabatmmpigtfly
eolmantjkobeeaorayogaowldfoxayeassapibatmflylyraelaspsseolmbelkkaoantlmufodasgnueantaidenthyakcodoxuepigodggnuantatlcatnuuelkpemucbapeeoiahdogplkowletbatdrayarayoaelkgrayodcatgkantewkobeljaybeeyfkobtbdabadoghbatfoxtflygaspdeidogtowlkeaolmyraelfleelejayehogowlccatoxeabiemkobpigolmdkobrcidekyakabboyidep
Falsy:
a
ox
ram
bear
koala
antelope
albatross
zookeeper
salamander
caterpillar
hippopotamus
koigdgaspslycoyakehrdabowbatdkkeapogkobelrowlyarpidepetlfoxeboaiderbeefoxbgnuapeocowgiecowlkoieeltbategspemuideatdogbeezcatgeaoccattbbeassgnasolkeaflyelkaognubeeabrratoccolmobodoglyelraywelkoxantowleedrayflypeappigogatraoyakccpiganaaspkobabjaspkointantybjbeeanolmuijaylratojaynueidflyjarayabatmmpigtfly
koigdgaspslycoyakehrdabowbatdkkeapogkobelrowlyarpidepetlfoxeboaiderbeefoxbgnuapeocowgiecowlkoieeltbategspemuideatdogbeeecatgeaoccattbbeassgnasolkeaflxelkaognubeeabrratoccolmobodoglyelraywelkoxantowleedrayflypeappigogatraoyakccpiganaaspkobabjaspkointantybjbeeanolmuijaylratojaynueidflyjarayabatmmpigtfly
beyeodpgspeclxlkbkaylldnceepkocbdmymsaogsowpbawbauaioluaaagaetdoaoialeoxaagspoelegflpylptylnolnatrjabaorkdteeydloiebbptatdtfdfgoodtbkoafmounbduaffcrfelcnawmxaskgaoenaattbaobgbgabnhkesbgaaaaotafkiiieatworginaeowaehuddegooaalowaoososaksahoimkulbtoadyyelkcmkacbuostadppcuglbnmotedfgfkoleldonknemomnmoutykg
sumber
You may optionally receive this list as input
- Apakah itu berarti itu tidak diperhitungkan dalam skor, sedangkan hard-coding akan melakukannya?Jawaban:
Japt,
514845363319 byteDisimpan 9 byte berkat @PeterTaylor
Uji secara online!
Mengambil input sebagai string untuk diuji, diikuti oleh daftar kata tiga huruf, dibatasi dengan
|
. Catatan: ini tidak berfungsi dalam versi terbaru dari interpreter, jadi silakan gunakan tautan daripada menyalin-menempelkan kode.Bagaimana itu bekerja
Ide dasarnya adalah untuk mengambil string input dan berulang kali mengganti salah satu dari 30 kata di dalamnya dengan dua karakter pengisi. Saya menggunakan spasi sebagai pengisi char. Kami juga ingin mengganti
ant
inelephant
, thea
inela
, thent
ine nt
, dll. Jadi yang ingin kami lakukan adalah mengubah string 30 kata menjadi regex yang cocok dengan kombinasi ini:Kita dapat melakukan ini dengan mudah:
Namun, ini memiliki efek yang tidak diinginkan juga mencocokkan tiga ruang, yang tidak memiliki efek pada hasil dan dengan demikian mengakhiri penggantian rekursif. Kami bisa menyiasatinya dengan mengganti pertandingan dengan dua spasi alih-alih tiga:
Berikut ini adalah demonstrasi dasar tentang bagaimana dan mengapa ini bekerja (menggunakan
.
sebagai ganti spasi):Untuk kasus-kasus uji kebenaran, ini memberi kita ruang semua string. Untuk kasus uji palsu, kami memiliki beberapa huruf yang tersisa dalam campuran. Ini dapat diterjemahkan ke benar / salah seperti:
Dan itu saja! Bonus dari metode ini adalah bahwa bahkan kasus uji terbesar selesai di bawah 5 milidetik. ( Diuji di sini )
sumber
(?!,,,)
?GNU grep, 62 + 1 = 63 byte
Ini membutuhkan
P
opsi. Masukan diharapkan hewan yang akan disintesis, diikuti oleh spasi, diikuti oleh daftar 3 huruf hewan yang dibuka, ditutup, dan dibatasi oleh tanda seru. Contoh penggunaan (dengan asumsi program disimpan sebagaizoo
):Untuk input yang benar, jalur input akan bergema kembali. Untuk input yang salah, tidak ada output.
Terima kasih kepada Martin karena telah menemukan bug dan mengingatkan saya akan keberadaan
\B
kata yang tidak terbatas.sumber
\B
sehingga Anda dapat menyingkirkan lookahead terakhir? (Jika tidak, beralih ke Retina akan menghemat beberapa byte. Sebenarnya saya pikir itu akan menghemat byte, karena tidak memerlukanP
opsi.)grep: exceeded PCRE's backtracking limit
.ES6,
122121119104 byteSaya telah bekerja bagaimana melakukan ini sejauh jawaban ETHproduksi tetapi tidak bisa memikirkan bagaimana menangani
,,,
masalah *, jadi tentu saja ketika saya melihat komentar Peter Taylor semuanya menjadi jelas. Kemudian ETHproductions berhasil menemukan cara yang lebih baik untuk menangani masalah yang sangat membantu menghemat 15 byte.Input adalah kata target dan berbagai kata hewani.
Sunting: Disimpan
1 byte3 byte berkat produk @ETH.* Kecuali saya menggunakan & s karena terlihat lebih bagus di laptop saya
replace
.sumber
(`(?!&&&)(${a.map...})`)
sebagai string, 2) menghapus tanda kurung setelah melakukan itu, 3) menggunakaneval`/(?!&&&).../`
?()
yang tidak berfungsi; dengan()
kerjanya dan menyelamatkan saya satu byte.eval
juga membutuhkan()
s sehingga tidak menyimpan apa pun lebih lanjut, maaf.a.replace(...)
.s=s.replace(RegExp(a.map(a=>a.replace(/./g,"[&$&]")).join`|`),'&&')
Mengganti dengan dua karakter bukan tiga menghilangkan kemungkinan terjebak mengganti tiga karakter yang sama berulang-ulang.JS ES6, 77 byte
(ini anonim fn)
Input sama dengan input contoh grep di atas
sumber
prompt()
bukankah seharusnya Anda menggunakan outputalert()
? (Atau buat saja ini fungsi.)