Резюме
Был создан новый язык для работы со строками, использующий только символы $+#-!*|@>
! Ваша задача - реализовать для него интерпретатор с минимальным количеством байтов.
вход
Строка, представляющая собой одну строку этого языка. Это может быть принято любым разумным способом (стандартным параметром, параметром функции, аргументом командной строки и т. Д.) Или как предопределенная переменная. Если программа запрашивает ввод пользователя, примите все вводимые пользователем запросы от stdin и ничего более, см. Ниже. Вы можете предположить, что это действительная программа.
Выход
Какой бы язык не выводился, спецификации приведены ниже. Вы должны вывести строку любым приемлемым способом (стандартный вывод, вывод функции и т. Д.) Или значение переменной. Когда язык выводит явно, это должно идти в stdout. Стандартные лазейки запрещены.
Спецификации языка
Обработка и синтаксис
Язык имеет очень простую форму обработки, поскольку он выполняет только манипуляции со строками: он начинается с пустой строки ( ""
) и меняет ее с каждым термином. Термин состоит из одной или двух частей: функции (ниже), за которой следует, возможно, параметр (ниже), который редактирует его поведение. Термины разделены трубками ( |
). Вы можете предположить, что это не будет пустой программой, и ни один термин не будет пустым. Вы должны вывести значение в конце программы.
функции
Язык имеет всего 6 функций, как показано ниже. Каждая функция принимает один или ноль параметров.
+
объединить строки (принимает один строковый параметр, объединяет его с текущим значением)!
изменить порядок символов текущего значения (без параметра)*
повторить строку (принимает один целочисленный параметр, повторяет текущее значение много раз)-
удаляет все вхождения значения (принимает один строковый параметр, удаляет все вхождения этого значения из текущего значения)$
[псевдо-] случайным образом перемешивает текущее значение (без параметров)<
вывести текущее значениеstdout
(без параметров)
Ценности
Это значения, которые могут быть переданы в функции, представленные регулярным выражением, которое будет соответствовать им:
@[^|]*
строковый литерал, включая любой символ, кроме труб. Это может быть пустым.#[0-9]+
целое число буквальное>
следующая строкаstdin
. Если используется с*
, конвертировать в целое число.
Тестовые случаи
╔════════════════════════╤═════════════╤══════════════╗
║code │input │output ║
╟────────────────────────┼─────────────┼──────────────╢
║+>|!|+@hello|*> │13 │31hello31hello║
║ │2 │ ║
╟────────────────────────┼─────────────┼──────────────╢
║+>|+@abcdefg|$ │hello │hcloeebafdlg ║
╟────────────────────────┼─────────────┼──────────────╢
║+@how areyou|-@o|-> │w │h areyu ║
╟────────────────────────┼─────────────┼──────────────╢
║+@out|<|*#3 │ │out ║
║ │ │outoutout ║
╟────────────────────────┼─────────────┼──────────────╢
║+> │what ever 345│what ever 345 ║
╟────────────────────────┼─────────────┼──────────────╢
║+@$pe<i@l|<|-@$pe<i@l|+>│A|$o $pe<!@| │$pe<i@l ║
║ │ │A|$o $pe<!@| ║
╟────────────────────────┼─────────────┼──────────────╢
║<|+>|!|< │input text | ║
║ │ │txet tupni ║
║ │ │txet tupni ║
╟────────────────────────┼─────────────┼──────────────╢
║+@># │ |># ║
╚════════════════════════╧═════════════╧══════════════╝
Обратите внимание, что тестовый случай 2 является случайным, поэтому любая перестановка символов в нем действительна. Кроме того, выходные данные в таблице разделены символами новой строки, но ваша программа не должна делать то же самое. Последнее значение в каждом случае является окончательным выводом.
Пример (без гольфа) интерпретатора Python
Попробуйте онлайн! ИМО лучше, если вы запустите его через IDLE или что вы используете. (После этого я проиграл 424 байта, но я уверен, что у вас получится лучше).
источник
<
встречаются. Это обязательно?+@>#
? Я использовал также#
.Ответы:
Рубин
-palF\|
,146142 байтаПопробуйте онлайн!
Порт Часов Брауна в Python ответ . Не выводит новые строки после вывода.
Как обычно, версия Ruby 2.6 будет на 2 байта короче с бесконечной индексацией диапазона (
i[2..]
).источник
R ,
287286273269 байтПопробуйте онлайн!
Развернутый код и объяснение:
источник
Python 2 ,
215219209208 байтПопробуйте онлайн!
-4 потому что
raw_input
требуется.9 байт благодаря « Варианту невежества» ; 1 байт только для Ascii .
источник
raw_input
. Поправь меня, если я ошибаюсь ..input([prompt])
Эквивалент eval (raw_input (подсказка)). Эта функция не отлавливает ошибки пользователя. Если входные данные не являются синтаксически допустимыми, возникает синтаксическая ошибка.C # (интерактивный компилятор Visual C #) , 305 байт
Попробуйте онлайн!
источник
Perl 5
-MList::Util=shuffle -pF/\|/
,220217210183 байтаПопробуйте онлайн!
источник
Javascript,
292267 байтJSFiddle
источник