The Challenge

Write a complete program that writes twice as many bytes to standard output as the length of the program.


  • The program must write ASCII characters to the standard output.

  • The contents of the output doesn't matter.

  • The output, measured in bytes, must be exactly twice the length of the program, also measured in bytes, unless you fulfill the bonus.

  • Any trailing newline is included in the output's byte count.


Your program can optionally take a number, n, as input. If so, the output must be exactly n * program length bytes. You can assume that n will always be a positive integer. If no input is provided, n must default to 2.

If you do this, you can subtract 25 bytes from your score.

Shortest program wins.


  • No standard loopholes.

  • The program must be at least 1 byte long.

  • No adding unnecessary whitespace to the source code to change its length. Similarly, comments don't count.

  • Unless you fulfill the bonus, the program must accept no input. If you do fulfill the bonus, the integer must be the only input.

Lowest score (program length in bytes - bonus) wins.

The shortest answer for each language wins for that language.


Here is a Stack Snippet to generate both a regular leaderboard and an overview of winners by language.

To make sure that your answer shows up, please start your answer with a headline, using the following Markdown template:

# Language Name, N bytes

where N is the size of your submission. If you improve your score, you can keep old scores in the headline, by striking them through. For instance:

# Ruby, <s>104</s> <s>101</s> 96 bytes

If there you want to include multiple numbers in your header (e.g. because your score is the sum of two files or you want to list interpreter flag penalties separately), make sure that the actual score is the last number in the header:

# Perl, 43 + 2 (-p flag) = 45 bytes

You can also make the language name a link which will then show up in the leaderboard snippet:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes

var QUESTION_ID=59436,OVERRIDE_USER=41505;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\-?\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\-?\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>

  • 1
    \$\begingroup\$ For the bonus, does the output have to be exactly n * program length bytes, or is that a minimum? \$\endgroup\$ – xnor Oct 2 '15 at 23:19
  • 2
    \$\begingroup\$ It has to be exact \$\endgroup\$ – Daniel M. Oct 2 '15 at 23:20
  • 3
    \$\begingroup\$ Looks like the code snippet has to be modified to handle negative scores. \$\endgroup\$ – El'endia Starman Oct 2 '15 at 23:49
  • 40
    \$\begingroup\$ A bonus of -25 is basically mandatory for some languages, since it lets them achieve a negative score. In the future, I'd suggest using a percent bonus, or just making the bonus the question if you really want answers to go for it. Or, just don't have a bonus. \$\endgroup\$ – xnor Oct 2 '15 at 23:58
  • 4
    \$\begingroup\$ For "no input is provided", do we assume the empty string is passed in? I can't see how one would deal with the user never typing in an input and the program just waiting. \$\endgroup\$ – xnor Oct 2 '15 at 23:59

265 Answers 265


Pylongolf, 2 bytes


. - Reset the stack
; - Debugally print both the stack and the variables.

The interpreter I use prints debugally by converting an 2 arrays into a string which has that string begin with [ and end with ] which prints:


Lua, 35 - 25 = 10 bytes

Takes input from the command line, which is in the varargs.

print(("n"):rep(35*(...or 2)-1))
  • \$\begingroup\$ You can shave off 3 bytes with print(("n"):rep(35*(...or 2)-1)) \$\endgroup\$ – Katenkyo Mar 30 '16 at 9:55

Labyrinth, 10 bytes - 25 = -15

Another Labyrinth collaboration with Sp3000.


This prints 10n linefeeds to STDOUT.

Try it online!


The most interesting part is probably how the default value of 2 is handled.

If an input number is given, the following code is executed:

?   Read integer from STDIN.
0   Multiply by 10. This is because digits in Labyrinth work by multiplying the top of
    the stack by 10 and then adding themselves, such that multi-digit numbers can be
    written into the code more easily.
    The top of the stack is now positive (and contains the number of characters to be
    printed) so the instruction pointer (IP) turns right/south towards the \.

If no input number is given, ? pushes a 0 instead, and this happens:

?   Push 0.
0   Multiply by 10, which is still 0. Since the top of the stack is now 0, the IP
    keeps moving forward/east instead.
2   Multiply by 10, add 2, which sets the top of the stack to 2. The IP hits a
    dead end so it turns around.
0   Multiply by 10 to give 20. Now the top of the stack is positive and IP
    turns left/south towards the \. Again, the top of the stack is the number
    of characters to be printed.

