Связанный с: Сделать интерпретатор; #
В вышеупомянутой связанной задаче стояла задача создать переводчика для эзотерического языка ;#
.
;#
язык
Язык имеет ровно две команды: ;
и #
(все остальные символы игнорируются интерпретатором):
;
: Увеличить аккумулятор
#
: По модулю аккумулятора на 127, выведите соответствующий символ ASCII и сбросьте аккумулятор на 0.
Вызов
Поскольку я ленивый, но все еще хочу протестировать еще несколько тестовых случаев, мне нужна программа или функция, которая преобразует простой текст в ;#
код.
вход
Вводом является строка, взятая либо в качестве аргумента, либо через стандартный ввод. Он будет содержать только печатные символы ASCII и символы новой строки.
Выход
Выводом является сгенерированная ;#
программа путем возврата или печати в стандартный вывод. Пока программа действует, она может содержать иные , чем лишние символы #
и , ;
как и все остальные символы игнорируются.
Примеры
Input: Hello, World!
Output: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#
Input: ABC
Output: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#
Input: ;#
Output: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#
Leaderboard
источник
;#
игнорирует все остальные символы, поэтому сгенерированная программа все равно будет работать.;
. Во-вторых, 127 правильно, как указано в связанном вопросе, который содержит спецификацию языка; #.Ответы:
; # + , 61 байт
Конг Оф Брайен
Попробуйте онлайн!
Обратите внимание, что вход имеет завершающий нулевой байт.
источник
; # + , 40 байт
Попробуйте онлайн! Ввод завершается нулевым байтом.
объяснение
Код разбит на две части: генерация и итерация.
поколение
Это помещает константы
;
и#
в память как таковую:итерация
источник
#
@tuskiomi. Попробуйте онлайн!бред ,
5954 байтаПопробуйте онлайн!
источник
Желе ,
1087 байтПопробуйте онлайн!
-2 байта благодаря @Emigna
-1 байту благодаря @Dennis
источник
O”;ẋ;€”#
вместо этого?;€
может статьp
.GS2 , 6 байт
Попробуйте онлайн!
Обратимая hexdump (xxd)
Как это работает
источник
■
= какого черта?2
такое команда умножения? GS2 странный: P■
это просто карта , а GS2 реализует строки в виде списков целых чисел.2
есть XOR ...Такси, 779 байтов
Попробуйте онлайн!
Ungolfed:
Объяснение:
источник
05AB1E , 8 байтов
Попробуйте онлайн!
объяснение
источник
Brainfuck, 43 байта
Нулевой байт завершает программу.
объяснение
источник
Python 3 , 39 байт
Попробуйте онлайн!
источник
for s in input():print(";"*ord(s)+"#")
на один байт короче.> <> , 22 байта
Попробуйте онлайн или на рыбной площадке
Вход STDIN, выход STDOUT. В> <> символы и ASCII-коды - это одно и то же, поэтому все, что нам нужно сделать, это прочитать символ, вывести
";"
и уменьшить значение символа до его 0, затем распечатать"#"
и зациклить, пока не останется ввода.источник
F #, 79 байтов
Попробуйте онлайн!
расширенный
convert принимает входную строку и выводит программу; #
использование
источник
Python 2 - 36 байт
Попробуйте онлайн!
источник
PowerShell,
292725 байтДовольно просто. Принимает ввод в качестве аргумента командной строки. Вывод является действительной; # программой, которая печатает запрошенный текст.
источник
#
и;
как все остальные символы игнорируются«.$args
достаточно.брейкфук , 47 байт
Попробуйте онлайн!
Смотрите также: ovs's answer , который использует аналогичный подход, но с другим методом генерации констант и другим расположением ячеек.
Объяснение:
Эта задача хорошо согласуется со спецификацией brainfuck, что означает, что решение по сути тривиально. Brainfuck принимает входные данные как значения ASCII, и это именно то, что нужно # вывести как.
Схема для переноса проста: сгенерируйте значение ASCII для
;
и#
, напечатайте;
равное значению ASCII входного символа, напечатайте#
, повторите для каждого ввода.источник
Mathematica, 49 байтов
объяснение
Преобразует входную строку в список кодов символов, затем
Map
выполняет функциюStringRepeat[";",#]<>"#"&
над списком, а затемStringJoin
результат с пустой строкой.источник
<>""
?StringJoin
ing (<>
) пустая строка объединяет каждую строку.Ацето , 19 байт
Поскольку в Aceto есть переводчик , я подумал, что Aceto не сможет ответить и на этот вызов. Он хорошо вписывается в кривую Гильберта 2-го порядка:
Прежде всего, мы читаем один символ (
,
), дублируем его и отменяем его, чтобы проверить, является ли он новой строкой (d!
при чтении новой строки в стек обычно помещается пустой символ). Затем я использую то, что я считаю довольно хитрым трюком, чтобы компактно обработать случай новой строки:`'\n
Если значение в стеке
True
(мы читаем новую строку), этот код означает: do (`
) помещает символьный литерал в стек ('
), который является новой строкой:\n
.Если значение в стеке
False
(мы не читали новую строку), этот код означает: не (`
) читать символьный литерал ('
). Это означает, что следующий символ выполняется как команда. К счастью, обратная косая черта экранирует следующую команду (она делает так, чтобы она не выполнялась), поэтомуn
не выводит символ новой строки (вот чтоn
обычно и делается).Остальная часть кода проста; мы конвертируем символ в стеке в целое число его кодовой точки Unicode (
o
), вставляем буквальную точку с запятой (';
), умножаем число на строку (*
как в Python),p
опечатываем результат, нажимаем литерал ('
)#
,p
запечатываем его и вернуться кO
ригин.Запустите с,
-F
если вы хотите увидеть немедленные результаты (потому что буферизация), но он работает и без.источник
Perl, 24 байта
Беги с
perl -pe
.Альтернативное решение:
Беги с
perl -nE
.источник
Утешение , 11 байт
Уу, новые языки.
объяснение
источник
Фурье , 19 байт
Попробуйте это на FourIDE!
Для запуска необходимо заключить входную строку в кавычки.
Пояснение псевдокод
источник
Befunge-98 (FBBI) ,
231710 байт-5 байт благодаря Джо Кинг .
Попробуйте онлайн!
источник
JavaScript,
5554515048 байтПопробуйте онлайн
альтернативы
Если мы можем принять ввод как массив отдельных символов, то можно сохранить 5 байтов.
Если мы также можем вывести в виде массива, то можно сохранить еще 2 байта.
источник
\n
должен становится;;;;;;;;;;#
..
на[^]
, который все равно оставил бы его на байт короче, чемmap/join
?join()
в вашем предыдущем ответе не было необходимости, учитывая спецификацию для;#
, и вы также можете объявить, что входные данные для вашей функции - это массив символов, хотя второе предложение немного растянуто. В любом случае, это сводит вас к максимум 48 байтов.На самом деле , 11 байтов
Попробуйте онлайн!
Объяснение:
источник
APL (Dyalog) , 18 байт
Попробуйте онлайн!
⎕UCS
Преобразовать в кодовые точки Unicode';'⍴¨⍨
используйте каждую кодовую точку, чтобы изменить ( ⍴ = Rho ≈ R ; R eshape) точку с запятой#',¨⍨
добавить хеш к каждой строкеисточник
Рубин,
2825 байт24 байта, плюс
-n
переключатель командной строки для многократного включенияstdin
.3 байта сохранены (и вывод исправлен на новых строках!) Благодаря ручной работе.
источник
.ord
, работая непосредственно с кодами символов:$_.bytes{|b|$><<?;*b+?#}
. Есть разница: эта также кодирует новую строку во вводе. Не уверен, что владелец вопроса намеревается сказать: «Он будет содержать только печатные символы ASCII и символы новой строки», но для меня звучит так, будто символы новой строки также должны быть закодированы.bytes
. Я спросил OP о новых строках вверху и отредактирую это позже.PHP, 54 байта
Попробуйте онлайн!
источник
Алиса , 12 байт
Попробуйте онлайн!
объяснение
источник
PHP, 48 байт
источник
JQ, 30 символов
(26 символов кода + 4 символа командной строки)
Образец прогона:
Он-лайн тест
источник
Pyth, 10 байт
Попытайся!
источник
Рёда , 24 байта
Попробуйте онлайн!
источник