8
ทำให้จูบงูยืด
งูยืดมีลักษณะบางอย่างเช่นนี้ <||=|||:)~ แต่ละลำดับของแถบแนวตั้ง ( |) ในงูที่ยืดออกซึ่งรู้จักกันในชื่อส่วนยืดนั้นสามารถขยายความกว้างเป็นสองเท่าแยกจากกันและถูกวาดด้วยเครื่องหมายสแลช ( /, \) เมื่อขยายออก งูข้างต้นโดยเฉพาะมีสองส่วนที่ยืดได้ทำให้มีสี่ท่าที่เป็นไปได้: <||=|||:)~ </\/\=|||:)~ <||=/\/\/\:)~ </\/\=/\/\/\:)~ รูปแบบทั่วไปของงูถ่างในท่ายืดน้อยที่สุดถูกกำหนดโดยregex นี้ : <(\|+=)*\|+:\)~ ซึ่งสามารถระบุไว้ในคำว่า: <ตามด้วยหมายเลขของลำดับใด ๆ|'s เข้าร่วมกับอาการตามมาด้วย=:)~ ดังนั้น<|:)~และ<||:)~และ<|=|:)~และ<|=|=||=|||||=||:)~เป็นงูยืด แต่<=:)~และ<=|:)~และ<||=:)~และ<|==||:)~ไม่ใช่ ~(:|||=||>งูยืดยังสามารถเผชิญซ้ายแทนขวาเช่น แบบฟอร์มเหมือนกันเพียงมิร์เรอร์ ท้าทาย เขียนโปรแกรมที่ใช้ในสตริงบรรทัดเดียวของงูยืดสองตัวที่หันเข้าหากันโดยมีช่องว่างจำนวนหนึ่งอยู่ระหว่างนั้น งูทั้งสองจะอยู่ในท่ายืดน้อยที่สุด (แถบแนวตั้งทั้งหมดไม่มีสแลช) สตริงจะเริ่มต้นด้วยหางของงูที่หันไปทางขวาและจบลงด้วยหางของงูที่หันไปทางซ้าย ตัวอย่างเช่นต่อไปนี้เป็นข้อมูลป้อนเข้าที่มีห้าช่องว่างระหว่างงู: <|=||:)~.....~(:||||> ฉันกำลังใช้เครื่องหมายจุด ( .) แทนอักขระช่องว่างจริงเพื่อความชัดเจน ช่องว่างระหว่างงูยังเป็นอินพุตที่ถูกต้อง: <|=||:)~~(:||||> เราพูดว่างูกำลังจูบกันเมื่อลิ้นของพวกมันสัมผัสเช่นนี้ โปรแกรมของคุณต้องการที่จะขยายการรวมกันของส่วนขยายของทั้งสองของงูเช่นงูบางอย่างที่มีจำนวนน้อยที่สุดของช่องว่างระหว่างพวกเขาไปได้ (โดยไม่ทับซ้อนกัน) เช่นดังกล่าวว่างูมีความใกล้เคียงกับการจูบที่เป็นไปได้ หางทั้งสองของงูนั้นได้รับการแก้ไข แต่หัวและลำตัวของมันสามารถเคลื่อนที่ได้ - เหมาะสำหรับงูที่หันไปทางขวา, ซ้ายสำหรับงูที่หันไปทางซ้าย - …