42
\$\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

112 Answers 112

4
\$\begingroup\$

APL (Dyalog) 13.2, 1 byte

Prints only spaces.

 prototype (numbers become zeros, characters become spaces)

Try it online!

| improve this answer | |
\$\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
| improve this answer | |
\$\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?)

| improve this answer | |
\$\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
| improve this answer | |
\$\endgroup\$
3
\$\begingroup\$

Jelly, 2 bytes

⁶ṁ

Try it online!

| improve this answer | |
\$\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

| improve this answer | |
\$\endgroup\$
3
\$\begingroup\$

Scala, 15 bytes

s=>" "*s.length
| improve this answer | |
\$\endgroup\$
  • \$\begingroup\$ I created a Try it online for your program. \$\endgroup\$ – jrook Oct 22 '18 at 5:40
3
\$\begingroup\$

C (tcc), 31 bytes

I opted to output newlines since it's shorter...

f(char*s){for(;*s++;puts(""));}

Try it online!

| improve this answer | |
\$\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.

| improve this answer | |
\$\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
| improve this answer | |
\$\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.

| improve this answer | |
\$\endgroup\$
  • 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\$ – RJHunter May 29 '17 at 3:53
  • 1
    \$\begingroup\$ That brings it down to 9 bytes: tr ␁-~ \ (␁=^A) \$\endgroup\$ – L3viathan Nov 24 '17 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!

| improve this answer | |
\$\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
| improve this answer | |
\$\endgroup\$
  • \$\begingroup\$ Woah! It's worse than German. It would be neat if you explained how it works ;) \$\endgroup\$ – NieDzejkob May 29 '17 at 17:01
  • \$\begingroup\$ @NieDzejkob there :D \$\endgroup\$ – Felipe Nardi Batista May 29 '17 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\$ – brhfl Oct 26 '17 at 17:14
  • \$\begingroup\$ @brhfl didn't know i could do that, thanks \$\endgroup\$ – Felipe Nardi Batista Oct 26 '17 at 18:43
2
\$\begingroup\$

Perl 6, 10 bytes

{S:g/./ /}

Basic string substitution.

| improve this answer | |
\$\endgroup\$
2
\$\begingroup\$

JavaScript (ES8), 22 bytes

s=>"".padEnd(s.length)
| improve this answer | |
\$\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)

| improve this answer | |
\$\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.

| improve this answer | |
\$\endgroup\$
2
\$\begingroup\$

PowerShell, 21 bytes

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

Try it online!

prints newlines.

| improve this answer | |
\$\endgroup\$
2
\$\begingroup\$

APL, 11 6 bytes

5 bytes saved thanks to @Adám

' '⍴⍨≢

Uses the Dyalog Classical character set.

| improve this answer | |
\$\endgroup\$
  • \$\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\$ – Adám May 25 '17 at 14:13
  • \$\begingroup\$ @Adám thanks! never seen the tally before \$\endgroup\$ – Uriel May 25 '17 at 14:32
  • \$\begingroup\$ No problem. I'll be happy to teach you more over in the APL chat room. \$\endgroup\$ – Adám May 25 '17 at 14:33
  • \$\begingroup\$ How is this 5 bytes? \$\endgroup\$ – Erik the Outgolfer May 26 '17 at 13:52
  • \$\begingroup\$ @EriktheOutgolfer fixed, thanks. it counts 6 with the Dyalog char set \$\endgroup\$ – Uriel May 26 '17 at 14:11
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.

| improve this answer | |
\$\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.

| improve this answer | |
\$\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.

| improve this answer | |
\$\endgroup\$
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.

| improve this answer | |
\$\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.)

| improve this answer | |
\$\endgroup\$
2
\$\begingroup\$

R, 37 23 bytes

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

Try it online!

14 bytes saved by ngm.

| improve this answer | |
\$\endgroup\$
  • \$\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\$ – Giuseppe Jul 10 '18 at 20:27
  • \$\begingroup\$ @Giuseppe Is this a recent function? I can't believe I'm hearing about it for the first time. \$\endgroup\$ – JayCe Jul 10 '18 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\$ – Giuseppe Jul 10 '18 at 21:01
2
\$\begingroup\$

Powershell, 18 bytes

$args|% t*y|%{' '}

The expression % t*y splits input strings into chars. This solution has same length as solution in the Matt's comment: " "*"$args".length.

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'.',' '
| improve this answer | |
\$\endgroup\$
2
\$\begingroup\$

J, 4 bytes

LF"0

Try it online!

Converts each cell (each character in this case) to the linefeed character. LF is a built-in noun for '\n'. "0 attached to a noun converts it to a verb with the given rank.

| improve this answer | |
\$\endgroup\$
2
\$\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"
| improve this answer | |
\$\endgroup\$
2
\$\begingroup\$

Runic Enchantments, 9 bytes

" "il͍*@

Try it online!

Note that spaces and newlines need to be escaped in the input, as input is automatically split otherwise.

| improve this answer | |
\$\endgroup\$
2
\$\begingroup\$

Cascade, 14 11 9 8 bytes

? .'
,^\

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:

Cascade, 7 bytes

? .
,^9

Try it online!

thanks to Jo King.

| improve this answer | |
\$\endgroup\$
  • \$\begingroup\$ 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. \$\endgroup\$ – Unrelated String Nov 16 '19 at 22:26
  • \$\begingroup\$ The challenge spec seems to indicate that the only acceptable whitespace characters are space and newline, but that's still a great idea. \$\endgroup\$ – Unrelated String Nov 17 '19 at 11:16

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.