Abaixe todos os caracteres por um valor fixo e adicione-o logo antes de imprimir em um loop
Agradecemos a @LukStorms , que usa uma abordagem semelhante em sua resposta para o desafio Hello World .
( STN
usado para espaço, tabulação e nova linha, respectivamente.)
Pressionar os valores para as letras é sempre 11 bytes (ou seja, pressionar o valor 65 para o caractere 'A' é SSSTSSSSSTN
; pressionar o valor 122 para o caractere 'z' é SSSTTTTSTSN
). Quando você deseja gerar uma grande quantidade de texto, isso pode ser caro. Em vez disso, você pode diminuir os valores de todos os caracteres que deseja imprimir em um valor fixo e, em seguida, no loop para imprimi-los, adicione esse valor fixo.
Isso pode ser feito com o seguinte código (vamos assumir que o valor fixo é 100 neste caso):
- Empurre todos os valores para os caracteres (menos o valor fixo 100) na ordem inversa
NSSN
(Crie um Label_0; basicamente iniciando o loop)
SSSTTSSTSSN
(Empurre o valor fixo 100)
TSSS
(Adicione os dois principais valores da pilha)
TNSS
(Pop e imprima o valor agora correto como caractere)
NSNN
(Salte para Label_0; vá para a próxima iteração do loop)
Isso interromperá o programa com um erro (o que é permitido de acordo com a meta ) assim que ele tentar fazer o Add ( TSSS
) sem mais nada na pilha. Eu usei isso para jogar com esta resposta minha (consulte os itens 5 e 6 de Coisas que fiz para diminuir a contagem de bytes ).
Se uma quantidade fixa de 100 é a abordagem mais curta depende do que você está imprimindo. O @LukStorm, por exemplo, usou 107 em sua resposta Hello World.
Observe que copiar o valor superior ( SNS
) para dois dos mesmos caracteres adjacentes (como o l
in Hello
) ou copiar valores de outra posição ainda pode ser usado além disso para obter mais bytes.