В этой задаче вы напишите программу / функцию, которая берет программу нормализованного Malbolge и выводит результирующую программу Malbolge . (Это секретный инструмент, который используют все программисты Malbolge!)
вход
Структура данных, которая (каким-то образом) представляет нормализованную программу Malbolge.
Выход
Структура данных, которая представляет результирующую программу Malbolge.
Примеры
jpoo*pjoooop*ojoopoo*ojoooooppjoivvvo/i<ivivi<vvvvvvvvvvvvvoji
(=BA#9"=<;:3y7x54-21q/p-,+*)"!h%B0/.~P<<:(8&66#"!~}|{zyxwvugJ%
jjjj*<jjjj*<v
('&%#^"!~}{XE
jjjjjjjjjjjjjjjjjjjjjjj*<jjjjjjjjjjjjjjjjjjjjjjjj*<v
('&%$#"!~}|{zyxwvutsrqpnKmlkjihgfedcba`_^]\[ZYXWVT1|
Как конвертировать
Выполните итерацию по нормализованной программе Malbolge, выполнив следующие шаги для каждого символа:
Замените символы в строке
*jpovi</
соответствующими символами в'(>DQbcu
. (То есть, карта*
с'
,j
к(
, и так далее.)Затем вычтите текущую позицию счетчика программы (т.е. количество символов перед текущей) из кода ASCII символа.
Если полученный ASCII-код меньше 33, увеличьте его на 94 и повторяйте, пока он не станет не менее 33.
Добавьте полученный символ к выводу.
правила
- Это соревнование по коду-гольфу ; самый короткий ответ выигрывает.
- Никаких стандартных лазеек, пожалуйста.
- Методы ввода / вывода по умолчанию разрешены.
- Ввод будет содержать только символы
*jpovi</
.
*jpovi</
"?a: if ascii_code(temporary Malbolge representation) < 33: char := char + 94; goto a;
Ответы:
Желе ,
2922 байтаПопробуйте онлайн!
Монадическая ссылка, принимающая строку Jelly в качестве аргумента и возвращающая строку Jelly.
Спасибо @JonathanAllan за сохранение 2 байта!
объяснение
источник
..._J‘ịØṖḊ¤
сохраняет один байт.Oị“%þV DCµ2® ‘_JịØṖḊ¤
Python 3 , 82 байта
Попробуйте онлайн!
Спасибо @Joel за замену уродливых непечатных символов в строке байтов на печатные.
Я ищу замену мод-цепочки
"*jpovi<".find(c)
, но я не думаю, что есть такая, которая короче, и неисчерпывающий поиск грубой силы ничего не нашел до сих пор.82 байта
Попробуйте онлайн!
источник
b"de{#0ABT"["*jpovi<".find(c)]
если у вас есть программа для этого.x%84%15%7
для правой части отображения, но я думаю , что я могу переработать код , который я написал для еще один вызов для поиска , включая*
и/
условия.%
и*
(//
в Python 3, вероятно, оно того не стоит). Фактически, ничто не соответствует первым 6 из 7 значений. Я надеялся, что это сработает, потому что приблизительная оценка энтропии говорит, что, вероятно, достаточно выражений, заканчивающихся на% 7`, но это близко. И, возможно, эти цепочки дают выходы, которые далеко не равномерно распределены, тем более что, если два входа сворачиваются до одного значения, никакие дальнейшие операции не могут их разделить. То, что я пробую, все еще слишком глупо, чтобы искать более широкое выражение, но если у вас есть какие-либо идеи, воспользуйтесь им.map(ord, "*jpovi<")
. Если выходные данные не сохраняют порядок для большинства входных данных (т. Е.f(m)>=f(n)
Еслиm>=n
), некоторые тщательно созданные константы для%
и*
, вероятно, необходимы, и поиск методом грубой силы вряд ли даст положительный результат.Malbolge Unshackled (вариант с 20-кратным вращением), 7,784e6 байт
Размер этого ответа превышает максимально допустимый размер программы (eh), поэтому код находится в моем репозитории GitHub .
Как запустить это?
Это может быть непростой задачей, потому что наивному интерпретатору Haskell понадобятся годы, чтобы запустить это. У TIO есть приличный интерпретатор Malbogle Unshackled, но, к сожалению, я не смогу его использовать (ограничения).
Лучший вариант, который я смог найти, это фиксированный вариант ширины поворота в 20 трит, который работает очень хорошо, преобразуя 0,5 символа в секунду .
Чтобы сделать переводчика немного быстрее, я удалил все проверки из интерпретатора Мэттиласа Люттера «Малболж».
Моя модифицированная версия может работать примерно на 6,3% быстрее.
Это работает!
источник
Python 3 ,
8483 байтаПопробуйте онлайн!
Это в основном математическая задача об упрощении вычислений, плюс немного игры в гольф после выполнения математики. Развернутая версия кода показана ниже.
Ungolfed, нерекурсивная версия
Попробуйте онлайн!
источник
JavaScript (Node.js) , 69 байт
Попробуйте онлайн!
Как?
источник
Perl 6 ,
65 5553 байтаПопробуйте онлайн!
Использует трюк мод 11 из ответа Арно
источник
05AB1E ,
32312322 байта-8 байт, создающих порт ответа JellyKennedy 's Jelly , так что обязательно поставьте его на голос!
-1 байт благодаря @Grimy.
Выходы в виде списка символов.
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
Посмотрите эту подсказку 05AB1E (раздел Как сжимать большие целые числа? И Как сжимать целочисленные списки? ), Чтобы понять, почему
•4¡ˆ¶ü]₁η₃•
есть82767635194143615015
и•4¡ˆ¶ü]₁η₃•₃в
есть[1,36,30,85,0,67,66,8,49,7,0]
.источник
•1ÃQWý₂Ýδ9•86в
->•4¡ˆ¶ü]₁η₃•₃в
Perl 5 (
-p
),53, 51 байтсохранение 2 байта, используя
de{#0ABT
вместо того,'(>DQbcu
чтобы61
больше не нужноTIO
первый ответ был
TIO
источник
Japt ,
2423 байтаПорт Желе от Ника
Попробуй
источник
Сетчатка 0.8.2 , 50 байт
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Объяснение:
Сделайте транслитерацию, как описано в вопросе.
p
(описано ниже) иo
имеют особое значение дляT
транслитерации, поэтому их нужно заключать в кавычки.Перечислите каждый символ в отдельной строке, которому предшествует количество пробелов в соответствии с его индексом, т. Е. Счетчиком программы.
Неоднократно циклически уменьшайте последний символ в каждой строке, каждый раз удаляя предыдущий пробел, пока все пробелы не будут удалены. На
p
стендах для печати ASCII то есть-~
, однако мы хотим,!
чтобы сопоставить ,~
так что транслитерируются первым, а затем_
вызывает пространство в матче.¶
будет удалено, а остальные символы получают транслитерации один код символа в то время.Присоединяйтесь ко всем персонажам вместе.
источник
Древесный уголь , 23 байта
Попробуйте онлайн! Ссылка на подробную версию кода. Порт @ Арно, ответ JavaScript. Объяснение:
источник
C # (интерактивный компилятор Visual C #) , 62 байта
Попробуйте онлайн!
Порт @Arnaulds JavaScript ответ. Один, если редкие случаи, когда C # короче!
источник
Haskell , 135 байт
Попробуйте онлайн!
источник