Imprimir texto invisible


38

Dada una cadena como entrada, genera una cantidad de caracteres de espacio en blanco (0x0A y 0x20) igual a la longitud de la cadena.

Por ejemplo, dada la cadena, Hello, World!su código necesitaría generar exactamente 13 caracteres de espacio en blanco y nada más. Estos pueden ser cualquier combinación de espacios y líneas nuevas.

Su código no debe generar líneas o espacios finales adicionales.

Casos de prueba:

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

Tanteo:

Este es el por lo que gana menos bytes!


1
No entiendo lo que quieres decir con ese "0x0A". ¿Dónde debería ser eso? ¿Debería mantenerse eso para que "a “b␊c" se convierta en "␠␠␠␊␠"?
manatwork

1
@manatwork 0x0Ay 0x20son los valores hexadecimales para los caracteres Newline y Space respectivamente
Skidsdev

1
“Muestra una cantidad de caracteres de espacio en blanco (0x0A y 0x20)” - ¿Dónde en la salida deberían estar esos caracteres de nueva línea?
manatwork

3
These can be any mix of spaces and newlinesSu salida puede ser cualquier combinación de espacios y nuevas líneas, puede simplemente generar espacios si lo desea, como todos los demás, o puede simplemente generar nuevas líneas.
Depende de

1
Lo tengo. Gracias.
manatwork

Respuestas:


137

Espacio en blanco , 311 150 77 68 65 46 41 38 bytes

-3 bytes gracias a Kevin Cruijssen
-27 bytes gracias a Ephphatha


  
   	 	 
 
  
 	
	 			
	  
	
  
 


Pruébalo en línea!

Un formato visible

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

Explicación (s = espacio, t = tabulación, n = nueva línea)

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)

25
Suponiendo que esto realmente funcione, esto definitivamente gana mi voto para la respuesta más creativa
Skidsdev

24
Espera donde esta la respuesta? ¿Es invisible también?
Erik the Outgolfer

16
QUE MAGIA NEGRA ES ESTO. ¡Tu código ni siquiera está allí! -1
Christopher

28
@Christopher más como WHITEspace MAGIC
Rod

12
Sabía que alguien respondería esta pregunta con un programa de espacios en blanco
Draco18s

59

22
¿Japt en serio tiene algo para esto? Maldición ...
Skidsdev

22
@Mayube bueno, tiene una función incorporada para reemplazar todos los caracteres en una cadena por otra, y el reemplazo predeterminado es un espacio;)
Tom

44
¡Muy agradable! Para aquellos que ejecutan el programa, puede agregar la -Qbandera en la entrada para poner comillas alrededor de la salida. TIO
Oliver

38

Haskell , 7 bytes

(>>" ")

Pruébalo en línea! Uso: (>>" ") "Hello, world!".

Dadas dos listas (y las cadenas son listas de caracteres en Haskell), el >>operador repetirá la segunda lista tantas veces como la primera lista tenga elementos. Establecer " "como segundo argumento significa que concatenamos tantos espacios como la cadena de entrada es larga.


Alternativa (mismo recuento de bytes):

(' '<$)

Pruébalo en línea! Uso: (' '<$) "Hello, world!".

Dado un valor y una lista, el <$operador reemplaza cada valor de la lista con el valor dado. Por lo tanto, 5 <$ "abc"da como resultado [5,5,5], y ' ' <$ "abc"en " ".

La función se puede escribir de manera equivalente (<$)' ', en caso de que desee encontrar algunas criaturas marinas más en mi código.


18
Es como un adorable pez sin aletas
Taylor Scott



17

Retina, 3 4 bytes

