38
\$\begingroup\$

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.

Your code should not output any additional trailing newlines or spaces.

Testcases:

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

Scoring:

This is so fewest bytes wins!

\$\endgroup\$
  • 1
    \$\begingroup\$ I don't get what you mean with that “0x0A”. Where should that be output? Should that be kept, so “a␠b␊c” becomes “␠␠␠␊␠”? \$\endgroup\$ – manatwork May 25 '17 at 12:56
  • 1
    \$\begingroup\$ @manatwork 0x0A and 0x20 are the hexadecimal values for the Newline and Space characters respectively \$\endgroup\$ – Skidsdev May 25 '17 at 12:58
  • 1
    \$\begingroup\$ “output a number of whitespace characters (0x0A and 0x20)” – Where in the output should those newline characters be? \$\endgroup\$ – manatwork May 25 '17 at 13:00
  • 3
    \$\begingroup\$ 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 \$\endgroup\$ – Skidsdev May 25 '17 at 13:05
  • 1
    \$\begingroup\$ Got it. Thanks. \$\endgroup\$ – manatwork May 25 '17 at 13:06

102 Answers 102

1
\$\begingroup\$

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$);
\$\endgroup\$
  • \$\begingroup\$ 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) \$\endgroup\$ – 12Me21 Mar 3 '18 at 16:18
1
\$\begingroup\$

Mathematica, 30 bytes

Row@Table[" ",StringLength@#]&
\$\endgroup\$
1
\$\begingroup\$

Lua, 25 bytes

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

Same length as:

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

Try it online!

\$\endgroup\$
1
\$\begingroup\$

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.

\$\endgroup\$
1
\$\begingroup\$

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!

\$\endgroup\$
  • 1
    \$\begingroup\$ 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. \$\endgroup\$ – RJHunter May 26 '17 at 3:48
1
\$\begingroup\$

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 :(
\$\endgroup\$
1
\$\begingroup\$

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.

\$\endgroup\$
1
\$\begingroup\$

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 " "
\$\endgroup\$
  • \$\begingroup\$ 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. \$\endgroup\$ – CalculatorFeline May 26 '17 at 3:15
  • \$\begingroup\$ My bad I have it reading from the command line. I'll fix that tomorow when I get the chance. \$\endgroup\$ – Samuel May 26 '17 at 4:46
  • 1
    \$\begingroup\$ 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. \$\endgroup\$ – Cody Gray May 26 '17 at 12:01
  • \$\begingroup\$ 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. \$\endgroup\$ – Cody Gray May 26 '17 at 12:04
1
\$\begingroup\$

C, 57 33 30 bytes

-3 thanks to Tas.

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

Try it online!

\$\endgroup\$
1
\$\begingroup\$

PowerShell, 18 bytes

' '*"$args".Length

Try it online!

\$\endgroup\$
1
\$\begingroup\$

Python, 23 bytes

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

First time

\$\endgroup\$
  • \$\begingroup\$ 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. \$\endgroup\$ – TheLethalCoder May 26 '17 at 8:25
  • \$\begingroup\$ @TheLethalCoder fixed! \$\endgroup\$ – spark May 26 '17 at 8:31
  • \$\begingroup\$ 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). \$\endgroup\$ – Mego May 26 '17 at 8:50
1
\$\begingroup\$

Lua, 17 Bytes

s=s:gsub("."," ")

Simple regular expression substitution, replaces any character found with a space.

\$\endgroup\$
1
\$\begingroup\$

q/kdb+, 14 9 bytes

Solution:

{" "}each

Example:

q){" "}each"Hello, World"
"            "

Explanation:

Returns " " for each character of the input.

Notes:

I've made a shorter version (7 bytes) that does something similar:

{y}'" "

... but you have to prepend the input rather than append:

q)"hello world"{y}'" "
"           "
\$\endgroup\$
1
\$\begingroup\$

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.)

\$\endgroup\$
1
\$\begingroup\$

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.

\$\endgroup\$
  • \$\begingroup\$ 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. \$\endgroup\$ – Sophia Lechner Jul 10 '18 at 19:43
  • \$\begingroup\$ 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. \$\endgroup\$ – Sophia Lechner Jul 10 '18 at 19:57
1
\$\begingroup\$

Octave / Matlab, 25 23 bytes

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

Saved 2 bytes thanks to Giuseppe

Try it online!

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

Java (JDK), 84 bytes

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

Try it online!

