Kumpulkan sampah


9

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


5
Tutup pemilih, dapatkah Anda menjelaskan apa yang Anda temukan tidak jelas? Pos akan sulit diperbaiki tanpa panduan eksplisit tentang apa yang salah dengannya.

@ ais523 Saya tidak mengerti apa tugasnya. Memang itu mungkin karena saya lelah tetapi kata-kata saat ini tidak masuk akal
Blue

1
Pada dasarnya, untuk setiap substring yang ada di dalam tanda kurung tetapi tidak di dalam tanda kurung, pindahkan ke kiri sampai itu juga di dalam tanda kurung.

Karena masalah ini berulang kali ditutup dan dibuka kembali, saya menyuntingnya dengan pemahaman saya tentang masalahnya. Semoga saya tidak mengubah masalah dalam proses.

@ ais523 Ini tidak masalah bagi saya. Terima kasih banyak atas semua pengeditan Anda.
Ewan Delanoy

Jawaban:


3

JavaScript (ES6), 263 228 209 205 184 177 173 162 byte

Setiap bantuan dengan kode / ekspresi reguler sangat dihargai.

f=s=>s.match(t=/\[\[][\w()]*\[]]|\[]/g,g=/\([\w()]*\)/g,i=0,u=s.split(t).filter(e=>e)).map(e=>e.substr(0,e.length-1)+u[i].match(g).join``+`]`+u[i++].replace(g,``)).join``

Fungsi anonim; mengambil satu Stringparameter s,, 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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.