47
\$\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!

asked May 25, 2017 at 12:50
\$\endgroup\$
13
  • 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\$ Commented May 25, 2017 at 12:56
  • 1
    \$\begingroup\$ @manatwork 0x0A and 0x20 are the hexadecimal values for the Newline and Space characters respectively \$\endgroup\$ Commented May 25, 2017 at 12:58
  • 1
    \$\begingroup\$ "output a number of whitespace characters (0x0A and 0x20)" – Where in the output should those newline characters be? \$\endgroup\$ Commented May 25, 2017 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\$ Commented May 25, 2017 at 13:05
  • 1
    \$\begingroup\$ Can we assume the input will only have printable characters? \$\endgroup\$ Commented May 25, 2017 at 13:30

146 Answers 146

4
\$\begingroup\$

Cubix, 6 bytes

Wahoo a 6 byter!

wi?@oS

Cubified

 w
i ? @ o
 S
  • i gets input
  • ? test top of stack
    • if negative (EOI) redirect onto w lane change which umps to the @ halt
    • if 0 (null) halt this shouldn't be hit
    • if positive Sow push space to the stack, output and change lane onto i

Try it online!

answered May 25, 2017 at 22:18
\$\endgroup\$
1
  • 1
    \$\begingroup\$ Sweet, it's not too often a Cubix program is this short :-) \$\endgroup\$ Commented May 27, 2017 at 15:40
4
\$\begingroup\$

C, 32 bytes

Try Online modifying characters into spaces

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

C, 37 bytes

Try Online Left-padding the end-of-string with its length

f(char*t){printf("%*c",strlen(t),0);}
answered May 26, 2017 at 7:41
\$\endgroup\$
1
  • 1
    \$\begingroup\$ 29 \$\endgroup\$ Commented Apr 23, 2020 at 1:07
4
\$\begingroup\$

APL (Dyalog) 13.2, 1 byte

Prints only spaces.

prototype (numbers become zeros, characters become spaces)

Try it online!

answered Jun 7, 2017 at 11:32
\$\endgroup\$
4
\$\begingroup\$

Pepe, (削除) 46 (削除ここまで) 37 bytes

REEeRREeeeREEEEErEeeEeeeeerEEeeeEreee

Try it online!

Explanation:

REEe # Input (string) in R
RREeee # Push reverse pointer position, or length of input - 1
 # R flag: push in beginning
REEEEE # ...add 1
rEeeEeeeee # Push space in r
rEEeeeE # ...R times
reee # Output whole stack
answered Oct 11, 2018 at 12:08
\$\endgroup\$
4
\$\begingroup\$

Poetic, 81 bytes

the berenstein bears
i remember a series i spelled wrong
o m gee,i do remember it

Try it online!

The misspelling is intentional. (...or is it?)

answered Nov 15, 2019 at 11:59
\$\endgroup\$
3
\$\begingroup\$

Gema, 4 characters

?=\ 

(There is a space at the end of code.)

Sample run:

bash-4.4$ echo -n 'Hello, World!' | gema '?=\ '
 bash-4.4$ echo -n 'Hello, World!' | gema '?=\ ' | wc
 0 0 13
answered May 25, 2017 at 13:22
\$\endgroup\$
3
\$\begingroup\$

APL (Dyalog), 3 bytes

Prints only newlines.

0/⍪

Try it online!

table (makes string into column matrix)

0/ replicate each column zero times

answered May 25, 2017 at 14:15
\$\endgroup\$
3
\$\begingroup\$

Scala, 15 bytes

s=>" "*s.length
answered May 25, 2017 at 14:22
\$\endgroup\$
1
  • \$\begingroup\$ I created a Try it online for your program. \$\endgroup\$ Commented Oct 22, 2018 at 5:40
3
\$\begingroup\$

JavaScript (ES8), 22 bytes

