Điều này dựa trên một thử thách đã bị xóa trước đó của tôi có cùng tên
Giới thiệu
Bạn được giao nhiệm vụ viết một chương trình trả về một truthy hoặc falsey giá trị dựa trên nếu đầu vào có tất cả XML giống như mình 1 thẻ một cách thích hợp mở ra và đóng lại và theo thứ tự đúng. Hãy xem xét những điều sau đây như đầu vào:
<Apple>
Điều này sẽ trả về giá trị falsey vì thẻ không được đóng chính xác. Điều này:
<Apple></Apple>
Ngược lại trả về một giá trị trung thực vì nó được đóng chính xác. Chương trình cũng nên kiểm tra các thẻ lồng nhau để đảm bảo chúng ở đúng vị trí. Ví dụ: lấy cái này làm đầu vào:
<mango><Apple></mango></Apple>
Tất cả các thẻ được đóng chính xác, nhưng không theo đúng thứ tự . Chương trình của bạn phải kiểm tra phân cấp thẻ chính xác và lồng nhau.
Các định nghĩa
Hãy để tôi xác định một vài điều trước khi tôi đi vào các quy tắc và giả định.
Nhãn
Thẻ kiểu XML cơ bản. Ví dụ : <Apple>
. Họ có thể có nhiều nhất, một không gian hàng đầu và dấu (hoặc nếu không thì không hợp lệ và chim ưng), < Apple >
và <Apple>
cũng vậy. Những thẻ này cũng có thể chứa các thuộc tính như foo="bar"
(với dấu ngoặc kép cần tăng gấp đôi, hoặc không hợp lệ khác và falsey) , và tên thuộc tính chỉ có thể chứa bất kỳ ký tự chữ và số hoặc _
, :
, -
, và .
. Tên thuộc tính cũng không yêu cầu giá trị thuộc tính và các giá trị có thể chứa bất cứ thứ gì ngoại trừ "
trước dấu ngoặc kép đóng. Thẻ đóng không được chứa các thuộc tính và không có thẻ nào có dòng mới trong đó.
Tên thẻ
Tên thẻ là tên của thẻ. Ví dụ: <Apple>
tên thẻ là Apple
. Tên thẻ có thể chứa các ký tự giống như tên thuộc tính và phân biệt chữ hoa chữ thường. Điều này có nghĩa <Apple>
là không <apple>
.
Thẻ tự đóng
Một thẻ thông thường tự đóng như vậy ( <Apple />
hoặc <Apple/>
chúng giống nhau). Không gian giữa dấu gạch chéo và tên thẻ được cho phép.
Văn bản thô
Một chuỗi các ký tự có thể chứa bất cứ thứ gì và không được đặt trong <
và >
.
Thẻ "đơn giản"
Thẻ mở, đóng hoặc tự đóng.
Quy tắc
- Đầu ra có thể được trả lại hoặc in, và đầu vào có thể được thực hiện theo bất kỳ cách nào bạn muốn
- Đầu vào là một chuỗi, bao gồm một trong hai thẻ, văn bản thuần túy hoặc cả hai
Chương trình của bạn có thể là một chức năng hoặc toàn bộ chương trình làm việc
Văn bản thuần túy có thể ở bất cứ đâu; nếu đầu vào chỉ bao gồm văn bản thuần túy, chương trình sẽ trả về giá trị trung thực.
Việc nhận dạng các thẻ lồng nhau là cần thiết cho chương trình. Nếu một thẻ được lồng trong một thẻ, thẻ đó phải được đóng trước khi đóng cha mẹ, giống như XML thông thường hoặc nếu không thì phải trả về giá trị falsey
Giả định
- Bạn có thể cho rằng đầu vào sẽ luôn là một hoặc nhiều thẻ "đơn giản"
- Bạn có thể cho rằng đầu vào sẽ luôn tuân theo định dạng cho các thẻ được xác định ở trên
Các trường hợp thử nghiệm
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>
Sự thật
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>
Chấm điểm
Đây là mã golf , vì vậy mã ngắn nhất tính bằng byte sẽ thắng. Sơ hở tiêu chuẩn bị cấm như bình thường.
1 Lưu ý : Đây không phải là XML thực, mà là XML giả với các quy tắc khác nhau cho thử thách. Tên thẻ và thuộc tính khác với đặc điểm kỹ thuật.
< : : :><:/><: :=":=:" ::></:>< /:>
?