Imprimer du texte invisible

38

Avec une chaîne en entrée, génère un nombre de caractères d'espacement (0x0A et 0x20) égal à la longueur de la chaîne.

Par exemple, étant donné la chaîne dont Hello, World!votre code aurait besoin pour générer exactement 13 caractères d'espacement et rien d'autre. Ceux-ci peuvent être n'importe quelle combinaison d'espaces et de nouvelles lignes.

Votre code ne doit pas générer de saut de ligne supplémentaire ni d'espaces.

Cas de test:

     Input      -> Amount of whitespace to output
"Hello, World!" -> 13
"Hi"            -> 2
"   Don't
Forget about
Existing
Whitespace!   " -> 45
""              -> 0
"             " -> 13
"
"               -> 1

Notation:

C'est du si peu d'octets gagnent!

Skidsdev
la source
1
Je ne comprends pas ce que vous entendez par «0x0A». Où cela devrait-il être produit? Est-ce que cela devrait être gardé, alors “a␠b␊c” devient “␠␠␠␊␠”?
manatwork
1
@manatwork 0x0Aet 0x20sont les valeurs hexadécimales des caractères Newline et Space respectivement
Skidsdev
1
“Afficher un nombre de caractères d'espacement (0x0A et 0x20)” - Où devraient se trouver ces caractères de nouvelle ligne dans la sortie?
manatwork
3
These can be any mix of spaces and newlinesVotre sortie peut correspondre à n’importe quel mélange d’espaces et de nouvelles lignes. Vous pouvez simplement créer des espaces si vous le souhaitez, comme tout le monde, ou simplement produire des nouvelles lignes. À vous de
jouer
1
Je l'ai. Merci.
manatwork

Réponses:

137

Whitespace , 311 150 77 68 65 46 41 38 octets

-3 octets grâce à Kevin Cruijssen
-27 octets grâce à Ephphatha


  
   	 	 
 
  
 	
	 			
	  
	
  
 


Essayez-le en ligne!

Un format visible

'\n  \n   \t \t \n \n  \n \t\n\t \t\t\t\n\t  \n\t\n  \n \n\n'

Explication (s = espace, t = tabulation, n = nouvelle ligne)

nssn     # label(NULL) - loop start
ssststsn # push 10 in the stack -> [10]
sns      # duplicate the top of the stack -> [10, 10]
sns      # duplicate the top of the stack -> [10, 10, 10]
tnts     # read a single char from input, pop the stack and store at that address -> [10, 10] [10:<char that was read>]
ttt      # pop the stack and put the value at that adress on stack -> [10,<char>] [10:<char>]
ntssn    # jump to label(0) - since label(0) is not defined, the interpreter jumps to the end of the program - if the top of the stack (char) is 0 -> [10] [10:<char>]
tnss     # pop the top of the stack and print as ascii -> [] [10:<char>]
nsnn     # go back to the label(NULL)
Barre
la source
25
En supposant que cela fonctionne réellement, cela remportera définitivement mon vote pour la réponse la plus créative
Skidsdev
24
Attends, où est la réponse? Est-ce invisible aussi?
Erik the Outgolfer
16
QU'EST-CE QUE LA MAGIE NOIRE? Votre code n'est même pas là! -1
Christopher
28
@Christopher plus comme WHITEspace MAGIC
Rod
12
Je savais que quelqu'un répondrait à cette question avec un programme d'espaces blancs
Draco18s
59

Japt , 1 octet

ç

Essayez-le en ligne!

À M
la source
22
Japt a-t-il sérieusement intégré cela? Merde ...
Skidsdev
22
@ Mayube et bien il a une fonction intégrée pour remplacer tous les caractères d'une chaîne par une autre, et le remplacement par défaut est un espace;)
Tom
4
Très agréable! Pour ceux qui exécutent le programme, vous pouvez ajouter le -Qdrapeau dans l'entrée pour mettre des guillemets autour de la sortie. TIO
Oliver
38

Haskell , 7 octets

(>>" ")

Essayez-le en ligne! Utilisation: (>>" ") "Hello, world!".

Étant donné deux listes (et les chaînes sont des listes de caractères dans Haskell), l' >>opérateur répète la deuxième liste autant de fois que la première liste contient des éléments. Définir " "comme deuxième argument signifie que nous concaténons autant d'espaces que la chaîne d'entrée est longue.


