รวบรวมถังขยะ


9

คุณกำลังมองไปที่ถนนและมีบางคนทิ้งขยะ! คุณต้องเขียนโปรแกรมเพื่อช่วยแก้ไขปัญหาโดยการทิ้งขยะลงในถังขยะ

งาน

avenue ประกอบด้วยสตริงของอักขระ ASCII ที่พิมพ์ได้เช่น:

[[](dust)[]] car ((paper)vomit) (broken(glass)) [[] (rotten) fence (dirty)

วงเล็บบางตัวที่นี่ไม่มีที่เปรียบ นั่นเป็นเพียงล่อ สิ่งที่เราใส่ใจคือชุดของวงเล็บที่ตรงกัน

ถังขยะเป็นสตริงที่เริ่มต้นด้วย[และลงท้ายด้วย]และมีวงเล็บจับคู่ภายในและวงเล็บ ตัวอย่างเช่น[]และ[[](dust)[]]เป็นถังขยะในสตริงด้านบน

ถุงขยะเป็นสตริงที่เริ่มต้นด้วย(และลงท้ายด้วย)และมีวงเล็บจับคู่ภายในและวงเล็บ ตัวอย่างเช่น(dust)เป็นถุงขยะในสตริงด้านบน

เป็นไปได้ว่าถุงขยะบางส่วนอยู่ในถังขยะแล้ว อย่างไรก็ตามจะมีอย่างน้อยหนึ่งรายการที่ถูกทิ้งไว้และเราจำเป็นต้องย้ายถุงขยะเพื่อให้พวกเขาทั้งหมดอยู่ในถังขยะ โดยเฉพาะสำหรับถุงขยะแต่ละถุงที่ไม่ได้อยู่ในถังขยะในปัจจุบัน (เช่นซับสตริงของถังขยะนั้น) เราต้องลบมันออกจากตำแหน่งปัจจุบันในสตริงและแทรกลงในสถานที่ที่อยู่ในถังขยะแทน .

มีกฎเพิ่มเติมที่นี่ เนื่องจากเราไม่ต้องการใช้เงินมากเกินไปกับนักสะสมขยะและเส้นทางของพวกเขาพาพวกเขาไปตามถนนจากทางซ้ายไปขวาเราต้องการย้ายถุงขยะแต่ละใบไปทางซ้าย (เกณฑ์ที่สำคัญที่สุดสมมติว่าเราต้องย้ายที่ ทั้งหมด) และระยะทางที่สั้นที่สุดเท่าที่จะทำได้ (ตราบเท่าที่มันถูกย้ายไปทางซ้าย) ตัวอย่างเช่นเอาต์พุตที่ถูกต้องเท่านั้นสำหรับ

[can1](bag)[can2]

คือ

[can1(bag)][can2]

(เลื่อนถุงไปทางซ้ายหนึ่งตัวอักษร) นอกจากนี้ถุงต้องอยู่ในลำดับที่สัมพันธ์กัน:

[can](bag1)(bag2)

ต้องเป็น

[can(bag1)(bag2)]

(เช่นคุณไม่สามารถวาง(bag2)ที่ด้านซ้ายของ(bag1))

ชี้แจง

  • จะไม่มีถุงขยะอยู่ทางซ้ายของถังขยะซ้ายสุด มันจะเป็นไปได้ที่จะสามารถทิ้งขยะทั้งหมดด้วยการย้ายไปทางซ้าย
  • จะต้องมีอย่างน้อยหนึ่งถุงที่จะย้าย อาจมีมากกว่าหนึ่ง
  • จะไม่มีถังขยะอยู่ในถุงขยะ (กระป๋องมีค่าเกินกว่าที่จะทิ้งไป)
  • หากกระเป๋าอยู่ในกระป๋องแล้วให้ทิ้งไว้คนเดียว
  • ไม่เป็นไรสำหรับอินพุตและเอาต์พุตจะแตกต่างกันตามช่องว่างต่อท้าย

ตัวอย่าง:

  • การป้อนข้อมูล: [[](dust)[]] car ((paper)vomit) (broken(glass)) [[] (rotten) fence (dirty)

    เอาท์พุท: [[](dust)[]((paper)vomit)(broken(glass))] car [[(rotten)(dirty)] fence

  • การป้อนข้อมูล: []] (unusable) door (filthy) car

    ผลผลิต: [(unusable)(filthy)]] door car


5
ปิดผู้ออกเสียงลงคะแนนคุณสามารถอธิบายสิ่งที่คุณกำลังมองหาไม่ชัดเจน โพสต์จะแก้ไขได้ยากโดยไม่มีคำแนะนำที่ชัดเจนว่ามีอะไรผิดปกติ

@ ais523 ฉันไม่เข้าใจว่าภารกิจคืออะไร จริงอยู่ที่อาจเป็นเพราะฉันเหนื่อย แต่ถ้อยคำปัจจุบันไม่ค่อยสมเหตุสมผล
บลู

1
โดยทั่วไปสำหรับแต่ละสตริงย่อยที่อยู่ในวงเล็บ แต่ไม่ได้อยู่ในวงเล็บให้เลื่อนไปทางซ้ายจนกว่าจะอยู่ในวงเล็บ

เนื่องจากปัญหานี้ปิดและเปิดซ้ำแล้วซ้ำอีกฉันจึงแก้ไขด้วยความเข้าใจถึงปัญหา หวังว่าฉันจะไม่เปลี่ยนปัญหาในกระบวนการ

@ ais523 นี่เป็นเรื่องปกติสำหรับฉัน ขอบคุณมากสำหรับการแก้ไขทั้งหมดของคุณ
Ewan Delanoy

คำตอบ:


3

JavaScript (ES6), 263 228 209 205 184 177 173 162 ไบต์

ความช่วยเหลือใด ๆ เกี่ยวกับโค้ด / นิพจน์ทั่วไปนั้นได้รับการชื่นชมอย่างมาก

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``

ฟังก์ชั่นที่ไม่ระบุชื่อ รับหนึ่งStringพารามิเตอร์sและส่งคืนเอาต์พุต

/\[\[][\w()]*\[]]|\[]/g จับคู่ถังขยะกับถุงขยะซ้อนกัน แต่ฉันไม่คิดว่าจะสามารถตรวจสอบวงเล็บเหลี่ยมที่สมดุลภายในถุงขยะหากจำเป็น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.