Diberikan string huruf dan serangkaian kata, output urutan kata-kata sehingga mereka dapat ditemukan dalam string dengan menjatuhkan huruf yang tidak diperlukan. Kata-kata dapat muncul lebih dari satu kali di kumpulan kata. String input dan semua kata akan terdiri dari 1 hingga 1000 huruf kecil masing-masing. Huruf yang akan dijatuhkan dapat muncul di dalam kata-kata atau di antara kata-kata.
Program atau fungsi Anda dapat menerima string huruf dan kata-kata sebagai daftar, string, atau dari STDIN, dan harus menampilkan semua kata dalam urutan yang benar sebagai daftar atau string output. Jika ada lebih dari satu solusi yang benar, hanya output salah satunya. Jika tidak ada solusi yang mungkin benar, hasilkan daftar kosong atau string kosong.
Contoh:
dogcatfrog cat frog dog
-> dog cat frog
xxcatfixsxhingonxgrapexxxfishingcxat cat grape catfish fishing
-> catfish grape fishing cat
dababbabadbaccbcbaaacdacdbdd aa bb cc dd ba ba ba ab ac da db dc
-> da ab ba ba ba cc bb aa ac dc db dd
flea antelope
->
(no solution)
Ini golf kode. Jumlah byte terendah menang.
Sunting: Dijelaskan bahwa karakter tambahan dapat di dalam kata-kata.
cc
sebelumbb
tapibb
dancc
substring hanya muncul sekali danbb
substring muncul pertama kali.ccbcb
bagian string kita outputcc
kemudian outputbb
setelah menjatuhkan tengahc
.Jawaban:
Pyth,
2024 byteUpaya pertama saya di Pyth :)
Bagaimana itu bekerja:
Catatan: dibutuhkan waktu lama pada contoh ketiga (
dababbabadbaccbcbaaacdacdbdd aa bb cc dd ba ba ba ab ac da db dc
).sumber
Pyth, 10 byte
Demonstrasi
Program ini sangat kasar. Pertama membangun setiap subset dari input, kemudian setiap partisi dari subset, kemudian memeriksa yang pertama yang merupakan penataan ulang dari daftar kata. Tidak ada kemungkinan ditangani melalui kesalahan tanpa output ke stdout, yang diizinkan oleh konsensus meta. Kesalahan dapat dihapus selama 2 byte tambahan.
Perhatikan bahwa untuk banyak kasus uji yang diberikan, program tidak akan selesai dalam periode waktu yang wajar.
sumber
JavaScript (ES6), 119 byte
Menerima string dan array kata dan mengembalikan array kata atau
undefined
kegagalan. Tambahkan 2 byte jika harus mengembalikan string kosong pada kegagalan (?q:``
), dalam hal ini versi alternatif ini hanya 120 byte dan mengembalikan string kosong pada kegagalan, dan bahkan dapat menyimpan 2 byte jika diizinkan untuk mengembalikan 0 pada kegagalan:(Setelah menulis ini saya perhatikan bahwa algoritma pada dasarnya sama dengan jawaban Pyth @ KennyLau.)
Suntingan yang diedit: diperbarui setelah klarifikasi pertanyaan, tetapi sekarang benar-benar lambat pada kasus uji ketiga; Saya mematikannya sebelum malam terakhir dan pagi ini saya baru saja memperhatikan bahwa itu sebenarnya telah menemukan solusinya, di suatu tempat antara 30 dan 40 jam kemudian. Saya benar-benar jahat dan memberi makan solusi untuk itu (itu bekerja paling baik dengan solusi terbalik, yang akan memverifikasi secara instan).
sumber
Java 7, 256 byte
Seharusnya dimungkinkan untuk bermain golf ini lebih banyak dengan menggunakan pendekatan yang berbeda, tetapi ini akan berlaku untuk saat ini ..
Tidak digabungkan & kode uji:
Coba di sini.
Keluaran:
sumber
Groovy (44 Bytes)
Saya tidak percaya tidak ada orang lain yang menggunakan regex untuk ini ...
Penjelasan
/${b.join('|')}/
- Buat regex untuk menemukan kata dalam string..findAll(...)
- Temukan dan kumpulkan semua kemunculan dalam string ke dalam array..join(" ")
- Bergabung dengan array bersama spasi.Pada dasarnya, jika tidak ada kejadian, array kosong dan mengembalikan string kosong secara implisit. Jika ia menemukan kejadian, ia mengembalikan objek array dengan kejadian kemudian meratakannya menjadi string.
sumber