s=>"".padEnd(s.length)
answered May 25, 2017 at 19:17
\$\endgroup\$
3
\$\begingroup\$

Java 8, 24 bytes

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

Try it here.

Java 7, 49 bytes

String c(String s){return s.replaceAll("."," ");}

Try it here.

answered May 26, 2017 at 7:17
\$\endgroup\$
3
\$\begingroup\$

Chip, 2 bytes

*f

Try it online!

Chip reads in a byte, does whatever calculations are in the code, and writes a byte. So, for each byte of input, we ignore the input and write 0x20 instead. The empty Chip program would replace each byte of input with a null byte of output.

* Source element, activates any neighbor elements
 f Output element for the bit 0x20, when active this bit is set in the output

Transposing the two characters would result in the same thing. I opted to use spaces, since 0x20 requires only one bit to be set. 0x0a requires setting two bits. Code for that could be:

b*d
answered May 26, 2017 at 19:46
\$\endgroup\$
3
\$\begingroup\$

Shell utils, (削除) 14 (削除ここまで) 12 bytes

tr ' -~' ' '

tr translates characters in the first parameter, into the corresponding one in the second parameter. (space)-~ is a range for space (32) to tilda (126), the first and last printable ASCII characters. They are mapped into a space; tr duplicates the last character in the output list if it is shorter than the input list.

answered May 27, 2017 at 20:19
\$\endgroup\$
2
  • 3
    \$\begingroup\$ You could shave off a couple of bytes with different quoting styles (\ -~ instead of ' -~') and you could even get away without quoting the first parameter at all if you use a control-character byte. \$\endgroup\$ Commented May 29, 2017 at 3:53
  • 1
    \$\begingroup\$ That brings it down to 9 bytes: tr ␁-~ \ (␁=^A) \$\endgroup\$ Commented Nov 24, 2017 at 8:11
3
\$\begingroup\$

shortC, 16 bytes

f(C*a){W*a++)P' 

Note the trailing space at end of code.