Alternative (même nombre d'octets):

(' '<$)

Essayez-le en ligne! Utilisation: (' '<$) "Hello, world!".

À partir d’une valeur et d’une liste, l’ <$opérateur remplace chaque valeur de la liste par la valeur donnée. Il en 5 <$ "abc"résulte [5,5,5], et ' ' <$ "abc"dans " ".

La fonction peut être écrite de la même manière (<$)' ', au cas où vous voudriez trouver plus de créatures marines dans mon code.

Laikoni
la source
18
C'est comme un adorable petit poisson sans fin
Taylor Scott
21

brainfuck , 18 octets

++++++++++>,[<.>,]

Essayez-le en ligne!

Imprime une nouvelle ligne pour chaque octet d'entrée. L'impression d'espaces à la place ajouterait 4 octets.

Nitrodon
la source
4
Pour la postérité: Mika Lammi a posté une réponse astucieuse de 16 octets qui a été enterrée. ,[>++++++++++.,]
Lynn
18

Python, 19 octets

lambda s:' '*len(s)
Gábor Fekete
la source
17

Retina, 3 4 octets

S\`.

Ancienne version, ne fonctionne pas car Retina imprime un saut de ligne final.

.
 

(La deuxième ligne contient un espace).

TheLethalCoder
la source
2
La rétine TIO est assez facile à utiliser. Voici votre réponse
Digital Trauma
2
Malheureusement, Retina imprime un saut de ligne de fin par défaut. Vous devrez prévoir \`pour éviter cela. Ensuite, son utilisation est plus courte S\`., car chaque caractère est remplacé par un saut de ligne (car il divise l’entrée autour de chaque caractère).
Martin Ender
@MartinEnder Ahhh n'était pas sûr qu'il s'agisse d'un problème de rétine ou de TIO. Merci pour l'aide sur la sauvegarde d'un octet!
TheLethalCoder
13

Brainfuck, 16 octets

Imprime les nouvelles lignes.

,[>++++++++++.,]
Mika Lammi
la source
11

C #, 28 24 octets

s=>"".PadLeft(s.Length);

Ancienne version utilisant le stringconstructeur pour 28 octets:

s=>new string(' ',s.Length);
TheLethalCoder
la source
3
Voulait faire exactement la même chose
LiefdeWen
1
@StefanDelport Il faut être rapide avec C # quand je suis dans le coin :) Linq veut faire de même, mais ils sont BEAUCOUP plus longs ...
TheLethalCoder
9

Rétine , 5 octets

\`.
¶

Essayez-le en ligne! Change tout en nouvelles lignes. Le \`supprime la nouvelle ligne supplémentaire que Retina devrait normalement afficher.

Neil
la source
9

Mathematica, 21 octets

StringReplace[_->" "]
Alephalpha
la source
1
Si l'entrée de liste de caractères était autorisée, cela pourrait être le cas #/._->" "&. Malheureusement, l'entrée est une chaîne et Characters [] le rend un octet plus long que votre solution :(
CalculatorFeline
1
Cela n'a-t-il pas besoin d'un #et d'un &? Par exempleStringReplace[#,_->" "]&
Ian Miller
3
@IanMiller Pas dans Mathematica 10.4 ou 11. reference.wolfram.com/language/ref/StringReplace.html
alephalpha
2
Ah ok. Je n'ai que 10.3. Peut-être temps de surclasser ...
Ian Miller
8

JavaScript ES6, 22 octets

a=>a.replace(/./g," ")

f=a=>a.replace(/./g," ");

var test = f("Hello, World!");
console.log(test, test.length);

À M
la source
3
Hein, je me suis dit: "Oh, sachez que ça devrait être s=>s.replace(/[^]/g," ")un octet plus long que l'autre solution". Il ne m'est pas
venu à l'esprit
8

C, 31 octets

f(char*c){puts(""),*c++&&f(c);}
Sigvaldm
la source
1
Comment cela diffère-t-il de votre autre réponse C ? Il est clair que celui-ci est plus court, mais devriez-vous simplement éditer l’autre? Devrait-il s'agir d'une réponse avec deux solutions?
Tas
4
@Tas Tout d'abord, je pense que dans un certain sens, je pense que ce n'est pas aussi bon que l'autre, même s'il est plus court, car il ne compile pas réellement tel quel. C'est juste une fonction donc vous devez écrire une routine principale autour d'elle. Cependant, il est plus court et d’autres semblent ne publier que des fonctions. Clairement, ce sont deux solutions très différentes. L’un n’est pas l’affinement de l’autre, il est donc logique que ce soit deux réponses différentes. Cependant, je suis nouveau dans cette communauté. Le consensus est-il qu'un utilisateur ne publie qu'une seule réponse? Si c'est le cas, je le ferai la prochaine fois.
Sigvaldm
La virgule doit-elle vraiment être une virgule et non un point-virgule?
Oskar Skog
1
@OskarSkog eh bien, dans ce cas, cela n'a pas beaucoup d'importance, car il n'y a pas de lhs
chat.
1
@OskarSkog Oui, cela devrait être une virgule. Comme @cat le dit, cela n'a pas vraiment d'importance dans ce cas, mais j'ai choisi une virgule comme variante :) L'opérateur de virgule évalue deux expressions (par exemple, i++, j++une boucle for) et renvoie celle qui se trouve le plus à droite. Un détail important est que la récursivité doit s'arrêter d'une manière ou d'une autre. &&n'évalue pas si c'est faux si c'est faux. *c++évalue false lorsqu'il pointe vers la terminaison NULL de la chaîne.
Sigvaldm
7

Excel VBA, 17 15 octets

Fonction de fenêtre immédiate VBE anonyme qui prend en entrée la cellule [A1]et en sortie des espaces de longueur de l'entrée dans la fenêtre immédiate VBE

?Spc([Len(A1)])
Taylor Scott
la source
7

05AB1E , 3 octets

vð?

Essayez-le en ligne!

v   # For each character...
 ð? #    Output a space without a newline

Autres solutions sur 3 octets (Merci à Magic Octopus Urn et à Kevin Cruijssen pour la plupart)

v¶? # For each character print a newline (without adding a newline)
võ, # For each character print the empty string with a newline
gð× # Get the length, concatenate that many copies of space
g¶× # Get the length, concatenate that many copies of newline
Sð: # Split, push a space, replace each char in input with a space
ðs∍ # Push ' ', swap, make the string of spaces as long as the input was
võJ # For each char, push a space and ''.join(stack)
v¶J # For each char, push a newline and ''.join(stack)
€ðJ # For each char, push a space. Then ''.join(stack)
ۦJ # For each char, push a newline. Then ''.join(stack)
Riley
la source
1
Autre solution: gð×le reste que j'ai trouvé était au-dessus de 3 comme:õ‚.B¤
Urne Magique Octopus
2
Un autre amusant:Sð:
Urne Magique Octopus
1
Plus de plaisir:ðs∍
Urne magique Octopus
Quelques autres alternatives 3-byters: võJ/ v¶J; €ðJ/ €¶J. Et comme une séquence de caractères en tant qu'E / S est autorisée par défaut lorsque des chaînes d'E / S sont demandées, certaines versions à 2 octets sont possibles: €ð/ €¶/ εð/ ε¶et ð:/ ¶:. Bien qu’il s’agisse d’un défi assez ancien et que toutes les autres réponses utilisent des chaînes réelles, je pourrais comprendre si vous le conserviez en tant que chaîne d’entrée / sortie.
Kevin Cruijssen
6

Octave, 14 octets

@(a)["" 0*a+32]
Alephalpha
la source
6

CJam , 4 octets

q,S*

Essayez-le en ligne!

Explication

q     e# Read input
 ,    e# Length
  S*  e# Repeat space that many times
Chat d'affaires
la source
6

C, 45 octets

Utilisation de main. Compilez avec gcc, ignorez les avertissements.

main(c,v)char**v;{while(*(v[1]++))puts("");}

Usage:

$./a.out "Hello, World!"
Sigvaldm
la source
1
Toute raison pour laquelle vous ne pouvez pas mettre char**ven main(c,v)?
CalculatriceFeline
@CalculatorFeline Au moins la compilation de GCC 6.3.1 avec gcc main.cne semble pas permettre de mélanger la définition de fonction ANSI avec la définition de fonction K & R, main(c,char**v)elle ne compilera donc pas. Je dois faire main(int c,char**v)ou main(c,v)char**v;dont le dernier est plus court de 3 octets. Par hasard, vous ne connaissez aucun drapeau ou quelque chose qui permette de mélanger ces styles?
Sigvaldm
3
Non, vous ne pouvez pas les mélanger. Aucun drapeau ne le permet. Le style K & R est depuis longtemps obsolète, utilisé uniquement à des fins de golf et de dissimulation de code.
Cody Grey
Et je suppose que supprimer char**ventièrement ne compile pas non plus.
CalculatriceFeline
@CalculatorFeline Si vous omettez char**complètement, le compilateur l'interprétera comme int. Si je ne me trompe pas, vous obtenez une erreur en essayant de déréférencer un lien intet même si vous ne le faites pas, le programme ne ferait pas ce que vous espériez, étant donné qu’il en intconsomme plusieurs charet donc vous n’obtenez jamais de NULLvaleur.
Sigvaldm
5

JavaScript (ES6), 23 octets

s=>" ".repeat(s.length)
Justin Mariner
la source
5

Excel, 18 octets

=REPT(" ",LEN(A1))

Assez ennuyeux et un octet plus long que la réponse VBA .

Rôti d'ingénieur
la source
5

> <> , 7 octets

i0(?;ao

Le programme est une boucle

i         //Push a character from the input onto the stack
 0        //Add a 0 to the stack
  (       //Pop the top two values of the stack, and push a 1 if the second is less than the first (In this case, the input has all been read), else push a 0
   ?      //Pop the top of the stack. If the value is a 0, skip the next instruction
    ;     // Terminate the program
     a    // Add a newline to the stack
      o   // Pop the top character of the stack and print it
Agourd
la source
5

Hexagone , 12 11 octets

-1 octet grâce à Martin Ender

,<.;.M@.>~8

Essayez-le en ligne!

Voici l'hexagone élargi:

  , < . 
 ; . M @
. > ~ 8 .
 . . . .
  . . .

Tant qu'il y a entrée, ce code s'exécute:

,        # Get input
 <       # Turn right (SE) if we didn't get EOF
  M8     # Set the memory edge to 778 which is 10 (mod 256)
    ;    # Print as a character (newline)
     >   # Redirect East
      ~  # Multiply by -1. This makes the pointer go to the top when it runs off the edge
       8 # Effectively a no-op.

Lorsque EOF est atteint:

,    # Get input
 <   # Turn left (NE)
  8  # Effectively a no-op
   @ # End program
Riley
la source
Vous pouvez imprimer un saut de ligne de trois octets avec M8;(ce qui donne 778 = 10 (mod 256)). Cela devrait vous permettre de déplacer le ~où le ;est maintenant, en sauvegardant un octet.
Martin Ender
5

Perl 5 , 7 octets

-1 octet grâce à @Xcali

6 octets de code + -pdrapeau.

y// /c

Essayez-le en ligne!

Assez simple: remplace chaque caractère par un espace.

Dada
la source
1
y// /cest un octet plus court.
Xcali
5

Python 2, 25 octets

exec'print;'*len(input())

-2 octets grâce à Loovjo
-2 octets dans le code invalide grâce à totalementhuman: p
-3 octets

HyperNeutrino
la source
1
Vous pouvez supprimer les parens après execcar c'est un mot clé dans Python 2
Loovjo
1
@ Loovjo Oh oui, Python 2. Merci!
HyperNeutrino
Je sais que c'est vieux, mais ça exec'print;'*len(input())marche.
totalement humain
1
@totallyhuman oh vrai, merci: P
HyperNeutrino
1
@TheMatt n'est probablement pas dans les spécifications du problème, mais c'est l'une des méthodes d'entrée acceptables par défaut. Essayez de chercher sur meta, je ne veux pas aller le chercher tout de suite
HyperNeutrino
4

PHP, 36 octets

<?=str_repeat('
',strlen($argv[1]));

Essayez-le en ligne!

Sortie de nouvelles lignes car les espaces sont trop courants

Skidsdev
la source
$argnau lieu de $argv[1]sauvegarder 4 octets. Courir avec l' -Foption
Jörg Hülsermann
4

Cubix , 6 octets

Wahoo un 6 octets!

wi?@oS

Cubifié

  w
i ? @ o
  S
  • i obtient l'entrée
  • ? test de la pile
    • si négatif (EOI) redirige vers le wchangement de voie qui va jusqu'à l' @arrêt
    • si 0 (nul) s'arrête, cela ne devrait pas être touché
    • si l’ Sowespace sur la pile est positif , afficher la sortie et changer de voie suri

Essayez-le en ligne!

MickyT
la source
1
Doux, ce n'est pas trop souvent qu'un programme Cubix est court :-)
ETHproductions
4

C, 32 octets

Essayez en ligne modifiant des caractères dans des espaces

f(char*t){(*t=*t?32:0)&&f(t+1);}

C, 37 octets

Essayez en ligne Rembourrant la fin de chaîne avec sa longueur

f(char*t){printf("%*c",strlen(t),0);}
Khaled.K
la source