นี่เป็นพื้นฐานของความท้าทายที่ถูกลบไปแล้วของฉันก่อนหน้านี้ที่มีชื่อเดียวกัน
บทนำ
คุณได้รับมอบหมายให้เขียนโปรแกรมที่ส่งคืนค่าความจริงหรือความเท็จตามหากอินพุตมีแท็กXML เหมือน1 ทั้งหมดที่เปิดและปิดอย่างเหมาะสมและอยู่ในลำดับที่ถูกต้อง พิจารณาสิ่งต่อไปนี้เป็นอินพุต:
<Apple>
นี่จะคืนค่าเท็จเนื่องจากแท็กปิดไม่ถูกต้อง นี้:
<Apple></Apple>
ในทางตรงกันข้ามจะส่งกลับค่าความจริงเพราะมันถูกปิดอย่างถูกต้อง โปรแกรมควรตรวจสอบแท็กที่ซ้อนกันเพื่อให้แน่ใจว่าอยู่ในตำแหน่งที่ถูกต้อง ตัวอย่างเช่นใช้สิ่งนี้เป็นอินพุต:
<mango><Apple></mango></Apple>
แท็กทั้งหมดจะถูกปิดอย่างถูกต้องแต่ไม่ได้อยู่ในลำดับที่ถูกต้อง โปรแกรมของคุณต้องตรวจสอบลำดับชั้นของแท็กและการซ้อนที่ถูกต้อง
คำนิยาม
ขอให้ฉันนิยามบางสิ่งก่อนที่ฉันจะเข้ามาในกฎและข้อสมมติฐาน
แท็ก
แท็กสไตล์ XML พื้นฐาน ตัวอย่างเช่น<Apple>
. พวกเขาสามารถมีได้มากที่สุดหนึ่งพื้นที่ชั้นนำและต่อท้าย (หรืออื่น ๆ มันไม่ถูกต้องและเป็นเท็จ) ดังนั้น< Apple >
และ<Apple>
เหมือนกัน แท็กเหล่านี้สามารถมีคุณลักษณะเช่นfoo="bar"
(กับคำพูดคู่ต้องหรืออื่น ๆ ที่ไม่ถูกต้องและ falsey)และชื่อแอตทริบิวต์เท่านั้นที่สามารถมีตัวอักษรและตัวเลขใด ๆ หรือ_
, :
, และ-
.
ชื่อแอ็ตทริบิวต์ยังไม่ต้องการค่าแอททริบิวต์และค่าสามารถมีอะไรก็ได้ยกเว้น"
ก่อนปิดการเสนอราคาแบบปิดคู่ แท็กปิดจะต้องไม่มีแอตทริบิวต์และไม่มีแท็กที่ควรมีบรรทัดใหม่
ชื่อแท็ก
ชื่อแท็กเป็นชื่อของแท็ก ยกตัวอย่างเช่นชื่อแท็ก<Apple>
Apple
ชื่อแท็กสามารถมีอักขระเหมือนกับชื่อแอตทริบิวต์และคำนึงถึงตัวอักษรพิมพ์เล็ก - ใหญ่ วิธีนี้<Apple>
คือไม่ได้ <apple>
แท็กปิดตัวเอง
แท็กปกติที่ปิดตัวเองเช่น<Apple />
หรือ<Apple/>
(พวกเขาเหมือนกัน) อนุญาตให้มีช่องว่างระหว่างเครื่องหมายทับและชื่อแท็ก
ข้อความธรรมดา
สตริงของตัวอักษรที่สามารถมีอะไรและไม่ได้อยู่ในและ<
>
แท็ก "ง่าย"
ไม่ว่าจะเป็นแท็กเปิดปิดหรือปิดตัวเอง
กฎระเบียบ
- เอาต์พุตอาจถูกส่งคืนหรือพิมพ์และอินพุตอาจถูกใช้ในแบบที่คุณต้องการ
- อินพุตเป็นสตริงซึ่งประกอบด้วยแท็กข้อความธรรมดาหรือทั้งสองอย่าง
โปรแกรมของคุณอาจเป็นฟังก์ชั่นหรือโปรแกรมทำงานทั้งหมด
ข้อความธรรมดาสามารถอยู่ได้ทุกที่ หากอินพุตประกอบด้วยข้อความล้วนเท่านั้นโปรแกรมควรส่งคืนค่าความจริง
จำเป็นต้องมีการรับรู้ของแท็กที่ซ้อนกันสำหรับโปรแกรม หากแท็กซ้อนอยู่ในแท็กแท็กที่ซ้อนกันนั้นจะต้องปิดก่อนที่จะปิดพาเรนต์เช่นเดียวกับ XML ปกติมิฉะนั้นควรส่งคืนค่าเท็จ
สมมติฐาน
- คุณสามารถสมมติว่าการป้อนข้อมูลจะเป็นแท็ก "แบบง่าย" อย่างน้อยหนึ่งรายการ
- คุณสามารถสันนิษฐานได้ว่าอินพุตจะเป็นไปตามรูปแบบสำหรับแท็กที่กำหนดไว้ด้านบนเสมอ
กรณีทดสอบ
Falsey
<apple>
<apple></Apple>
<apple></mango>
<apple><mango>
<a><b></a></b>
Text<ul><li></li><ul />
<pear attr=foo></pear attr=foo>
<Ketchup flavor=spicy></Ketchup>
<Ap ple></Apple>
Truthy
Text
<Apple />
<Apple></Apple>
< Apple ></ Apple>
<mango><Apple/></mango>
<mango>Text<div class="bar">More text \o/</div></mango>
<food group="fruit">Fruits:<orange :fruit-variety="clementine" /><pear _fruit.type="asian" /></food>
<example foo="abcdefghijklmnopqrstuvwxyz1234567890-/:;()$&@.,?!'" noValue>Any characters allowed! (0.0)</example>
เกณฑ์การให้คะแนน
นี่คือโค้ดกอล์ฟดังนั้นโค้ดที่สั้นที่สุดในหน่วยไบต์ชนะ ช่องโหว่มาตรฐานเป็นสิ่งต้องห้ามตามปกติ
1 หมายเหตุ : นี่ไม่ใช่ XML จริง แต่เป็นหลอก XML ด้วยกฎที่แตกต่างกันสำหรับความท้าทาย ชื่อแท็กและแอตทริบิวต์แตกต่างจากข้อกำหนด
< : : :><:/><: :=":=:" ::></:>< /:>
?