Ваша задача состоит в том, чтобы превратить вводимый текст в код, который будет выводить текст.
Учебник взят здесь с разрешения здесь
Brain-Flak имеет два стека, известные как «левый» и «правый». Активный стек начинается слева. Если выгрузится пустой стек, он вернет 0. Вот и все. Других переменных нет. Когда программа запускается, каждый аргумент командной строки помещается в активный стек.
Единственными действительными символами в программе Brain-Flak являются ()[]{}<>
, и они всегда должны быть сбалансированы. Есть два типа функций: Nilads и монады . Nilad это функция , которая принимает 0 аргументов. Вот все нилады:
()
Оценивает до одного.[]
Оценивает высоту текущего стека.{}
Поп активный стек. Оценивает до совпавшего значения.<>
Переключить активный стек. Оценивает до нуля.
Они объединяются вместе, когда они оцениваются. Так что, если у нас есть «3» поверх активного стека, этот фрагмент:
()(){}
оценил бы, 1 + 1 + active.pop()
что оценил бы до 5.
Монады берут один аргумент - кусок кода Brain-Flak. Вот все монады:
(n)
Нажмите 'n' в активном стеке.[n]
Оценивается как отрицательное 'n'{foo}
Пока ноль не на вершине стека, сделайте foo.<foo>
Выполните foo, но оцените его как 0.
Эти функции также будут возвращать значение внутри них, поэтому
(()()())
Будет толкать 3 но
((()()()))
Буду нажимать 3 раза .
{}
Будет оценивать на сумму всех прогонов. Так что, если бы у нас было 3 и 4 на вершине стека:
{{}}
оценил бы как 7.
Когда выполнение программы завершено, каждое значение, оставленное в активном стеке, печатается с новой строкой между. Значения в другом стеке игнорируются.
правила
- Вы можете предположить, что Brain-Flak запускается с ascii out. (
-A
) - Мозговой код не должен требовать ввода
- Все стандартные правила применяются
- Код должен выполняться в течение 1 минуты для любого ввода до 1024 байтов на TIO. (Если нет выхода TIO, предоставьте переводчика, и я запусту его на моей машине (моя машина должна быть в состоянии приблизиться к TIO)).
- Вы должны поддерживать произвольную длину ввода.
- Вы можете взять входные данные из файла.
- Оптимизация для тестовых случаев не допускается
- Требуется детерминированный вывод
- Программы не должны быть чистыми в стеке
Контрольные примеры (попробуйте свой код на них, фактические тексты оценки будут опубликованы через 1-2 недели после публикации заявки)
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
The meaning of brain-flak is to flak your brain with pain.
`1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?
To be, or not to be, that is the question:
Whether 'tis nobler in the mind to suffer
The slings and arrows of outrageous fortune,
Or to take arms against a sea of troubles
And by opposing end them. To die-to sleep,
No more; and by a sleep to say we die
<your brain-flak code here>
The fitness pacer test is a multi stage test. Avacado Avacado Avacadad Avacadad carrot.bat carrot.jar carrot.carrot Quack Quack Quack Quack Quack Quack Quack Quack Quack downgoat doawngoat down down gaot
This challenge came from a online program that turned text into brain-fuck. However brain-fuck has limitations and it is not nearly as cool as brain-flak. I really am looking forward to cool programs :) I am glad you took the time to read this and look forward to seeing your answer.
выигрыш
Чтобы выиграть, вы должны указать общую длину кода «мозгового штурма» для каждого из тестовых случаев, который будет опубликован через 1-2 недели после даты публикации. Наименьшая общая длина выигрывает.
НОТА!!!!!!:
Это не код-гольф , длина вашего кода никак не повлияет на ваш окончательный счет. Создание чистого читаемого кода приветствуется. Благодарность!
<your brain-flak code here>
меньше 1000, присуждается за вознаграждение. Который я не могу отправить на другой день, упс; не заметил, как это было ново.Ответы:
Brain-Flak , 130 байт
Попробуйте онлайн!
Выход для
<your brain-flak code here>
: 5045 байтПопробуйте онлайн!
источник
Python 3 , 17744 байта
Изменить: я добавил несколько вариантов, чтобы помочь гольфу в безопасных ситуациях стека.
Попробуйте онлайн!
Простоерекурсивное решение , которое я буду продолжать дальнейшее совершенствование. Это делает очень хорошо с меньшими входами, но проигрывает Руби ответ MegaTom в течение более длительных входов.Примечания:
[]
становятся бесполезными (хотя их можно отключить, закомментировав пару строк, и они улучшат его толькопримерно на 100 байт.).Поскольку это рекурсивный алгоритм, для символов с большими значениями это займет больше времени. Например, символ ÿ (значение 255) занимает 9 секунд для оценки, тогда как каждый тестовый пример занимает 1,6 секунды.Кеш реализован![]
)-
. Это сократило несколько байтов, и много времени, учитывая, что значение этой черты было 8212: o.Пример выходов:
<your brain-flak code here>
(312 байт):Попробуйте онлайн!
Hello, World!
( 142 байта [Примечание:текущийпредыдущий лучший был 148 байтов , и теперь 136 байтов]):Попробуйте онлайн!
источник
Ruby , 17398 байт для всех (новых) тестов
Попробуйте онлайн!
<your brain-flak code here>
,362358 байтПопробуйте онлайн!
источник
Must run under 1 minute for inputs up to 1024 bytes
правило (хотя теперь оно намного быстрее)cache
, а неcash
; pPython 3 , 16222 байта
Попробуйте онлайн!
Сначала ниже 1000 для
<your brain-flak code here>
: DBrain-Flak , 448 байт
Попробуйте онлайн!
(первоначально 827 для
<your brain-flak code here>
)источник
05AB1E , слишком много байтов (мой первый BF что-нибудь)
Попробуйте онлайн!
Чрезвычайно простая попытка игры в гольф с использованием готового кода для умножения мозгов. Все, что он делает - находит пару делителей с наименьшей суммой для каждой кодовой точки ASCII, а затем переводит обе эти пары делителей в числа. Затем код Brainflak
({}<>)({<({}[()])><>({})<>}{}<><{}>)
добавляется и выполняется в цикле, пока все значения не окажутся в альтернативном стеке.Список людей, которых я благодарю:
(()())(()()())
=((()())())
(-252 bytes
)-927 bytes
).Пример гольфа
<your brain-flak code here>
в347032182291 байт:Brain-Flak , 2291 байт
Попробуйте онлайн!
Каждый ряд представляет одного персонажа, которого играют в гольф, это превосходит базовое решение, которое я опубликовал, на 60% , и, зная буквально ничего о Brainflak, я чувствую, что это хорошая основа того, чего не следует делать. Я наберу ответ через некоторое время, в середине чего-то другого, и я уверен, что могу улучшить это. (Я включаю новые строки в подсчет байтов, потому что не ожидаю, что это победит).
источник
(()()()())(()()()()())
и((()()()())())
2) Умножение на константу может быть намного корочеpush(); multiply();
. Например, чтобы удвоить число, вы можете сделать,(({}){})
а не(()())({}<>)({<({}[()])><>({})<>}{}<><{}>)
. Но это не ужасная базовая линия. Если вы хотите больше информации, я всегда рад поболтать в третьем стэкеМозг-Flak
Попробуйте онлайн!
Выход для
<your brain-flak code here>
, 582 байта:источник