S\`.

La versión anterior no funciona porque Retina imprime un avance de línea final.

.
 

(La segunda línea contiene un espacio).


2
La retina TIO es bastante fácil de usar. Aquí está su respuesta
Trauma digital

2
Desafortunadamente, Retina imprime un salto de línea final por defecto. Tendrás que anteponer \`para evitar eso. Sin embargo, es más corto de usar S\`., lo que reemplaza cada carácter con un salto de línea (porque divide la entrada alrededor de cada carácter).
Martin Ender

@MartinEnder Ahhh no estaba seguro si eso era algo de Retina o TIO. ¡Gracias por la ayuda para guardar un byte allí!
TheLethalCoder



11

C #, 28 24 bytes

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

Versión antigua que usa el stringconstructor para 28 bytes:

s=>new string(' ',s.Length);

3
Quería hacer exactamente lo mismo
LiefdeWen

1
@StefanDelport Tengo que ser rápido con C # cuando estoy cerca :) Hay enfoques de Linq para hacer lo mismo, pero todos son MUCHO más largos ...
TheLethalCoder


9

Mathematica, 21 bytes

StringReplace[_->" "]

1
Si se permitió la entrada de charlist, esto podría ser #/._->" "&. Lamentablemente, la entrada es una cadena y los caracteres [] hacen que sea un byte más largo que su solución :(
CalculatorFeline

1
¿No necesita esto a #y a &? Por ejemploStringReplace[#,_->" "]&
Ian Miller

3
@IanMiller No está en Mathematica 10.4 o 11. reference.wolfram.com/language/ref/StringReplace.html
alephalpha

2
Ah ok Solo tengo 10.3. Tal vez es hora de actualizar ...
Ian Miller

8

JavaScript ES6, 22 bytes

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

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

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


3
Huh, pensé "oh maldición, tendría que ser s=>s.replace(/[^]/g," "), un byte más largo que la otra solución". No se me ocurrió que se permitan nuevas líneas en la salida: P
ETHproductions

8

C, 31 bytes

f(char*c){puts(""),*c++&&f(c);}

1
¿Cómo difiere esto de su otra respuesta C ? Claramente, este es más corto, pero ¿simplemente debería haber editado el otro? ¿Debería ser solo una respuesta con dos soluciones?
Tas

44
@Tas Antes que nada, creo que en cierto sentido siento que esto no es tan bueno como el otro, aunque es más corto, porque en realidad no se compila tal como está. Es solo una función, por lo que debe escribir alguna rutina principal a su alrededor. Sin embargo, es más corto y otros parecen publicar solo funciones. Claramente son dos soluciones muy diferentes. Uno no es el refinamiento del otro, así que para mí tiene sentido que sean dos respuestas diferentes. Sin embargo, soy nuevo en esta comunidad. ¿Existe el consenso de que un usuario solo publica una respuesta? Si es así, lo haré la próxima vez.
sigvaldm

¿La coma debería ser realmente una coma y no un punto y coma?
Oskar Skog

1
@OskarSkog bien, en este caso no importa mucho porque no hay lhs
gato

1
@OskarSkog Sí, debería ser una coma. Como dice @cat, realmente no importa en este caso, pero elegí una coma para la variación :) El operador de coma evalúa dos expresiones (por ejemplo, i++, j++en un bucle for) y devuelve la más a la derecha. Un detalle importante es que la recursión tiene que detenerse de alguna manera. &&no evalúa es rhs si es lhs es falso. *c++evalúa falso cuando apunta a la terminación nula de la cadena.
sigvaldm


7

Excel VBA, 17 15 bytes

Función de ventana inmediata VBE anónima que toma la entrada de la celda [A1]y genera espacios de longitud de la entrada a la ventana inmediata VBE

?Spc([Len(A1)])

7

05AB1E , 3 bytes

vð?

Pruébalo en línea!

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

Otras soluciones de 3 bytes (Gracias Urna de pulpo mágico y Kevin Cruijssen por la mayoría de estos)

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)

1
Otra solución: gð×el resto se me ocurrió por encima de 3 como:õ‚.B¤
Urna de pulpo mágico

2
Otra divertida:Sð:
Magic Octopus Urn

1
Más diversión:ðs∍
Urna mágica del pulpo

Algunas alternativas más de 3 bytes: võJ/ v¶J; €ðJ/ €¶J. Y dado que una secuencia de caracteres como E / S está permitida de manera predeterminada cuando se solicitan cadenas de E / S, son posibles algunas versiones de 2 bytes: €ð/ €¶/ εð/ ε¶y ð:/ ¶:. Aunque dado que este es un desafío bastante antiguo y todas las demás respuestas usan cadenas reales, podría entender si lo mantuviera como E / S de cadena.
Kevin Cruijssen



6

C, 45 bytes

Usando main. Compila con gcc, ignora las advertencias.

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

Uso:

$./a.out "Hello, World!"

1
Cualquier razón por la cual no se puede poner char**ven main(c,v)?
CalculatorFeline

@CalculatorFeline Al menos, la compilación de GCC 6.3.1 simplemente gcc main.cno parece permitir mezclar la definición de la función ANSI con la definición de la función K&R, por main(c,char**v)lo que no se compilará. Tengo que hacer main(int c,char**v)o main(c,v)char**v;el último es 3 bytes más corto. ¿No conocerías por casualidad alguna bandera o algo que permita mezclar estos estilos?
sigvaldm

3
No, no puedes mezclarlos. No hay bandera que lo permita. El estilo K&R es obsoleto desde hace mucho tiempo, se usa solo para golf de código y para ofuscación.
Cody Gray

Y supongo que eliminar por char**vcompleto tampoco compila.
CalculatorFeline

@CalculatorFeline Si omite por char**completo, el compilador lo interpretará como int. Si no me equivoco, obtienes un error al intentar desreferenciar inte, incluso si no lo hicieras, el programa no haría lo que esperabas, ya que un intconsume varios charsegundos y, por lo tanto, nunca obtienes un NULLvalor.
sigvaldm



5

> <> , 7 bytes

i0(?;ao

El programa es un bucle.

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


5

Hexagonía , 12 11 bytes

-1 byte gracias a Martin Ender

,<.;.M@.>~8

Pruébalo en línea!

Aquí está el hex expandido:

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

Mientras hay entrada, este código se ejecuta:

,        # 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.

Cuando se alcanza EOF:

,    # Get input
 <   # Turn left (NE)
  8  # Effectively a no-op
   @ # End program

Puede imprimir un salto de línea en tres bytes con M8;(lo que da 778 = 10 (mod 256)). Eso debería permitirle mover el lugar ~donde ;está ahora, guardar un byte.
Martin Ender


5

Python 2, 25 bytes

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

-2 bytes gracias a Loovjo
-2 bytes en el código inválido gracias a totalmente humano: p
-3 bytes


1
Puede eliminar los parens después execya que es una palabra clave en Python 2
Loovjo

1
@Loovjo Oh, claro, Python 2. ¡Gracias!
HyperNeutrino

Sé que esto es viejo y demás, pero exec'print;'*len(input())funciona.
totalmente humano

1
@totallyhuman oh cierto, gracias: P
HyperNeutrino

1
@TheMatt probablemente no está en las especificaciones del problema, pero es uno de los métodos de entrada aceptables predeterminados. Intenta buscar meta, no quiero ir a buscarlo ahora mismo
HyperNeutrino


4

Cubix , 6 bytes

Wahoo un 6 byter!

wi?@oS

Cubified

  w
i ? @ o
  S
  • i obtiene entrada
  • ? probar la parte superior de la pila
    • si es negativo (EOI) redirige al wcambio de carril que se @detiene
    • si 0 (nulo) se detiene, esto no debería ser golpeado
    • si hay Sowespacio de empuje positivo para la pila, salida y cambie de carril ai

Pruébalo en línea!


1
Dulce, no es muy frecuente que un programa Cubix sea tan corto :-)
ETHproductions

4

C, 32 bytes

Intenta modificar personajes en línea en espacios

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

C, 37 bytes

Pruebe en línea rellenando el extremo izquierdo de la cadena con su longitud

f(char*t){printf("%*c",strlen(t),0);}

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.