\$\endgroup\$
  • \$\begingroup\$ Updated Sir @JoKing. \$\endgroup\$ – Syed Hamza Hassan Oct 22 '18 at 12:08
  • \$\begingroup\$ 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? \$\endgroup\$ – Jo King Oct 22 '18 at 12:14
  • \$\begingroup\$ Your suggestions are so useful, Thanks @JoKing \$\endgroup\$ – Syed Hamza Hassan Oct 23 '18 at 5:07
1
\$\begingroup\$

Wren, 22 bytes

Multiply the space by the length of the string.

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

Try it online!

\$\endgroup\$
1
\$\begingroup\$

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
\$\endgroup\$
1
\$\begingroup\$

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.

\$\endgroup\$
0
\$\begingroup\$

REXX 27 Bytes

say left("",length(arg(1)))
\$\endgroup\$
0
\$\begingroup\$

ZX80 (4K ROM version with sanity check)

~58 bytes (listing)

 1 INPUT A$
 2 IF A$="" THEN GO TO 1
 3 PRINT " ";
 4 LET A$=TL$(A$)
 5 IF A$="" THEN STOP
 6 GO TO 3

Line 2 can be removed to save RAMs. However, if an empty string is entered without line 2 then it will PRINT one space.

\$\endgroup\$
  • \$\begingroup\$ It is now later. \$\endgroup\$ – CalculatorFeline May 26 '17 at 3:08
0
\$\begingroup\$

TXR Lisp, 22 19 bytes:

(op regsub #/./" ")

Previously:

(op mapcar(ret[" "0]))

That is a function to which we can pass a string:

REPL:

1> (op regsub #/./" ")
#<interpreted fun: lambda #:rest-0164>
2> [*1 "abc"]
"   "

"   "
\$\endgroup\$
0
\$\begingroup\$

Clojurescript, 27 bytes

#(apply str(map(fn[]" ")%))

Because it's based on js, clojurescript doesn't care about arity errors. That saves one byte over the clojure eqivalent.

\$\endgroup\$
0
\$\begingroup\$

Windows batch, 115 bytes

@set i=%~1
@set p=0
@set/ac=-1
:N
@call set t=%%i:~%p%,1%%
@set/ac+=1
@set/ap+=1
@if "%t%" NEQ "" @goto N
@echo %c%

Re-used code from my answer in Is the checkbox not not unchecked?

\$\endgroup\$
0
\$\begingroup\$

Bash + Coreutils, 11 Bytes

tr -c \ \

\$\endgroup\$
0
\$\begingroup\$

Check, 6 bytes (non-competing)

," "*o

This is non-competing as I just made Check yesterday.

Pass the input by the command-line arguments as a list of code points, i.e. [72,101,108,108,111,44,32,87,111,114,108,100,33].

Explanation:

  • , gets the length of the input.
  • " " pushes an array containing 32 (for space).
  • * repeats that array as many times as the length of the input.
  • o displays the result as a list of characters.
\$\endgroup\$
0
\$\begingroup\$

Powershell, 22 Bytes

' '*(Read-Host).length
\$\endgroup\$
  • 1
    \$\begingroup\$ Not sure if Read-Host counts for input but " "*"$args".length is shorter anyway. Also there is not len property. That should be printing nulls. \$\endgroup\$ – Matt May 30 '17 at 12:17
  • \$\begingroup\$ Length property and Len are same \$\endgroup\$ – Sivaprasath Vadivel May 30 '17 at 13:32
  • \$\begingroup\$ "hello".Len is null on my system because that is a non-existent property where as "hello".Length returns 5. If that works for you then you have an alias or extent that I, and most, do not have. \$\endgroup\$ – Matt May 30 '17 at 14:14
  • \$\begingroup\$ Ok...That explains it \$\endgroup\$ – Sivaprasath Vadivel May 30 '17 at 14:15
0
\$\begingroup\$

Ruby, 12 11+1 = 13 12 bytes

Uses the -p flag. -1 byte from Martin Ender.

gsub /./,$/

Try it online!

\$\endgroup\$
0
\$\begingroup\$

J, 6 bytes

' '#~#

Try it online!

Explanation

' '#~#
   #~    repeat
' '      spaces
     #   for length of input
\$\endgroup\$
  • \$\begingroup\$ 4 bytes ''"0 outputs n newlines. \$\endgroup\$ – FrownyFrog Oct 28 '17 at 1:07
  • \$\begingroup\$ @FrownyFrog You should make your own answer, it's quite different from mine \$\endgroup\$ – Conor O'Brien Oct 28 '17 at 3:51

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.