Связано с: Создать интерпретатор; # и Создать; # код
;#
- Гид Вихря
Это простой язык с двумя командами. Его единственной структурой данных является аккумулятор, который инициализируется в 0.
;
Увеличить аккумулятор#
Вычислить значение аккумулятора по модулю 127 и вывести соответствующий символ ASCII. Затем сбросьте аккумулятор на 0.
Исходный код может содержать дополнительные символы (печатный ASCII + пробел), но они рассматриваются как комментарии и не влияют на выполнение программы.
Вызов
Поскольку большинство компьютеров не поставляются с ;#
предустановленными, было бы очень полезно иметь инструмент, который может конвертировать ;#
код на другой язык. В этом задании вы должны написать программу для достижения этой цели.
вход
Некоторый ;#
исходный код, взятый через аргумент или STDIN. Этот исходный код может содержать (комментарий) символы, отличные от ;
или #
.
Выход
Код на том же языке, что и ваше представление, которое при выполнении печатает / возвращает ту же строку, что и исходный ;#
код. Этот результирующий код может выводить завершающий символ новой строки после целевой строки, если это более удобно для вашего языка.
Заметки
Стоит обратить внимание на escape-последовательности, такие как код, который печатает обратную косую черту или печатает кавычки. Также обратите внимание на ;#
код, который может содержать вещи, которые выглядят как ключевые слова или команды на вашем языке.
Дополнительные ограничения
Все программы должны завершаться (я обычно считаю это значением по умолчанию, но кто-то спрашивал об этом, поэтому я заявляю это здесь).
Примеры
input: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#
output (python): print(";#")
input: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#
output (element): \'`
;#
предустановленным ...;
или#
?Ответы:
Python 2 ,
7669 байтКод
Ввод заключен в кавычки.
Попробуйте онлайн!
объяснение
Первая часть вывода по существу делается с помощью ввода, используя
input('print')
. Мы разделяем входные данные на хэштеги и отбрасываем последний элемент. Мы печатаем представление ord (y% 127) , где y - количество вхождений точки с запятой. Мы добавляем,
в конце печати, чтобы убедиться, что это не печатать новую строку.Это даст следующий код Python для
Hello, World!
-program:Который можно попробовать онлайн .
источник
брейкфук , 126 байт
Попробуйте онлайн!
Программа вывода завершится ошибкой в реализации TIO, если
;#
вывод превысит 65536 символов. Я также сделал 130-байтовую версию, которая выводит[+]
вместо<
, чтобы избежать этой проблемы:объяснение
источник
Пробел, 291 байт
Замените S пробелом, T символом табуляции, а N символом новой строки.
Генерация пробелов в пробелах - не самая эффективная вещь в мире. Генерация любого вида динамического кода требует значительного изменения битов, что в языке без битовых операций может привести к увеличению размера кода. Таким образом, эта программа не пытается сделать что-то умное, вместо этого выбирая просто перевод исходной программы один в один. Он разбирается на следующее:
Код, сгенерированный программой, выглядит следующим образом:
источник
V ,
192028 байтИсправлено, сломался, если не было
#
в концеИсправлено, реализовано
mod 127
Попробуйте онлайн!
Попробуйте сгенерированный код
Объяснение:
В V в режиме вставки любой символ ASCII может быть вставлен с помощью кода с помощью
<C-v><Code>
. Код V заменяет все#
на<C-v>0
, где ноль - псевдоаккумулятор на#
. Каждый#
сбрасывает аккумулятор на 0, так что если у него один, то все работает хорошо. Затем код выполняет приращение для каждой найденной точки с запятой, которая просто увеличивает следующий найденный номер, который будет следующим аккумулятором. Символ0
добавляется в конец, чтобы инструкция не сработала;
без следующего#
.HexDump:
источник
05AB1E ,
20 19 1816 байтов-1 благодаря Аднана
-2 спасибо к carusocomputing
-2 спасибо к Kevin Cruijssen
Попробуйте онлайн! (включает вывод выполненного кода 05AB1E)
источник
';¢
может бытьg
,žy
толкает 128, может работать как-то, и почему бы просто не записать полное слово и заключить его в кавычки?';¢
если есть другие символы, кроме;
.žy<
так же, как127
. Печать слова в кавычках прекратится, если один из символов будет кавычкой.ƵQ
сжатая версия 127 .Python 2 , 75 байт
Попробуйте онлайн!(включает вывод от выполнения переданного кода Python)
Спасибо ovs за много много байтов!
объяснение
Эта программа переносит #; код, разделив на #s (
s.split('#')[:-1]
), посчитая количество точек с запятой в каждом модуле 127 (x.count(';')%127for x in ...
) и преобразовав его в соответствующий символ ASCII (chr(...)
). Этот список затем сцепляется (''.join(...)
), преобразуется в представление строки (обратные метки) в Python и вставляется в скелетную программу Python для печати строк ("print"+...
).источник
Желе ,
25 2416 байтПолная программа, печатающая эквивалентный код Jelly (в виде монадической ссылки возвращает список списков смешанных типов).
Первый пример на Попробуй онлайн! который дает эту программу .
Как?
Подсчитывает
;
s в каждом прогоне между#
s, берет каждый модуль 127 и добавляетỌ
после каждого приведение к порядковому порядку, монадическому атому.Jelly неявно передает каждое значение в STDOUT, поскольку оно запускается через такую программу, то есть
72Ọ101Ọ108Ọ108Ọ111Ọ44Ọ32Ọ119Ọ111Ọ114Ọ108Ọ100Ọ33Ọ
печатаетHello, world!
.Примечание относительно ввода: Jelly принимает строковый ввод в формате Python. Пустая программа может быть введена как
""
, и только хеш-программы как"#"
,"##"
и т. Д. Для ввода, содержащего обратную косую черту и кавычки, могут потребоваться другие манипуляции.источник
Кубический ,
138137 байтПопробуйте онлайн!
Примечание: Вы , возможно , потребуется заменить
&6
с?6&
для того , чтобы работать на TIO.&6
хотя в спецификации языка.Как это работает
Выходная программа:
источник
@6
,%6
и-6
. Команды, которые раньше ничего не делали при неявном вызове, теперь используют блокнот. Так@
же, как@6
, так%
же, как%6
и т. Д.JavaScript (ES6), 101 байт
Получив входную строку, удаляет все ненужные символы, затем возвращает источник следующей функции:
Где
...
представляет убранный;#
источник.источник
C
9896999897 байт+3 байта, потому что я забыл C не интерпретируется :(
Работает с:
Распечатает:
источник
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#
производитf(){puts(""");}
, что недействительно. Задача, в частности, гласит: «Одна вещь, на которую нужно обратить внимание, это escape-последовательности, такие как код, который печатает обратную косую черту или печатает кавычки».Желе , 26 байт
Попробуйте онлайн!
И попробуйте этот код Jelly здесь!
Вывод Jelly становится похожим на код
Ọø‘‘‘‘‘‘‘‘‘‘‘‘‘Ọø‘‘‘‘‘‘‘‘‘‘Ọø
, который печатает chr (13) + chr (10)источник
PHP, 72 байта
источник
> <>,
1068177 байтовЭто мой первый гольф в> <> (рыба)! Я должен сказать довольно интересный язык. Много веселья!
источник
i:1+?!
доi:0(?
, и я также чувствую, что вы могли бы сэкономить несколько байтов, если вы построили результат в стеке и ждали конца ввода для его вывода. Я имею в виду, это многоo
s;)C # 169 байт
Golfed:
Человекочитаемая версия:
источник
Haskell ,
106102 байтаПопробуйте онлайн!
Ungolfed
источник
Брахилог , 33 байта
Попробуйте онлайн!
Чувствую себя слишком уставшим, чтобы объяснить это в данный момент, если кто-то видит это и интересуется, как это работает, напишите комментарий, чтобы напомнить мне.
источник
MathGolf , 17 байт
Попробуйте онлайн!
объяснение
Поскольку любой символ может быть помещен в стек (и, следовательно, вывод) с использованием
'<char>
, это выведет последовательность таких блоков кода.источник
Þ
.Þ
. ( Однако в документах, которые я использую, все еще указывается старое значение. )МАТЛ ,
3228 байтПопробуйте онлайн!
Совершенно другой подход, основанный на программе,
strsplit
а не на автомате.источник
На самом деле , 25 байтов
Попробуйте онлайн!(включает вывод от выполнения переданного на самом деле кода)
Объяснение:
источник
shortC , 48 байтов
источник
Фурье, 32 байта
Попробуйте это на FourIDE!
Это было довольно легко, так как Фурье - это в основном надмножество; #:
источник
CJam, 14 байтов
Объяснение:
источник
APL, 31 байт
Выход:
Объяснение:
⌽
: обратный ввод{
...}
: передать его этой функции:⍵⊂⍨'#'=⍵
: раздел на каждом#
в строке (с самого начала, поэтому его нужно было сначала перевернуть)+/¨';'=
: посчитать;
в каждом разделе127|
: по модулю 127⌽
: переверни это снова'⎕UCS',
: добавить строку⎕UCS
, которая является функцией Unicode.⍕
: строковое представлениеисточник
⍕
как фактический вывод в STDOUT одинаков.Рубин , 47 + 1 = 48 байтов
+1 байт за
-p
.Попробуйте онлайн!
-30 байт благодаря @manatwork !
источник
;
или#
.»./;+#/
→/.*?#/
и блок кодаs.length-1
→s.count(?;)
. Кстати, ваша математика также неверна, так как%
имеет более высокий приоритет, чем-
, так должно быть(s.length-1)%127
. А в.gsub
блоке кода «S вы можете получить доступ к захваченных групп с$&
,$1
... поэтому|s|
параметр блочного кода , как правило , не представляется возможным. И строка интерполяции stringifies:{"$><<#{$&.count(?;)%127}.chr;"}
. Попробуйте онлайн!gsub
изменяет$_
напрямую, что означает, что вам не нужно переназначать его. ОДНАКО, у вас есть проблемы, если у вас есть символы комментария после вашего последнего#
... см. ЗдесьPyth,
252324 байта+1 байт благодаря @FryAmTheEggman
Попытайся!
обрабатывает символы, которые должны быть экранированы только с использованием 1-символьных строк.
Пример выходов:
Использует мой; # переводчик .
источник
#
на входе их нет, так как будет напечатано0
. Вы можете исправить это с помощьюjk
вместоs
.C, 150 байтов
Expanded:
Это полная программа, которая (должна) завершать, игнорировать комментарии и всегда выводить правильный код. Я предполагаю EOF = -1
Протестировано на SystemResque-Cd 4.9.6, скомпилировано с gcc 4.9.4
источник
braingasm , 40 байт
Должен сказать, это удивительно мало.
Сгенерированный код для
;
является+
, который увеличивает текущую ячейку.Сгенерированный код для
#
содержит несложную, ручную операцию по модулюисточник
Braingolf , 55 байт
Попробуйте онлайн!
В основном заменяется
;
на1+
,#
с#~1+%@
и предварительно ожидает все это,0
потому что монадический+
оператор сейчас не работает.1+
добавляет 1 к последнему элементу в стеке.#~1+%@
толкает значение char~
(126), добавляет 1, чтобы получить 127, модуль с другим элементом в стеке, затем и печатает как символ.объяснение
источник
q / kdb +, 42 байта
Решение:
Примеры:
Обратите внимание, что
,
используется для обозначения списка (по сравнению с атомом), поскольку"\""
представляет собой список из одного элемента, а не является атомом.Объяснение:
Возьмите входную строку, удалите все, что не является a
#
или a;
, разбейте на списки#
, посчитайте количество элементов в каждом списке, выполните мод 127 для результата и приведите к строке:Заметки:
#
, иначе последний фрагмент будет ошибочно отброшен-1_
.;#
.источник
Perl 5 , 78 байт
Попробуйте онлайн!
источник