Word changer adalah gim di mana Anda mencoba mengubah satu kata menjadi yang lain melalui pengeditan karakter tunggal, dengan setiap langkah menjadi kata-katanya sendiri. Untuk tantangan ini, pengeditan dapat berupa penggantian, penyisipan, atau penghapusan. Misalnya, PEMENANG → PECUNDANG dapat dilakukan dengan rute ini (mungkin ada yang lain):
WINNER
DINNER
DINER
DINE
LINE
LONE
LOSE
LOSER
Dengan kata lain, Anda harus dapat mencapai satu kata dari yang lain hanya melalui kata-kata lain pada jarak Levenshtein 1 setiap kali.
Coding
Anda akan diberikan daftar kata dan dua kata dan Anda harus menampilkan rute yang valid dari satu kata ke kata lain jika ada rute atau nilai konstan yang berbeda atau perilaku yang konsisten jika tidak ada rute.
- Anda dapat mengasumsikan bahwa kata-kata input keduanya dalam daftar kata
- Daftar kata dapat diambil melalui format datar yang nyaman.
- Daftar, set, percobaan, string yang dipisahkan ruang, dan file yang dipisahkan baris semuanya valid (misalnya), tetapi grafik pra-komputasi dari kedekatan Levenshtein tidak.
- Rute output harus mencakup kedua kata input, tetapi yang dimulai dan berakhir tidak masalah.
- Jika tidak ada rute yang ditemukan, Anda dapat menampilkan konstanta tertentu, nilai falsy, daftar kosong, melemparkan pengecualian, keluar dengan kode bukan nol, atau perilaku lain yang terjadi dalam waktu yang terbatas.
- Rute tidak perlu optimal dan tidak ada persyaratan rute mana yang harus diambil
- Kompleksitas komputasi tidak menjadi masalah, namun program Anda harus dapat dibuktikan berakhir dalam waktu yang terbatas. (Bahkan jika itu akan melampaui kematian panas alam semesta)
- Anda dapat menganggap semua kata seluruhnya terdiri dari huruf dalam kasus yang sama
Contoh Kasus Uji
- CAT → DOG; [CAT, DOG, COG, COT, FROG, GROG, BOG]
- CAT, COT, COG, DOG
- MANDI → MANDI; [BATH, SHOWER, HATH, HAT, BAT, SAT, SAW, SOW, SHOW, CARA]
- Tidak Ditemukan Rute
- BREAK → FIX; [BREAK, FIX, BEAK, BREAD, BACA, BEAD, RED, BED, BAD, BID, FAD, FAX]
- BREAK, BREAD, BEAD, BAD, FAD, FAX, FIX
- BUILD → HANCURKAN; [BUILD, DESTROY, BUILT, GUILT, GUILD, GILD, GILL, BILL, DILL, FILL, DESTRUCT, STRUKTUR, KONSTRUKSI]
- Tidak Ditemukan Rute
- CARD → BOARD; [KARTU, DEWAN, BARD]
- KARTU, BARD, PAPAN
- DEMON → ANGEL; [DEMON, MALAIKAT]
- Tidak Ditemukan Rute
- TERAKHIR → MASA LALU; ]
- TERAKHIR, MASA LALU
- INSERT → DELETE; Daftar kata ini
- INSERT, INVERT, INVENT, INBENT, UNBENT, UNBEND, UNBIND, UNKING, UNKING, INKING, IRKING, DIRKING, DARKING, DARLING, ARLING, AILING, SIRING, SERING, SERINE, NERINE, NERITE, NERITE, CERATE, DERATE, DATE MENGHAPUS
code-golf
string
decision-problem
Beefster
sumber
sumber
Jawaban:
05AB1E ,
232120 byteMencetak daftar rute yang valid.
Disimpan 2 byte berkat Kevin Cruijssen .
Cobalah online!
sumber
Dævyœ«}
ke怜€`
. (Tidak yakin mengapa kedua peta terpisah dengan€
berfungsi dengan baik, tetapiæεœ`}
tidak btw, tapi itu adalah byte-count yang sama pula.)[]
adalah1
bukan0
(tidak terlalu mengejutkan, meskipun) atau bahwa pemeriksaan yang sama dengan daftar kosong ternyata menghasilkan daftar kosong bukannya0
(yang ini saya lihat sebagai bug ..) .. Kalau tidak, Anda bisa menggabungkan filter dan find_first untuk menyimpan byte lain:怜€`.Δü.LPy¬²Qsθ³QP
€
. Saya pikir hasil pemeriksaan yang sama dalam daftar kosong karena vektorisasi. Mungkin harus ada kasus khusus untuk daftar kosong, tetapi mungkin itu tidak terduga dalam kasus lain.JavaScript (V8) ,
177176 byteMengambil input sebagai
(target)(source, list)
. Mencetak semua rute yang mungkin. Atau mencetak apa pun jika tidak ada solusi.Cobalah online!
Berkomentar
sumber
Bahasa Wolfram (Mathematica) , 59 byte
Cobalah online!
sumber
Python 2 , 155 byte
Cobalah online!
Mengambil dua kata dan satu set kata sebagai input; mengembalikan rute (tidak optimal) jika ada sebagai daftar string, jika tidak mengembalikan False.
Fragmen ini:
adalah
True
jika dan hanya jikaa==w
ataua
memiliki jarak Levenshtein1
dariw
.sumber
Bahasa Wolfram (Mathematica) , 124 byte
Cobalah online!
sumber
Python 2 , 163 byte
Jika rute ditemukan, itu adalah output ke stderr dan program keluar dengan kode keluar 1.
Jika tidak ada rute, tidak ada output dan program berakhir dengan kode keluar 0.
Cobalah online!
sumber
Python 3 ,
217214212201 byte-11 byte thanx ke petunjuk dari xnor
Cobalah online!
sumber
Jelly , 38 byte
Cobalah online!
Program lengkap yang menerima tiga argumen. Yang pertama adalah kata awal dan diberikan sebagai
[["START"]]
. Argumen kedua adalah kata terakhir, diberikan sebagai"END"
. Argumen ketiga adalah daftar kata, diberikan seperti dikutip, kata-kata yang dipisahkan koma.Program mengembalikan daftar daftar, dengan setiap daftar mewakili jalur yang valid dari awal hingga akhir. Jika tidak ada rute yang valid, responsnya adalah daftar kosong.
Di tautan TIO, ada teks footer untuk menampilkan hasilnya dengan baik dengan setiap kata dipisahkan oleh spasi dan setiap daftar kata dipisahkan oleh baris baru. Jika representasi daftar yang mendasari cetakan lebih disukai, ini bisa dilakukan sebagai
ÇŒṘ
.Tidak seperti 05ABIE, tidak ada built-in untuk jarak Levenshtein, jadi program ini membandingkan perbaikan dengan satu karakter yang hilang, agak mirip dengan solusi @ ChasBrown , meskipun dengan twist Jelly.
Penjelasan
Tautan bantuan: tautan monadik yang mengambil daftar kata dan mengembalikan daftar daftar yang mungkin diperluas, atau daftar kosong jika tidak ada ekstensi lebih lanjut yang dimungkinkan
Tautan utama
sumber
Swift 4.2 / Xcode 10.2.1 , 387 bytes
Cobalah online!
sumber