Підсумок
Зроблено нову мову обробки рядків, використовуючи лише символи $+#-!*|@>
! Ваше завдання - реалізувати інтерпретатор для нього якомога менше байтів.
Вхідні дані
Рядок, що є єдиним рядком цієї мови. Це можна сприймати будь-яким розумним способом (stdin, параметр функції, аргумент командного рядка тощо), або як заздалегідь задану змінну. Якщо програма вимагає введення користувачем, прийміть усі користувальницькі дані, які вона вимагає від stdin, і більше нічого, див. Нижче. Ви можете припустити, що це дійсна програма.
Вихідні дані
Яку б мову не виводили, наведено нижче. Ви повинні виводити рядок будь-яким розумним способом (stdout, виведення функції тощо) або значення змінної. Коли мова виводить явно, це має перейти до stdout. Стандартні лазівки заборонені.
Мовні характеристики
Обробка та синтаксис
Мова має дуже просту форму обробки, оскільки вона виконує лише рядкові маніпуляції: вона починається з порожнього рядка ( ""
) і змінює його з кожним терміном. Термін складається з однієї або двох частин: функції (внизу), за якою, можливо, параметр (внизу), який редагує його поведінку. Умови розділені трубами ( |
). Ви можете припустити, що це не буде порожньою програмою, і жоден термін не буде порожнім. Ви повинні вивести значення в кінці програми.
Функції
Мова має всього 6 функцій, як показано нижче. Кожна функція або приймає один або нульовий параметри.
+
об'єднати рядки (бере один параметр рядка, з'єднує його з поточним значенням)!
Зміна порядку символів поточного значення (немає параметра)*
повторити рядок (приймає один цілий параметр, багато разів повторює поточне значення)-
видаляє всі входження значення (бере один параметр рядка, видаляє всі входження його з поточного значення)$
[pseudo-] випадковим чином переміщує поточне значення (без параметра)<
вивести поточне значення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 є випадковим, тому будь-яка перестановка символів у ньому дійсна. Крім того, результати в таблиці відокремлюються новими рядками, але програма не повинна робити те саме. Останнє значення в кожному випадку - кінцевий вихід.
Приклад інтерпретатора пітона (Un-golfed)
Спробуйте в Інтернеті! IMO краще, якщо ви запускаєте його через IDLE або все, що ви використовуєте. (Після цього я переграв його до 424 байт, але я впевнений, що ти можеш зробити краще).
<
трапляються. Це обов’язково?
+@>#
? Я #
також використовував .