Conversions in this program:

  • C -> char
  • W -> while(
  • P -> putchar(

The resulting program looks like this:

f(char *a){while(*a++)putchar(' ');}

How that works:

  • while(*a++) loops until it reaches the last index of the string a.
  • putchar(' '); prints a space for each index of a.

Try it online!

answered May 25, 2017 at 22:22
\$\endgroup\$
3
\$\begingroup\$

dc, (削除) 25 (削除ここまで) 18 bytes

-1 byte thanks to brhfl

Z[1-d0<L32P]sLd0<L

Try it online!

Explanation:

Z[1-d0<L32P]sLd0<L
 Implicit input
Z Get length
 [ ]sL Create a funcion and saves in L
 d0<L If length > 0, call L
 1- Subtract 1 from the length
 d0<L If length > 0, call L
 32P Print space
answered May 25, 2017 at 14:38
\$\endgroup\$
4
  • \$\begingroup\$ Woah! It's worse than German. It would be neat if you explained how it works ;) \$\endgroup\$ Commented May 29, 2017 at 17:01
  • \$\begingroup\$ @NieDzejkob there :D \$\endgroup\$ Commented May 29, 2017 at 17:57
  • \$\begingroup\$ @Felipe You can shave off one byte by using the ASCII code point for a space instead of a string containing a space: 32P instead of [ ]P. I doubt it can be golfed down much further... \$\endgroup\$ Commented Oct 26, 2017 at 17:14
  • \$\begingroup\$ @brhfl didn't know i could do that, thanks \$\endgroup\$ Commented Oct 26, 2017 at 18:43
3
\$\begingroup\$

Ruby -p, 10 bytes

$_=$/*~/$/

Try it online!

Explanation:

$_= Output equals
 $/ the output separator (defaults to newline)
 * repeated a number of times equal to
 ~ the index in the input of the first match of
 /$/ the regular expression for "end of line"
answered Nov 15, 2019 at 17:26
\$\endgroup\$
3
\$\begingroup\$

Powershell, (削除) 18 (削除ここまで) 12 bytes

-6 bytes thanks @Julian

$args|%{' '}

Try it online!

Testscript (use LF only mode in your editor):

$f = {
$args|% t*y|%{' '}
}
@(
,(13, "Hello, World!")
,(2, "Hi")
,(45, " Don't
Forget about
Existing
Whitespace! ")
,(0, "")
,(13, " ")
,(1,"
")
) | % {
 $len,$source=$_
 $r = &$f $source
 $l=$r.length
 "$($l-eq$len): $l"
}

Output:

True: 13
True: 2
True: 45
True: 0
True: 13
True: 1

Powershell + Regex, 20 bytes

$args-replace'.',' '
answered Jul 10, 2018 at 20:10
\$\endgroup\$
2
  • 1
    \$\begingroup\$ You can go down 6 bytes using splatting ? Try it online! \$\endgroup\$ Commented Apr 14, 2021 at 1:22
  • 1
    \$\begingroup\$ Thanks. Three years ago we didn't use splatting. Thanks again. \$\endgroup\$ Commented Apr 14, 2021 at 4:34
3
\$\begingroup\$

Trilangle, 11 bytes

i7#'@"o.:2L

Unfolds to this:

 i
 7 #
 ' @ "
 o . : 2
L . . . .

This has to be the most creative way I've used @ yet: when hit in one direction, it ends the program; when hit in a different direction, it's divided by 2 to get a space.

Roughly equivalent to this C code:

#include <stdio.h>
int main() {
 while (getchar() != EOF) {
 printf(" ");
 }
}
answered Mar 15, 2023 at 15:12
\$\endgroup\$
3
\$\begingroup\$

, 4 chars

code

しろまる󷺼s

A simple test is here.

Explanation

explanation

answered Mar 15 at 14:32
\$\endgroup\$
2
\$\begingroup\$

Perl 6, 10 bytes

{S:g/./ /}

Basic string substitution.

answered May 25, 2017 at 16:57
\$\endgroup\$
2
\$\begingroup\$

Convex, 2 bytes

,*

Try it online!

Simply takes the length of the input and multiplies by newlines (which are at the bottom of the stack)

answered May 25, 2017 at 22:17
\$\endgroup\$
2
\$\begingroup\$

Bash, 16 bytes

printf %*s ${#1}

Try it online!

Uses parameter expansion count the length of the argument ${#1}, and then printf to output an empty string space-padded to that same length.

answered May 26, 2017 at 2:42
\$\endgroup\$
1
  • \$\begingroup\$ printf %${#1}s is 14 bytes; tr -c '' \ (with input from the standard input stream) is 11 \$\endgroup\$ Commented Dec 20, 2022 at 22:15
2
\$\begingroup\$

PowerShell, 21 bytes

[char[]]"$args"|%{""}

Try it online!

prints newlines.

briantist
3,32016 silver badges21 bronze badges
answered May 25, 2017 at 13:59
\$\endgroup\$
3
  • \$\begingroup\$ .....I like it! \$\endgroup\$ Commented May 26, 2017 at 4:08
  • \$\begingroup\$ @briantist thanks for the TIO link, need to get into the habit of doing them myself. \$\endgroup\$ Commented May 26, 2017 at 8:29
  • \$\begingroup\$ can't go wrong, it creates the whole post for you. That's why I use it even when the code itself can't run in TIO 😂 \$\endgroup\$ Commented May 26, 2017 at 11:56
2
\$\begingroup\$

APL, (削除) 11 (削除ここまで) 6 bytes

5 bytes saved thanks to @Adám

' '⍴⍨≢

Uses the Dyalog Classical character set.

answered May 25, 2017 at 13:31
\$\endgroup\$
5
  • \$\begingroup\$ You can golf this significantly. First, swap the arguments of rho to remove the parentheses: {' '⍴⍨⍴,⍵}, then use tally rather than rho to remove the comma: {' '⍴⍨≢⍵}, and finally, make it into a train to remove the braces and omega: ' '⍴⍨≢. \$\endgroup\$ Commented May 25, 2017 at 14:13
  • \$\begingroup\$ No problem. I'll be happy to teach you more over in the APL chat room. \$\endgroup\$ Commented May 25, 2017 at 14:33
  • \$\begingroup\$ How is this 5 bytes? \$\endgroup\$ Commented May 26, 2017 at 13:52
  • \$\begingroup\$ @EriktheOutgolfer fixed, thanks. it counts 6 with the Dyalog char set \$\endgroup\$ Commented May 26, 2017 at 14:11
  • \$\begingroup\$ Save another byte by removing the space. \$\endgroup\$ Commented Mar 17 at 9:53
2
\$\begingroup\$

Perl 5, 6 + 1 = 7 bytes

Uses the -p flag.

y// /c

y/// is the transliteration operator: the first list is translated to the corresponding character in the second list. Without the c, this does nothing, but the c complements the first list, so all characters are transliterated to a space.

answered May 30, 2017 at 6:55
\$\endgroup\$
2
\$\begingroup\$

Aceto, 5 bytes

Trivial in Aceto:

p
,'O

Reads a character, pushes a space, prints it, and goes back to the start.

answered May 30, 2017 at 18:46
\$\endgroup\$
2
\$\begingroup\$

T-SQL, 32 bytes

SELECT SPACE(LEN(a+'x')-1)FROM t

Microsoft SQL's LEN function ignores trailing spaces, so this hacky workaround is required.

Input is stored in varchar column a in pre-existing table t, per our input rules.

answered Jun 7, 2017 at 21:38
\$\endgroup\$
2
\$\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}'" "
" "
answered May 30, 2017 at 18:46
\$\endgroup\$
1
  • \$\begingroup\$ Using one of the k's, 2 bytes is possible as "", e.g. this ngn/k version. \$\endgroup\$ Commented Nov 17, 2020 at 17:16
2
\$\begingroup\$

TI-Basic, 13 bytes

For(I,2,length(Ans
Disp "
End

Loop starts at 2 because an additional newline is printed before Done at the end of the program.

answered Dec 12, 2017 at 13:10
\$\endgroup\$
2
\$\begingroup\$

MATL, (削除) 3 (削除ここまで) 4 bytes

nqZ"

Try it online!

Today I learnt that MATLAB has a function for creating a string of spaces!

n - count the number of bytes in input string
q - decrement by 1, because the implicit disp at the end adds a newline (so the number of spaces required is string length - 1)
Z" - blanks command: create a string with the specified number of spaces in it
(Implicit output at end, with trailing newline.)

answered Jul 8, 2018 at 7:15
\$\endgroup\$
2
\$\begingroup\$

R, (削除) 37 (削除ここまで) 23 bytes

gsub("."," ",scan(,""))

Try it online!

14 bytes saved by ngm.

answered Jul 10, 2018 at 1:13
\$\endgroup\$
3
  • \$\begingroup\$ apart from using gsub, strrep exists as well, so strrep(" ",nchar(scan,""))) would work (even though it's longer than @ngm 's suggestion) \$\endgroup\$ Commented Jul 10, 2018 at 20:27
  • \$\begingroup\$ @Giuseppe Is this a recent function? I can't believe I'm hearing about it for the first time. \$\endgroup\$ Commented Jul 10, 2018 at 20:37
  • \$\begingroup\$ It appears to have been added in 3.3.0. I haven't really found a great use for it; usually the first thing I do when I see a string is to utf8ToInt it and then I can just use rep for mostly the same purpose, and rep has finer control beyond just times, with each, length.out \$\endgroup\$ Commented Jul 10, 2018 at 21:01

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.