Этот вызов был опубликован как часть конкурс LotM апреле 2018 года.
Brain-Flak - это язык тьюринга и тарпита, который приобрел довольно большую известность здесь, на PPCG. Память о языке состоит из двух стеков, а «скрытый» третий стек был обнаружен на Wh е в мастере , что приводит к некоторым интересным новым способам мышления программы Brain-зенитной.
Итак, как насчет того, чтобы дать этому бедному скрытому третьему стеку больше видимости? Давайте создадим язык, в котором третий стек получит признание, которого он заслуживает! Здесь я представляю вам Третий Flak .
Язык
В Third-Flak есть только один стек, называемый третьим стеком. Операторы работают на третьем стек таким же образом , что они делают в Брейн-Flak, но здесь нет []
, {}
, <>
nilads и не {...}
монады (так только допустимые символы в программе третьего Flak являются ()[]<>
). Вот что делает каждый оператор (будут приведены примеры, представляющие третий стек со списком, где последний элемент является вершиной стека):
()
является единственным двухсимвольным оператором в Third-Flak. Увеличивает вершину третьего стека на 1. Пример:[1,2,3]
→[1,2,4]
(
,[
,<
: Все открытия скобки, которые не охвачены в предыдущем случае нажать0
на третий стек. Пример:[1,2,3]
→[1,2,3,0]
)
выталкивает два элемента из третьего стека и возвращает их сумму. Пример:[1,2,3]
→[1,5]
]
извлекает два элемента из третьего стека и возвращает результат вычитания первого из второго. Пример:[1,2,3]
→[1,-1]
>
выталкивает элемент из третьего стека. Пример[1,2,3]
→[1,2]
А вот и другие правила языка:
В начале выполнения третий стек содержит только один 0.
Запрещено иметь пустой
[]
или<>
внутреннюю программу (в любом случае они будут noops, если следовать семантике Third-Flak, но на самом деле они имеют другое значение в Brain-Flak, которое здесь невозможно воссоздать).Круглые скобки всегда должны быть сбалансированы, за исключением того факта, что завершающие закрывающие скобки в конце программы могут отсутствовать. Например,
[()<(()
допустимая программа третьего флага (и третий стек в конце программы будет[1,0,1]
).Программа может содержать только шесть разрешенных символов
()[]<>
. Программы гарантированно не являются пустыми.
Примечание: предыдущие правила подразумевают, что вам не придется сталкиваться с ситуациями, когда вам нужно выскочить из пустого стека.
Соревнование
Проще, напиши интерпретатор для Third-Flak. Ваша программа должна принимать в качестве входных данных программу третьего флага и возвращать в качестве выходных данных состояние третьего стека в конце программы.
Ваш выходной формат является гибким до тех пор, пока можно однозначно прочитать из него состояние третьего стека и одно и то же число всегда кодируется одинаково (это просто способ сказать, что любой выходной формат не является явным способом пытаться обмануть нормально).
Ваш выходной выбор может ограничить диапазон номеров, которыми вы можете управлять, если это не упрощает задачу (поскольку это будет лазейка по умолчанию ).
Контрольные примеры
Для каждого тестового случая первая строка является входной, а вторая строка выходным стеком, представленным как разделенный пробелами список чисел, где вершина стека является последним элементом.
[()<(()
0 1 0 1
[((((()()()()()))
0 0 0 5
((([()][()][()])))
-3
[<<(((()()()())(((((
0 0 0 0 0 4 0 0 0 0 0
[()]<(([()])><[()]
-1 0 -1
(())(()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(())(()()())(())(()()()()())(())(())(())(())(()()()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(())(()()())(())(()()()()())(())(())(())(())(())(())(()())(())(())(())(()())(()()()())(())(()()()()())(()())(()())(()())(()()())(())(()())(())(()()()()())(()())(()()()()())(())(())(())(())(())(()())(())(())(())(()()()()())(())(())(()()()()())(())(())(()()()()())(())(())(()())(())(()())(())(()())(())(()())(())(()())(()())(()())(()())(()())(()())(()())(()())(())(()()()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(())(()()())(())(())(()()())(()())(())(()()()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(())(())(())(()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(()()())(())(()()())(())(())(())(()())(()()())(()())(())(()()()()())(()())(())(()()())(())(()()()()())(())(())(())(()()())(())(())(())(()())(())(()())(()()()())(())(())(()()()()())(()())(()())(())(()()())(())(())(())(())(()()())(()())(())(())(()()()()())(())(())(()()()()())(())(())(()()()()())(())(())(()())(())(()())(())(()())(())(()())(()())(()())(()())(())(()()()()())(()())(())(()()())(())(()()()()())(()()()()())(())(()()())(())(())(()())(())(()()()()())(())(()()()()())(())(())(())(()()()()())(())(())(()())(())(()())(())(()())(())(()())(())(()())(()())(()())(()())(())(()()()()())(()())(())(()()())(())(())(()())(())(()()()()())(()())(()()()()())(())(()()())(())(())(()()()()())(())(()()()()())(())(())(())(()())(())(()()()()())(())(())(()())(())(()())(())(()())(()())(()())(()())(())(()()()()())(()())(())(()()()()())(())(()()())(())(())(()())(())(()()()()())(()())(()()()()())(())(()()())(())(())(())(()())(()()()())(())(())(()())(())(()()()()())(())(())(()()()()())(())(())(()()()()())(())(())(()())(())(()())(())(()())(())(()())(())(()())(()())(()())(()())(()())(()())(())(()()())(())(())(()())(())(()()()()())(()())(()()()()())(()()())(())(())(()())(())(())(()()()()())(()()()())(()())(()())(()()())(())(()())(())(()()()()())(()())(()()()()())(())(())(())(()()()())(()()()())(()()
718 2
e
находится здесь .
[()]
нарушается правило, согласно которому нам не нужно беспокоиться о выталкивании из пустого стека