Now all we need to do is print one character each while decrementing the top of the stack to zero. The cheapest character to be printed in Labyrinth is a linefeed, because \ prints one without affecting the stack at all. As an additional trick, we decrement via multiply by -1, bitwise NOT, to ensure that the top of the stack is negative in the top left corner of the loop (otherwise the IP would move towards the ? again).

The loop is then simply:

\   Print linefeed.
`   Multiply by -1.
~   Bitwise NOT.
"   No-op. This cell acts a junction. While the top of the stack is positive
    the IP will turn left/north, otherwise it will move forward/east.

When the IP leaves the loop it hits the @ which terminates the program.

For completeness, here are also two 7-byte versions without the bonus:




Try it online!





Try it online!

The former is a very simply (but compact) loop which prints -n while decrementing n from 7 down to 0.

The latter is a simple modification of Sp3000's solution to this challenge (which makes the execution a little bit crazier though).


Hexagony, 6 bytes




Try it online!


Probably one of the simplest Hexagony programs I've written. The unfolded code is

 o !
! ! !
 @ .

and is simply executed in reading order. o sets the current memory edge to 111 (any letter from d to z would do). Then the ! print that four times and @ terminates the program.

I might try for the bonus later, but I have some doubts that it will fit in side-length 4 (and side-length 5 might end up costing more than the bonus gives).

  • \$\begingroup\$ How about this? TIO \$\endgroup\$ – Adyrem May 28 '18 at 12:21
  • \$\begingroup\$ @Adyrem That only works if measured in characters (whereas the challenge requires counting bytes). And by the time you get to 5-digit code points (in order to fix that), UTF-8 requires 3 bytes for the character. \$\endgroup\$ – Martin Ender May 28 '18 at 13:09

APL, 3 bytes


Print 100000...


dc, 7 bytes


2o         Set the output radix to 2: write to stdout using the binary digits [01]
  F        Push 0xF on the stack, equivalent to 1111b
   dd      Duplicate the top-of-stack, then duplicate the top-of-stack: 1111b, 1111b, 1111b
     n     Pop the topmost item from the stack (1111b) and write it (using binary, per
               the above) to stdout. Do not follow with a newline.
      f    Dump the contents of the stack (1111b, 1111b), following each item with a

Visible characters comprise 12 bytes; add two (2) newlines for a total of 14.

Edit: Since I'm the only dc answer with a natural number for a score, why not post the following?

dc, 8 bytes


Clears the stack seven times, then attempts to pop the top (non-existent) value and print it as text (i.e., a number with output-radix UCHAR_MAX+1). Since the stack is empty, this results in a fifteen-byte error message followed by a single newline. (Works for GNU dc 1.2)

  • \$\begingroup\$ Hello, and welcome to PPCG! This is a cool answer. Can you explain what exactly o, F, et cetera do? \$\endgroup\$ – NoOneIsHere Jun 21 '16 at 23:27

PD, 204 bytes

#N canvas 1 7 1 1 1;
#X obj 1 6 loadbang;
#X msg 1 1 \; pd quit;
#X obj 2 5 print;
#X obj 2 2 metro 10;
#X obj 1 7 del 340;
#X connect 0 0 3 0;
#X connect 0 0 4 0;
#X connect 3 0 2 0;
#X connect 4 0 1 0;

run with pd -nogui patchname.pd 2>&1. The program will print the String print: bang (12 bytes including the newline) every 10ms. Then the program terminates after 340ms which will result in the string being printed 34 times (34 * 12 = 408 Bytes output).


Python, 24-25= 0 -1 bytes


It takes input, converts it to an integer, multiplies it by 24 (the length of my code) and multiplies the character a by it

Thanks to @EamonOlive for reducing 1 byte

  • 1
    \$\begingroup\$ You can eliminate the space between the print and the '. You would also have to change the 25 to a 24. \$\endgroup\$ – Post Rock Garf Hunter Aug 4 '16 at 3:45
  • \$\begingroup\$ @EamonOlive I didn't know you could remove the space! Thanks for the tip \$\endgroup\$ – vikarjramun Aug 4 '16 at 14:13
  • \$\begingroup\$ It looks as if you may have forgotten to make the change, the space is still there. \$\endgroup\$ – Post Rock Garf Hunter Aug 4 '16 at 15:03
  • \$\begingroup\$ @EamonOlive I did everything I intended to except remove the space - thanks for pointing it out! :) \$\endgroup\$ – vikarjramun Aug 4 '16 at 15:11
  • \$\begingroup\$ Is there a default value? \$\endgroup\$ – Titus Jan 27 '17 at 6:13

Cubix, 10 bytes

Cubix is a 2D esolang with a twist: the source code is wrapped around the outside of a cube.


Test it online! This maps to the following cube:

    > .
    . (
N U @ ? O / . .
. . . . . . . .
    . .
    . .

The output is


Don't even ask how it works... though if you'd like to watch it in action, run it here.


PHP, 32 30 bytes -25 = 5


prints an underscore, fills up with spaces

fancier, but longer (38 bytes):


gives ("rMY" repeated N times) as argument to date(), which returns an RFC 2822 formatted date (e.g. Thu, 26 Jan 2017 23:32:31 -0800, length=31) followed by 3 letters of the month name and the 4 digit year - repeated N times. <?= prints the result.


Ruby, 24 bytes (with bonus)

->m{m.to_i.times {49.times {print "a"}}}[gets||2]
  • \$\begingroup\$ Did you try that with input? Assignments have a lower precedence than the ternary operator, so you probably should add parentheses. \$\endgroup\$ – Titus Jan 27 '17 at 4:40
  • \$\begingroup\$ Hmm ... can you use gets||2? \$\endgroup\$ – Titus Jan 27 '17 at 8:33

Pushy, 2 bytes


Try it online! - this prints 100 followed by a trailing newline, 4 bytes of output.

H  \ Push 100 to the stack
 # \ Print with a trailing newline

Haskell, 25-25 = 0 bytes

f n=putStr$[1..25*n]>>"*"

prints n*25 Asterisks

  • \$\begingroup\$ Is this a "complete program"? It looks like just a function to me. \$\endgroup\$ – dfeuer Apr 6 '19 at 21:28

PHP, 45 bytes

<?php print number_format(pow(10,66))."a"; ?>



<?php              //PHP start tag
print              //Prints what's ahead
number_format(arg) //format what's inside the parentheses as a number, with separators. (Used as escape function for having scientific notation result 
pow(base,exp)      //Gets the value of the `base` raised to the power of `exp`
.                  //Concatenation operator
"a"                //String of "a"
?>                 //End tag for PHP

Forth (gforth), 36 - 25 = 11 bytes

: x depth 0= if 2 then 36 * spaces ;

How it works:

Checks if no value is on the stack (depth 0=). If that is the case, push 2. Then just print n * 36 spaces.

Forth (gforth), 2 bytes


Only works if the stack is empty. Prints <0> (<, 0, > and space)


Braingolf, 1 byte

Prints 0 and a newline.


Try it online!



l      push length of the stack to the stack
       implicit output
       implicit newline printed at end of program

><>, 15 + 2 (-v flag) - 25 = -8 bytes



2{ puts 2 at the bottom of the stack. If no input was provided, this means it is at the top. Otherwise, the provided input will be at the top.

f* multiplies the input by 15 (the length of the program)

We then go into a loop: :?!;0n1-30.

:?!; ends the program if the counter is 0.

Otherwise, 0n prints 0, 1- decrements the counter, and then 30. goes back to the start of the loop.


05AB1E, -23 bytes (non-competing)

Try it online!

  • \$\begingroup\$ This doesn't default to 2 for no input \$\endgroup\$ – Jo King Aug 23 '18 at 2:59
  • \$\begingroup\$ @JoKing it used to, 05AB1E basically got a massive overhaul. It for sure used to default to 10. \$\endgroup\$ – Magic Octopus Urn Aug 23 '18 at 4:32
  • \$\begingroup\$ Doesn't work for 1. I don't see how this works, so may you explain your program? \$\endgroup\$ – a'_' Dec 22 '19 at 14:15

TI-Basic, 2 bytes


(Ab)uses the fact that programs output Done when nothing is evaluated on the last line.

  • \$\begingroup\$ This doesn't work. You need two colons after the last expression to display Done. \$\endgroup\$ – lirtosiast Jul 11 '17 at 1:33
  • \$\begingroup\$ @lirtosiast Fixed \$\endgroup\$ – Timtech Jul 11 '17 at 2:19

Java 8, 16 15 bytes

Golfed a byte by using a for loop instead of a while loop. (back to where I was before :P)

u->{for(int x=0;++x<40*u;)out.print(1);}

Using a static import to reduce the code by 7 bytes, this prints out 1 40u times, where u is the integer taken from input. Since the program code is 40 bytes long and I incorporated the bonus, that leads me with 40 - 25 = 15 bytes.

Try it online!

  • \$\begingroup\$ On TIO, this outputs in scientific notation, which means that the output for u.c(1) is ~6 bytes. Is that also how it works for you locally? If so, I'm not sure this is working as intended. \$\endgroup\$ – Stephen Aug 14 '17 at 15:52
  • \$\begingroup\$ I, for some reason, thought the output simply had to represent double the length of the source code. Thanks for pointing it out; fixed accordingly. \$\endgroup\$ – NotBaal Aug 15 '17 at 15:22

Ly, 17 - 25 = -8 bytes


Try it online!

A simple quine variant. Outputs 9>n[<&s&ol>1-]<; input times. (there's a tab at the end)

3 bytes, no bonus



38 124

Try it online!


Pyke, 1 byte


Try it here!

Outputs 10


Pyke, 5 bytes -25 = -20


Try it here!


Pyke, 3 bytes -25 = -22


Try it here!

2|  -  input or 2
2|S - range(1, ^)
  • \$\begingroup\$ Not sure if this is valid, input of 0 acts as if n=2, but I guess there isn't really a way to avoid that \$\endgroup\$ – ASCII-only Apr 20 '18 at 4:28
  • \$\begingroup\$ It says input will be a positive integer though it doesn't specify if 0 is valid or not \$\endgroup\$ – Blue Apr 20 '18 at 7:33
  • \$\begingroup\$ Oh, fair enough \$\endgroup\$ – ASCII-only Apr 20 '18 at 7:33

VBA, 2 1 -3 20 - 25 = -5 Bytes


Which outputs [A1] (analagous to n) else 1 times 22 (length of the code) spaces

Previous Version 1 Byte




Windows Batch, 148 144 73 30 bytes

@echo %OS%%OS%%OS%%OS%%OS%%OS%

The %OS% system variable should be Windows_NT on most Windows NT systems.

6 of this %OS%(i.e. Windows_NT) is exactly 60 character, which is codeLength * 2.


Japt, 1byte

My previous solution-with-bonus was invalid as I missed the requirement that input should default to 2. This is a stop-gap until I have a few minutes to come up with something better.


Output: 10

Try it online

B-G would also work, outputting 11-16 respectively, as would H (32), I (64) & J (-1).

Slightly less trivial solutions include (1000) and 8³² (262144), among many others.

  • 1
    \$\begingroup\$ If no input is provided, n must default to 2. \$\endgroup\$ – Taylor Scott Aug 16 '17 at 21:09
  • \$\begingroup\$ As Taylor Scott said, the input must default to 2. \$\endgroup\$ – Erik the Outgolfer Sep 29 '17 at 19:41
  • \$\begingroup\$ @EriktheOutgolfer: Ah, missed that (the requirement and Taylor's comment). Will update with a bonusless solution momentarily as a stop-gap 'til I get a few minutes to come up with something else. \$\endgroup\$ – Shaggy Sep 29 '17 at 19:53

Scala, 35 bytes

object X extends App{print("X"*70)}

Try it online!


BASH + coreutils, 22 (-25) = -3 bytes

printf %$[${1:-2}*22]d

Pass repeat count as 1st argument. Omit argument to default to 2 repeats.


SmileBASIC, 24 18-25= -7 bytes

N=2INPUT N?@A*N*9;

In SmileBASIC, labels (@LABEL) are treated as string literals in expressions, so you can make a 2 or more character long string without any quotes. Then it just has to print @A N*9 times to get the correct length.

Without bonus, 6 4 bytes


There is a line break after the output, but technically no character is printed to the screen (it is different than if you just printed CHR$(10))

  • \$\begingroup\$ Where is the default value? \$\endgroup\$ – Titus Jan 27 '17 at 4:41
  • \$\begingroup\$ Alright, Fixed :( \$\endgroup\$ – 12Me21 Jan 27 '17 at 13:30
  • \$\begingroup\$ Could you remove the ; at the end of the first program? I'd argue the linebreak on the console doesn't matter since it doesn't seem to actually write a character to output. \$\endgroup\$ – snail_ Apr 20 '18 at 3:51
  • \$\begingroup\$ The program would then be an odd number of characters long, so you couldn't get an output n* the length by multiplying a string with length 2. \$\endgroup\$ – 12Me21 Apr 20 '18 at 11:20

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.