M → Tip , 4 байта
Ṅ×ịß
Попробуйте онлайн!
Ссылка TIO добавляет нижний колонтитул для вызова функции с примером программы Tip, показанной на странице Esolang («автоматическая обертка» M для вызова функций, как если бы они были программами, которые не могут обрабатывать рациональные числа или числа с фиксированной запятой, или, по крайней мере, у меня есть Я не понял, как это объяснить, поэтому мне нужно превратить функцию в полноценную программу вручную, чтобы иметь возможность ее запускать.)
Это на самом деле печатает полезные выходные данные отладки; программа не может быть записана в 3 байта в M, потому что программа, состоящая ровно из трех диад, вызывает особый случай в синтаксическом анализаторе, поэтому мне пришлось добавить дополнительную команду, чтобы избежать особого случая. Создание этого Ṅ
(печать с новой строкой) по крайней мере дает ему полезную цель.
ı
i=−1−−−√
Не реализует ввод / вывод (кроме останова / без остановки). Ввод / вывод является расширением для Tip (не является частью самого языка) и не требуется для полноты по Тьюрингу.
Объяснение / фон
Ṅ×ịß
Ṅ Print {the left argument} and a newline; also resolves a parser ambiguity
ị {The left argument}th element of {the right argument}, wrapping on OoB
× Multiply {the left argument} by {the chosen element}
ß Recursive call; arguments: {the product} and {the same right argument}
[1,2,3]
[1,2,3,1,2,3,1,2,3,…]
rx+s, который является полиномом, а встроенная «базовая конверсия», которую имеют многие языки игры в гольф, на самом деле является замаскированным полиномиальным оценщиком общего назначения. Таким образом, все, что нам нужно сделать, это проиндексировать список списков цифр, преобразовать их в базу, и все готово, верно?
xx
ḅ
x⊕(x⊗y)x⊗y⊕, Конечно, мы можем переопределить поведение цепочки практически на все, что захотим, но это будет стоить целый байт, и записи языка для игры в гольф на этот вопрос становятся настолько короткими, что байт много.
Поэтому я оглянулся и немного переоценил. Есть ли какие-либо операции, которые мы могли бы использовать вместо полиномиальной оценки? В идеале, те, которые являются коммутативными, поэтому нам не нужно беспокоиться о порядке аргументов? Вскоре после этого я понял, что функции Коллатца являются более сложными, чем они должны быть.
s
И, конечно, в отличие от base translation ( ḅ
), multiplication ( ×
) является коммутативным, и, таким образом, не имеет значения, в каком порядке размещены аргументы. Поэтому все, что нам нужно написать, - это ×ị
затем поместить программу в бесконечную рекурсию с помощью ß
, и у нас есть полный по Тьюрингу язык. Правильно?
(x⊙y)⊕(x⊗y)¹×ịß
¹
¹
Ṅ
это хороший выбор, потому что он дает полезные выходные данные отладки.
Возможны ли три байта? Если только я что-то упустил, не с этим конкретным выбором реализуемого и реализованного языка, но в этот момент наверняка кажется, что это как-то возможно, так как существует четыре способа сделать это за четыре и так много Turing-complete языки, которые вы могли бы реализовать.
eval
решений.