Это основано на моем предыдущем удаленном вызове с тем же именем
Вступление
Перед вами стоит задача написать программу, которая возвращает истинное или ложное значение, основываясь на том, что вход имеет все свои XML-подобные теги 1, соответственно открытые и закрытые и в правильном порядке. Рассмотрим следующее как ввод:
<Apple>
Это вернет значение Falsey, потому что тег не закрыт правильно. Эта:
<Apple></Apple>
Напротив, возвращает истинное значение, потому что оно закрыто правильно. Программа также должна проверять вложенные теги, чтобы убедиться, что они находятся в правильном положении. Например, возьмите это как ввод:
<mango><Apple></mango></Apple>
Все теги закрыты правильно, но не в правильном порядке . Ваша программа должна проверить правильность иерархии тегов и вложенности.
Определения
Позвольте мне определить несколько вещей, прежде чем я войду в правила и предположения.
Тег
Базовый тег в стиле XML. Например: <Apple>
. Они могут иметь в лучшем случае , один передние и заднее пространство (или же это недопустимое и falsey), так < Apple >
и <Apple>
то же. Эти метки могут также содержать атрибуты , такие как foo="bar"
(с требуемыми двойными кавычками, либо недействительным и falsey) , и имя атрибута может содержать только любой алфавитно - цифровой символ или _
, :
, -
, и .
. Имена атрибутов также не требуют значения атрибута, и значения могут содержать что угодно, кроме "
закрывающей двойной кавычки. Закрывающий тег не должен содержать атрибутов, и ни в одном теге не должно быть новых строк.
Название тэга
Имена тегов - это имена тегов. Например, <Apple>
имя тега 's Apple
. Имена тегов могут содержать те же символы, что и имена атрибутов, и чувствительны к регистру. Это означает , что <Apple>
это не <apple>
.
Самозакрывающийся тег
Обычный тег, который закрывает себя, такой как <Apple />
или <Apple/>
(они одинаковы). Пробел между косой чертой и именем тега разрешен.
Простой текст
Строка символов, которая может содержать что угодно и не заключена в <
и >
.
«Простой» тег
Либо открывающий, закрывающий, либо самозакрывающийся тег.
правила
- Вывод может быть возвращен или распечатан, а ввод может быть принят любым способом
- Ввод - это строка, состоящая из тегов, простого текста или обоих
Ваша программа может быть функцией или целой рабочей программой
Обычный текст может быть где угодно; если ввод состоит только из простого текста, программа должна вернуть истинное значение.
Для программы требуется распознавание вложенных тегов. Если тег вложен в тег, этот вложенный тег должен быть закрыт до закрытия родительского элемента, как обычный XML, иначе должно быть возвращено значение Falsey.
Предположения
- Вы можете предположить, что ввод всегда будет одним или несколькими «простыми» тегами
- Вы можете предположить, что ввод всегда будет следовать формату для тегов, определенных выше
Тестовые случаи
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 с другими правилами для вызова. Имена тегов и атрибутов отличаются от спецификации.
< : : :><:/><: :=":=:" ::></:>< /:>
?