# Print invisible text

Given a string as input, output a number of whitespace characters (0x0A and 0x20) equal to the length of the string.

For example, given the string Hello, World! your code would need to output exactly 13 whitespace characters and nothing else. These can be any mix of spaces and newlines.

## Testcases:

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


## Scoring:

This is so fewest bytes wins!

• I don't get what you mean with that “0x0A”. Where should that be output? Should that be kept, so “a␠b␊c” becomes “␠␠␠␊␠”? – manatwork May 25 '17 at 12:56
• @manatwork 0x0A and 0x20 are the hexadecimal values for the Newline and Space characters respectively – Skidsdev May 25 '17 at 12:58
• “output a number of whitespace characters (0x0A and 0x20)” – Where in the output should those newline characters be? – manatwork May 25 '17 at 13:00
• These can be any mix of spaces and newlines Your output can be any mix of spaces and newlines, you can just output spaces if you want, like everyone else, or you can just output newlines. It's up to you – Skidsdev May 25 '17 at 13:05
• Got it. Thanks. – manatwork May 25 '17 at 13:06

? .'
,^\


Try it online!

-1 byte thanks to Jo King realizing it's shorter to just turn into two lines

Since the program never uses the return values of anything other than , and ', and the order spaces are printed in doesn't matter (since they're indistinguishable), ^ can be used backwards: instead of printing a space then recurring, this recurs then prints a space.

Ungolfed, this looks something like:

 @
?
|\
, \
^
/ \
/   .
|    \
|     '
|


If tabs are legal whitespace alongside spaces and newlines:

? .
,^9


Try it online!

thanks to Jo King.

• Note that this uses ? over _ because end of input returns -1, and ? tests for a positive center, but _ only tests for a left not equal to 0. – Unrelated String Nov 16 '19 at 22:26
• The challenge spec seems to indicate that the only acceptable whitespace characters are space and newline, but that's still a great idea. – Unrelated String Nov 17 '19 at 11:16

# Gol><>, 5 bytes

iEH~a


Try it online!

Explanation

i      Push 1 char from the input to the stack
E     If EOF was reached execute next, else skip 1
H    Output the entire stack as chars and halt
~a  Discard the last read char and push 0x0a to the stack


Since Gol><> is actually a 2D language the programm counter loops back to the other side when it hits a border. This is used to loop back to the beginning after the discard & 0x0a push step.

# Labyrinth, 6 bytes

 ,
\"@


Try it online!

A character input command, a newline-printing command, a halt command, and a three-way junction for branching. I don't think we can do better than that. (A conditional halt without a three-way junction should involve division by zero, which gets unnecessarily verbose)

    Start at the first valid command
,   Take a character input (-1 on EOF)
"   A no-op at 3-way junction: turn left if negative, turn right if positive
(we can assume the input string consists of printable ASCII, which is > 0)

\   If positive: print a newline, turn backwards
"   3-way junction: top > 0, so turn right (which is reflected to left by a wall)
,   Repeat from the start of the program until it hits EOF

@   If EOF, halt


# GolfScript, 3 bytes

,n*


Try it online!

pretty self explanatory, and I don't think there is a way to make it smaller unless there is some really weird thing with % or /.

• It's not “self-explanatory” for those who don't know GolfScript… – xigoi Nov 17 '20 at 16:43
• @xigoi well, it is as far as golfscript programs go. The comma gets the length of the input, the n is a newline, and the * repeats the string. – Samuel Waller Nov 18 '20 at 14:00

# SmileBASIC 3, 22 bytes

Asks for a string from the console as input, then prints length spaces. PRINT (or ? here) adds a trailing newline by default, so we use the ; to disable it.

LINPUT A$?" "*LEN(A$);

• This technically isn't valid since LINPUT doesn't accept newlines, so you'll have to define a function (also ; isn't required because PRINT doesn't really output newlines) – 12Me21 Mar 3 '18 at 16:18

## Mathematica, 30 bytes

Row@Table[" ",StringLength@#]&


# Lua, 25 bytes

for i=1,#...do
print()end


Same length as:

io.write((' '):rep(#...))


Try it online!

# tcl, 19

regsub -all . $s \  demo To test it, click "Run it" button and then select the white space on the white bottom area. A better test is to add a space and a letter before the ] as I describe: puts [regsub -all .$s \  x]
^^ Two spaces here


and it will output the count of characters of each string exactly equal to the ones on the question.

# Rust, 23 bytes

|s|" ".repeat(s.len());


First time using Rust so not 100% sure I've got everything correct, let me know if I need to change anything. I couldn't work out how to test this, as I'm still new to it, but judging from the documentation it should work. Also any improvements are more than welcome!

• Hi fellow newbie! I tried to rig up enough surrounding code to make a Try It Online link for this answer (and any similar Rust entries). I did get somewhere but I needed to add a type declaration at the cost of an extra 5 bytes (for a total of 28 bytes) to get it to compile. – RJHunter May 26 '17 at 3:48

# Brain-Flak, 28 bytes

{{}<>((()()()()()){})<>}<>{}


Try it online!

{{}                    }     # For every input character...
((()()()()()){})        #    Push 10...
<>                <>      #    on the other stack
<>   # Switch to the stack with all of the newlines
{} # Pop a newline because the interpreter prints a newline :(


# pb - 17 bytes

^w[B!0]{>}<vb[32]


Goes to the last character of the input and puts a space on the canvas cell representing it. Because output in pb is 2D, the empty cells before it are automatically filled in with spaces when it's outputted.

# x64 ASSEMBLY (linux nasm) - 131 bytes

mov r8, [rsp+16]
mov rdi, 1
mov rdx, 1
mov rax, 1
mov rsi,n
l:syscall
inc r8
cmp byte [r8],0x00
jnz l
mov rax,60
syscall
n: db " "


build and run with:

nasm -felf64 invisible_golfed.asm
ld invisible_golfed.asm
./a.out


This will give the warning

ld: warning: cannot find entry symbol _start; defaulting to 00000000000400080


warning free version below

without warnings - 152

global _start
_start:mov r8, [rsp+16]
mov rdi, 1
mov rdx, 1
mov rax, 1
mov rsi,n
l:syscall
inc r8
cmp byte [r8],0x00
jnz l
mov rax,60
syscall
n: db " "

• When I give the program "When I give the program" on STDIN, it only prints a single space. I suggest your read the I/O defaults and revise your answer. Essentially, revise your code to take input from STDIN. – CalculatorFeline May 26 '17 at 3:15
• My bad I have it reading from the command line. I'll fix that tomorow when I get the chance. – Samuel May 26 '17 at 4:46
• Your byte-counting is not correct. With assembly language, we count th bytes of the machine code that is generated, not the characters in the instruction mnemonics. Beyond that problem, there's lots of room for optimization here. Save several bytes by changing instructions of the form MOV Rxx, x to MOV Exx, x, where x is an immediate value <= 32 bits, taking advantage of the fact that the upper 32-bits of a 64-bit register are implicitly cleared. I also don't know why you define n separately, instead of embedding it into the instruction: MOV ESI, ' '. That gets me down to 48 bytes. – Cody Gray May 26 '17 at 12:01
• You can save even more by changing all but the first instruction in the MOV reg, 1 sequence to a reg-reg move, which has a much shorter encoding: mov eax, 1+mov edx, eax+mov edi, eax. That's only 36 bytes. – Cody Gray May 26 '17 at 12:04

# C, 5733 30 bytes

-3 thanks to Tas.

f(int*a){while(*a++)puts("");}


Try it online!

' '*"$args".Length  Try it online! Python, 23 bytes print(''*len(input()))  First time • Assuming where input comes from is usually frowned upon here. You need to wrap the code in a program/method or ask the user for input. – TheLethalCoder May 26 '17 at 8:25 • @TheLethalCoder fixed! – spark May 26 '17 at 8:31 • You don't need the space between , and ' in your second version. However, that second version isn't a full program - you need a print call, and you need to fix your str.replace call (not enough arguments). – user45941 May 26 '17 at 8:50 # Lua, 17 Bytes s=s:gsub("."," ") Simple regular expression substitution, replaces any character found with a space. # Z80Golf, 9 bytes 00000000: d5cd 0380 3001 763e 20 ....0.v>  Try it online! Disassembly:  push de ; push$0000
call $8003 ; getchar(A) jr nc, k ; jump if not EOF halt k:ld a, ' ' ; replace A with space ; memory from$000a through $7fff is$00=NOP...
; PC reaches \$8000=putchar(A) and RETs to pushed address.


(If you remove the last two bytes, this is a cat program.)

# dc, 12 bytes

Z256r^25.5/P


Try it online!

Takes input from the stack, outputs newlines to stdin.

I know there's two dc answers here already, but this one uses a different approach, with math! Plus it's 6 bytes shorter, so I guess that's all right.

# Explanation

One of dc's three explicit printing commands is P, which takes a number and outputs it as a base 256 (technically base UCHAR_MAX+1, works on my machine) byte stream. So I need to feed it the number (where n is the length of the given string, and 10 is the codepoint of the linefeed character):

   10*256^(n-1) + 10*256^(n-2) + ... + 10
= 10 * (256^(n-1) + 256^(n-2) + ... + 1)   (factoring out 10)
= 10 * (256^n - 1) / (256 - 1)             (geometric series formula)
= (256^n - 1) / 25.5                       (combining constants)
~= (256^n) / 25.5                           (because dc's default precision is 0)


The code is a straightforward calculation of this number, followed by P.

• Argh, doesn't handle the empty string (P outputs a NUL when it pops a 0). I guess I could say it's outputting a null-terminated string...seems like a stretch though. – Sophia Lechner Jul 10 '18 at 19:43
• Also, it's only on TIO that you can tell. On my machine a NUL gets eaten silently so it works. I still feel badly about it. – Sophia Lechner Jul 10 '18 at 19:57

# Octave / Matlab, 25 23 bytes

@(x)repmat(' ',size(x))


Saved 2 bytes thanks to Giuseppe

Try it online!

• I think the f= is unnecessary; anonymous functions / function handles are perfectly acceptable on PPCG. – Giuseppe Jul 10 '18 at 22:27
• You can also include a link to Try it online! for Octave so others can test your answer. – Giuseppe Jul 10 '18 at 22:28

# Java (JDK), 84 bytes

static String m(String n){int i=0;String d="";while(i++<n.length())d+=" ";return d;}


Try it online!

• Updated Sir @JoKing. – Syed Hamza Hassan Oct 22 '18 at 12:08
• This does not address my other concerns, i.e. initialising d and reusing the function. Also, wouldn't it be shorter to use an anonymous lambda? – Jo King Oct 22 '18 at 12:14
• Your suggestions are so useful, Thanks @JoKing – Syed Hamza Hassan Oct 23 '18 at 5:07

# Wren, 22 bytes

Multiply the space by the length of the string.

Fn.new{|a|" "*a.count}


Try it online!

# Brain-Flak, 28 bytes

{}{{}<>((()()()()()){})<>}<>


Try it online!

{}                  pop one input character (because Brain-Flak always outputs a trailing newline
{                   for each input character
{}                pop that character
<>                switch to other stack
((()()()()()){})  push 10 (newline)
<>                back to input stack
}
<>                  switch to other stack. This is printed implicitly when the program ends


# Keg,-lp-ir, 3 bytes

( ,


Try it online!

This takes input as characters and prints a space for each character The -lp flag makes the length() function take input if the stack is empty and the -ir flag ensures that the implicit input is as characters.

# x86-16 ASM, IBM PC DOS, 11 bytes

Binary:

00000000: 8a0e 8000 49b8 200a cd10 c3              ....I. ....


Unassembled:

D1 EE       SHR  SI, 1          ; SI to 80H (SI intialized at 100H)
AC          LODSB               ; load string length into AL
91          XCHG AX, CX         ; put input string length into CX
49          DEC  CX             ; remove leading whitespace from length
AC          LODSB               ; load whitespace delimiter into AL
B4 0A       MOV  AH, 0AH        ; BIOS "write character CX number of times" function
CD 10       INT  10H            ; call BIOS, display to console


Explanation:

Input is via command line, though all that's important is the length. Command line input length is always stored at memory address DS:0080H in DOS, so put that into CX. DOS includes the space between the executable name and the command line args string in this number.

For example: in FOO.COM Hello, length is 6 and command line string is " Hello", or calling as FOO.COM/Hello, command line string is "/Hello" (Note: those are the the only valid characters for the character immediately after the executable name). This first character (will be a space when called normally) is what is displayed as the "invisible text" for output. This builds in a handy little "debug mode" where you can use a slash instead of a space to actually be able to test your output is the right length.

Then, use the IBM PC BIOS's INT 10H "Write character only at cursor position" (0AH) function that writes the same character CX number of times.

Example Output:

Admittedly, displaying 13 chars of whitespace is not very interesting in a screenshot. However, by using a slash instead of a space ("debug mode") you can actually see that you are displaying the right number of chars.

# naz, 40 bytes

2a2x1v1x1f1r3x1v2e0m4a8m1o1f0x1x2f0a0x1f


Works for any input string terminated with the control character STX (U+0002).

Explanation (with 0x commands removed)

2a2x1v                 # Set variable 1 equal to 2
1x1f1r3x1v2e           # Function 1
# Read a byte of input
0m4a8m1o1f # Otherwise, output a space and jump back to the start of function 1
1x2f0a                 # Function 2
# Add 0 to the register
1f                     # Call function 1


# GolfScript, 5 bytes

," "*


Try it online!

S0d3-' \k:W@


Try it online!

# Python 3, 23 bytes

print(' '*len(input()))


Try it online!

# Java, 24 bytes

s->s.replaceAll("."," ")


TIO

# Pyth, 4 bytes

*dtl


Try it online!