Уменьшите все символы на фиксированную величину и добавьте это прямо перед печатью в цикле
Кредит @LukStorms , который использует подобный подход в своем ответе на вызов Hello World .
( STN
используется для пробела, табуляции и новой строки соответственно.)
Нажатие значений для букв всегда составляет 11 байтов (то есть нажатие значения 65 для символа «A» означает SSSTSSSSSTN
; нажатие значения 122 для символа «z» означаетSSSTTTTSTSN
). Если вы хотите вывести большое количество текста, это может быть дорого. Вместо этого вы можете уменьшить значения всех символов, которые вы хотите распечатать, на фиксированную величину, а затем в цикле их печати добавить эту фиксированную сумму.
Это можно сделать с помощью следующего кода (в данном случае предположим, что фиксированное значение равно 100):
- Нажмите все значения для символов (минус фиксированная сумма 100) в обратном порядке
NSSN
(Создайте Label_0; в основном, начиная цикл)
SSSTTSSTSSN
(Нажмите фиксированную сумму 100)
TSSS
(Добавьте два верхних значения стека вместе)
TNSS
(Вставьте и напечатайте правильное значение в виде символа)
NSNN
(Перейти к Label_0; перейти к следующей итерации цикла)
Это остановит программу с ошибкой ( которая разрешена в соответствии с мета ), как только она попытается выполнить Add ( TSSS
), не имея ничего больше в стеке. Я использовал это, чтобы сыграть в гольф мой ответ (см. Пункты 5 и 6 того, что я сделал, чтобы уменьшить количество байтов ).
Является ли фиксированная сумма 100 кратчайшим подходом, зависит от того, что вы печатаете. Например, @LukStorm использовал 107 в своем ответе Hello World.
Обратите внимание, что копирование верхнего значения ( SNS
) для двух одинаковых смежных символов (например, l
in Hello
) или копирование значений из другой позиции по- прежнему может использоваться в дополнение к этому для увеличения количества байтов.