> <> , 38 37 Bytes
Maldición, caja de doble espacio * sacude pescado *.
<v&0
>i:84*=?v0(?;67*o&1&
\ &0o?&a/
Puede probarlo en línea (todo lo que necesita hacer es ingresar datos a través del campo cerca de la parte inferior y luego presionar el botónGive
botón). Las sugerencias para seguir jugando al golf son siempre bienvenidas, especialmente ideas para eliminar esos espacios derrochadores frente a la segunda y tercera línea.
Si se le permitiera imprimir una nueva línea adicional para espacios adicionales, el código podría ser de 27 bytes :
>i:84*=?v0(?;67*o
^ oa<
Explicación
Nota: el orden de la explicación corresponderá a la ubicación del puntero (por lo tanto, si el código se explica fuera de lo que uno consideraría orden, es porque es el orden en que el puntero lo ejecuta).
Línea 1:
<v&0
< redirects flow leftward
0 pushes 0 onto the stack
& pops 0 and puts it in the register
v redirects flow downward
Línea 2:
>i:84*=?v0(?;67*o&1&
> redirects flow leftward
i: pushes input and then duplicates it
84* pushes 32 (the space character numerically)
=?v pops 32 and input and redirects flow downward if they're equal
0(?; pops input and terminates if input is less than 0*
67*o pushes 42 (asterisk) and prints it
&1& pushes register value and then puts 1 in the register
*in ><>, the command i returns -1 if no input is given
Línea 3:
Nota: esta línea va en reversa, así que lea de derecha a izquierda.
^ &0o?&a<
< redirects flow leftward
a pushes 10 (newline) onto the stack
o?& prints a newline if the register is not 0
&0 sets the register to 0
^ redirects flow upwards (back to the second line)
Básicamente, la prueba del programa para asegurarse de que la entrada (que se lee un carácter a la vez) no es un espacio y luego imprime un asterisco. Termina si no hay entrada (el valor de entrada es -1). Para asegurarse de que no imprime nuevas líneas adicionales, utiliza el valor de registro, que establece en 0 o 1. Debido a la forma en que lo configuré, no le importan los valores extraños introducidos en la pila (p. Ej. el valor del registro cuando lo establece 1
después de imprimir un asterisco); permanecen en la pila cuando finaliza el programa pero no hacen nada.
Sé que puede ser un poco confuso desde que lo usé 84*
y en 67*
lugar de " "
y "*"
respectivamente, pero eso fue porque no tenía ganas de poner cadenas en el programa por cualquier razón.