> <> , 38 37 octets
Malédiction vous double cas d'espace * secoue le poisson *.
<v&0
>i:84*=?v0(?;67*o&1&
\ &0o?&a/
Vous pouvez l' essayer en ligne (tout ce que vous avez à faire est de donner votre avis via le champ près du bas, puis d' Giveappuyer sur le bouton). Les suggestions pour continuer à jouer au golf sont toujours les bienvenues, en particulier les idées pour éliminer ces espaces inutiles devant les deuxième et troisième lignes.
Si vous étiez autorisé à imprimer une nouvelle ligne supplémentaire pour des espaces supplémentaires, le code pourrait être un énorme 27 octets :
>i:84*=?v0(?;67*o
^ oa<
Explication
Remarque: l'ordre de l'explication correspondra à l'emplacement du pointeur (donc si le code est expliqué hors de ce que l'on considérerait comme de l'ordre, c'est parce que c'est l'ordre dans lequel le pointeur l'exécute).
Ligne 1:
<v&0
< redirects flow leftward
0 pushes 0 onto the stack
& pops 0 and puts it in the register
v redirects flow downward
Ligne 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
Ligne 3:
NB Cette ligne va en sens inverse, alors lisez de droite à gauche.
^ &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)
Fondamentalement, le programme teste pour s'assurer que l'entrée (qui est lue un caractère à la fois) n'est pas un espace, puis imprime un astérisque. Il se termine s'il n'y a pas d'entrée (la valeur d'entrée est -1). Pour être sûr qu'il n'imprime pas de sauts de ligne supplémentaires, il utilise la valeur de registre, qu'il définit soit à 0 soit à 1. En raison de la façon dont je le configure, il ne se soucie pas des valeurs étrangères poussées sur la pile (par exemple la valeur du registre lorsqu'il le définit 1après l'impression d'un astérisque); ils restent sur la pile à la fin du programme mais ne font rien.
Je sais que cela peut être un peu déroutant depuis que j'ai utilisé 84*et 67*au lieu de " "et "*"respectivement, mais c'était parce que je n'avais pas envie de mettre des chaînes dans le programme pour une raison quelconque.