CAPL 1.5+; 6 без ввода; 10 - 10 = 0 с вводом
Sidenote
Я где-то читал [ссылка?], Что пользовательские языки не допускаются в вопросах игры в гольф, поскольку они могут делать встроенные функции, которые точно выполняют заданный вопрос, однако я сделал CAPL, чтобы упростить игру в гольф в целом . Если вы думаете, что это здесь запрещено, дайте мне знать!
Я получил некоторые идеи от > <> и Befunge (вы можете перемещаться между строками и использовать шестнадцатеричные символы для ввода чисел), некоторые из Ruby, а некоторые из моих, чтобы упростить игру в гольф.
CAPL читает слева направо и идет на одну строку вниз в конце строки. Если это последняя строка, программа закроется.
Поскольку никто еще не знает этот язык, я постараюсь объяснить как можно больше.
Вывод y. 6 байт
bb*.n<
bb*
b
является шестнадцатеричным для 11
, поэтому bb*
is 11*11
= 121
, который является эквивалентом UTF-8 y
. Это значение помещается в стек.
.
Извлекает верхнее значение из стека и выводит как UTF-8. Как 121
и на вершине стека, индекс здесь игнорируется.
n
Выводит новую
<
строку. Отправляет указатель назад к началу строки, повторяя эту строку. Поскольку мы не ожидаем ввода, мы можем сделать это безопасно, без повторного запроса ввода.
Вывод из ввода. 10 байт, 0 после бонуса
i~a&{X:.)}
i
Принимает ввод от пользователя, выдвигает как UTF-8 на вершину стека, и увеличивает длину после этого. Т.е. [72,101,108,108,111,5]
~
извлекает число из стека, а затем переворачивает это количество байтов. Т.е. [111,108,108,101,72]
a
шестнадцатеричный для 10
, символ новой строки
&{...}
делает бесконечный цикл. У нас есть вход, поэтому мы не можем отправить указатель обратно на строку. Я мог бы поместить функцию в строку ниже, что бы обезопасить меня от байта, но новые строки не разрешены в этом вызове.
X
Удаляет верхнее значение из стека (индекс из цикла).
:.
Дублирует верхнее значение, а затем выводит как UTF-8.
)
Поворачивает стек вправо. ( [1,2,3,4,5]
-> [5,1,2,3,4]
)
Однако это означает, что мы начинаем с новой строки, затем начинаем выводить ввод, затем новую строку, затем ввод и т. Д. Если нам не разрешено начинать с новой строки, используйте следующий код с 12 байтами или 2 после вычитания бонус.
iXa#~&{X:.)}
Единственная новая команда здесь #
, которая помещает количество элементов в стеке в стек.
Я удалил длину из i
, потому что добавление 1, затем замена новой строкой длиннее, чем удаление и получение длины снова.
Просто для удовольствия, вот программа "Hello World"
"Hello World"#~
#?!;.<
?!
Операция такая же , как> <> 's
y
или\n
внутри строкового литерала"?