Anda sedang melihat jalan, dan seseorang telah meninggalkan sampah! Anda perlu menulis sebuah program untuk membantu memperbaiki masalah, dengan memasukkan tempat sampah ke tempat sampah.
Tugas
Avenue terdiri dari serangkaian karakter ASCII yang dapat dicetak, misalnya:
[[](dust)[]] car ((paper)vomit) (broken(glass)) [[] (rotten) fence (dirty)
Beberapa tanda kurung di sini tidak tertandingi; itu hanya umpan. Yang kami pedulikan adalah set kurung yang cocok.
Tempat sampah adalah string yang dimulai dengan [
dan diakhiri dengan ]
, dan dengan tanda kurung dan tanda kurung yang cocok secara internal. Misalnya, []
dan [[](dust)[]]
merupakan tong sampah di string di atas.
Sebuah kantong sampah adalah string dimulai dengan (
dan diakhiri dengan )
, dan dengan kurung cocok internal dan tanda kurung. Misalnya, (dust)
adalah kantong sampah di tali di atas.
Ada kemungkinan beberapa kantong sampah sudah berada di tong sampah. Namun, setidaknya satu akan ditinggalkan, dan kita perlu memindahkan kantong sampah sehingga mereka semua berada di dalam tong sampah. Khususnya, untuk setiap kantong sampah yang saat ini tidak berada di dalam tempat sampah (yaitu substring tempat sampah itu), kita perlu menghapusnya dari lokasi saat ini di string, dan memasukkannya ke lokasi yang berada di dalam tempat sampah sebagai gantinya .
Ada aturan tambahan di sini. Karena kami tidak ingin menghabiskan terlalu banyak uang untuk pengumpul sampah, dan rute mereka membawa mereka sepanjang jalan dari kanan ke kiri, kami ingin memindahkan setiap kantong sampah ke kiri (kriteria yang paling penting, dengan asumsi kami harus memindahkannya di semua) dan jarak sesingkat mungkin (selama itu dipindahkan ke kiri). Jadi misalnya, satu-satunya keluaran yang benar untuk
[can1](bag)[can2]
adalah
[can1(bag)][can2]
(memindahkan tas hanya satu karakter ke kiri). Selain itu, tas harus tetap dalam urutan relatif yang sama:
[can](bag1)(bag2)
harus menjadi
[can(bag1)(bag2)]
(Yaitu Anda tidak dapat menempatkan (bag2)
di sebelah kiri (bag1)
.)
Klarifikasi
- Tidak akan ada kantong sampah di sebelah kiri tempat sampah paling kiri; akan selalu memungkinkan untuk membuang semua sampah dengan memindahkannya ke kiri.
- Akan selalu ada setidaknya satu tas untuk bergerak. Mungkin ada lebih dari satu.
- Tidak akan pernah ada tempat sampah di dalam kantong sampah (kaleng terlalu berharga untuk dibuang begitu saja).
- Jika tas sudah ada di dalam kaleng, biarkan saja.
- Tidak apa-apa untuk input dan output berbeda di spasi spasi (termasuk baris baru).
Contoh:
Memasukkan:
[[](dust)[]] car ((paper)vomit) (broken(glass)) [[] (rotten) fence (dirty)
Keluaran:
[[](dust)[]((paper)vomit)(broken(glass))] car [[(rotten)(dirty)] fence
Memasukkan:
[]] (unusable) door (filthy) car
Keluaran:
[(unusable)(filthy)]] door car
sumber
Jawaban:
JavaScript (ES6),
263228209205184177173162 byteSetiap bantuan dengan kode / ekspresi reguler sangat dihargai.
Fungsi anonim; mengambil satu
String
parameters
,, dan mengembalikan output./\[\[][\w()]*\[]]|\[]/g
cocok dengan tong sampah dengan kantong sampah bersarang, namun saya tidak berpikir itu bisa memeriksa kurung seimbang di dalam kantong sampah jika diperlukan.sumber