Опустіть усі символи на фіксовану кількість і додайте це право перед друком у циклі
Кредит @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
) або копіювання значень з іншої позиції все ще може бути використане додатково до гольфу більше байтів.