Фон
Stack Cats - это обратимый эзотерический язык, созданный Мартином Эндером. Каждая команда в Stack Cats является либо обратной к себе (представленной в виде симметричного символа, например -_:T|
), либо имеет свою обратную команду (представленную в виде зеркального отображения, например ()
{}
[]
<>
). Stack Cats имеет строгое синтаксическое требование, чтобы вся программа была зеркальным отражением самой себя. Обратите внимание, что это означает, что любая действующая программа Stack Cats является естественной амбиграммой зеркального отображения .
Вот весь набор команд Stack Cats:
- Self-симметрична:
!*+-:=ITX^_|
- Симметричные пары:
()
{}
[]
<>
\/
Любые другие символы недопустимы; любой ввод, имеющий символ, не входящий в набор символов, должен выводить false.
Язык имеет дополнительное ограничение , что ()
и {}
пары должны быть всегда сбалансированы, но для простоты, вы не должны проверить для этого условия.
Ниже приведены некоторые примеры правильной программы Stack Cats (опять же, обратите внимание, что вы не проверяете наличие сбалансированных паренов):
{[+]==[+]}
[)>^<(]
({T)}|{(T})
<(*]{[:!-_:>}<[<)*(>]>{<:_-!:]}[*)>
Это не:
b<+>d
())(
({[<++<]})
Вызов
Напишите программу или функцию, которая определяет, является ли данная строка допустимой программой Stack Cats. Ваш код также должен быть естественной амбиграммой зеркального отображения , что означает:
- Ваш код должен быть зеркальным отражением самого себя.
- В вашем коде может быть одна или несколько новых строк, если весь код, отображаемый естественным образом, является зеркальным отражением самого себя.
- Вы можете опустить или добавить конечные пробелы в каждой строке, так как это не меняет отображение.
- Символы табуляции не допускаются, так как они имеют некоторую неопределенность на дисплее.
Примечание: ваш код не обязательно должен быть действующей программой Stack Cats; он может содержать определенные дополнительные символы, которые не разрешены в Stack Cats. (См. Полный список ниже.)
Например, следующие две программы являются симметричными (и, следовательно, допустимым представлением ), а третья - нет:
({bTd})
[<q|p>]
({bTd})
IXI
({bTd})
IXI
- Что касается "зеркальной симметрии", рассматривается только симметрия в стиле стека Cats (например,
({IH})
это недопустимое представление, даже если оно имеет зеркальную симметрию). - Ваш код может содержать только эти наборы символов плюс символ новой строки:
- Самосимметричный: пробел (
0x20
) +!"'*+-.8:=AHIMOTUVWXY^_ovwx|
- Симметричные пары:
()
/\
<>
[]
bd
pq
{}
- Самосимметричный: пробел (
Набор символов выбран строго симметричным или самосимметричным при отображении в виде кода на SE.
Вход и выход
Диапазон ввода - любая однострочная строка печатных символов ASCII .
Вы можете принять входные данные в виде строки, списка символов или списка значений ASCII.
Вы можете выбрать для вывода либо:
- Любая из истинных / ложных ценностей, определенных языком по вашему выбору
- Фактические значения результата могут отличаться между входами (например, выход 1 для достоверного входа и 2 для другого достоверного).
- Обмен правдивыми и ложными значениями не допускается.
- Любые два постоянных значения для true / false соответственно
- В этом случае результирующие значения должны быть точно одним из двух постоянных значений.
Вы должны указать свой метод ввода и выходные значения в вашем представлении.
Условие победы
Это код-гольф , поэтому побеждают младшие байты на каждом языке.
Примечания
- Стандартные лазейки , как обычно, запрещены.
- Конечно, вы можете решить эту проблему в Stack Cats, но есть вероятность, что вы не можете использовать флаг, который позволяет уменьшить размер вашего кода наполовину. И это серьезно сложно подобрать язык: P
#
запрещено?