Baje todos los caracteres en una cantidad fija y agréguelo justo antes de imprimir en un bucle
Gracias a @LukStorms , que utiliza un enfoque similar en su respuesta para el desafío Hello World .
( STN
usado para Espacio, Tabulador y Nueva línea respectivamente).
Empujar los valores para letras siempre es de 11 bytes (es decir, empujar el valor 65 para el carácter 'A' es SSSTSSSSSTN
; empujar el valor 122 para el carácter 'z' es SSSTTTTSTSN
). Cuando desea generar una gran cantidad de texto, esto puede ser costoso. En cambio, puede reducir los valores de todos los caracteres que desea imprimir en una cantidad fija, y luego en el ciclo para imprimirlos agregue esta cantidad fija.
Esto se puede hacer con el siguiente código (supongamos que el valor fijo es 100 en este caso):
- Empuje todos los valores para los caracteres (menos la cantidad fija 100) en orden inverso
NSSN
(Crea una Label_0; básicamente iniciando el ciclo)
SSSTTSSTSSN
(Empuje la cantidad fija 100)
TSSS
(Agregue los dos valores superiores de la pila juntos)
TNSS
(Pop e imprima el valor ahora correcto como carácter)
NSNN
(Salte a Label_0; vaya a la siguiente iteración del bucle)
Esto detendrá el programa con un error ( que se permite según el meta ) tan pronto como intente hacer el Add ( TSSS
) sin nada más en la pila. He usado esto para jugar esta respuesta mía (ver ítems 5 y 6 de Cosas que hice para reducir el conteo de bytes ).
Si una cantidad fija de 100 es el enfoque más corto depende de lo que esté imprimiendo. @LukStorm, por ejemplo, usó 107 en su respuesta de Hello World.
Tenga en cuenta que copiar el valor superior ( SNS
) para dos de los mismos caracteres adyacentes (como el l
in Hello
), o copiar valores de otra posición aún se puede usar además de esto para jugar más bytes.