Опустіть усі символи на фіксовану кількість і додайте це право перед друком у циклі
Кредит @LukStorms , який використовує подібний підхід в своїй відповіді на виклик Hello World .
( STNвикористовується для Space, Tab та New-line відповідно.)
Натискання значень для літер завжди становить 11 байт (тобто натискання значення 65 для символу "A" є SSSTSSSSSTN; натискання значення 122 для символу "z" є SSSTTTTSTSN). Коли ви хочете вивести велику кількість тексту, це може бути дорогим. Натомість ви можете знизити значення всіх символів, які ви хочете надрукувати на фіксовану кількість, а потім у циклі для їх друку додати цю фіксовану суму.
Це можна зробити за допомогою наступного коду (припустимо, фіксоване значення 100 у цьому випадку):
- Натисніть всі значення символів (мінус фіксовану суму 100) у зворотному порядку
NSSN (Створіть мітку_0; початок циклу)
SSSTTSSTSSN (Натисніть на фіксовану суму 100)
TSSS (Додайте два перших значення стека разом)
TNSS (Розмістіть і надрукуйте тепер правильне значення як символ)
NSNN (Перейти до мітки_0; перейти до наступної ітерації циклу)
Це зупинить програму з помилкою ( яка дозволена відповідно до мета ), як тільки вона спробує зробити Add ( TSSS) більше нічого на стеку. Я використовував це для гольфу в цій моїй відповіді (див. Пункти 5 і 6 речей, які я зробив, щоб зменшити кількість байтів ).
Чи фіксований розмір 100 - це найкоротший підхід залежить від того, що ви друкуєте. Наприклад, @LukStorm використав 107 у своїй відповіді Hello World.
Зауважте, що копіювання найвищого значення ( SNS) для двох однакових суміжних символів (наприклад, lв Hello) або копіювання значень з іншої позиції все ще може бути використане додатково до гольфу більше байтів.