97
\$\begingroup\$

In this challenge, you should write a program or function which takes no input and prints or returns a string with the same number of bytes as the program itself. There are a few rules:

  • You may only output bytes in the printable ASCII range (0x20 to 0x7E, inclusive), or newlines (0x0A or 0x0D).
  • Your code must not be a quine, so the code and the output must differ in at least one byte.
  • Your code must be at least one byte long.
  • If your output contains trailing newlines, those are part of the byte count.
  • If your code requires non-standard command-line flags, count them as usual (i.e. by adding the difference to a standard invocation of your language's implementation to the byte count), and the output's length must match your solution's score. E.g. if your program is ab and requires the non-standard flag -n (we'll assume it can't be combined with standard flags, so it's 3 bytes), you should output 5 bytes in total.
  • The output doesn't always have to be the same, as long as you can show that every possible output satisfies the above requirements.
  • Usual quine rules don't apply. You may read the source code or its size, but I doubt this will be shorter than hardcoding it in most languages.

You may write a program or a function and use any of the standard methods of providing output. Note that if you print the result, you may choose to print it either to the standard output or the standard error stream, but only one of them counts.

You may use any programming language, but note that these loopholes are forbidden by default.

This is , so the shortest valid answer – measured in bytes – wins.

Leaderboard

var QUESTION_ID=121056,OVERRIDE_USER=8478;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){var F=function(a){return a.lang.replace(/<\/?a.*?>/g,"").toLowerCase()},el=F(e),sl=F(s);return el>sl?1:el<sl?-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>

\$\endgroup\$
  • 2
    \$\begingroup\$ Related. Related. \$\endgroup\$ – Martin Ender May 17 '17 at 11:19
  • 18
    \$\begingroup\$ "Your code must not be a quine" but... but... it's tagged quine \$\endgroup\$ – Okx May 17 '17 at 11:21
  • 4
    \$\begingroup\$ @Okx Because it's a generalised quine, i.e. the required output depends on the source code. \$\endgroup\$ – Martin Ender May 17 '17 at 11:22
  • 4
    \$\begingroup\$ @MartinEnder You should probably disallow output by exit code, which is a default. If you allow it nearly every one byte program in nearly every language is allowed. One user has already done this \$\endgroup\$ – Wheat Wizard May 17 '17 at 22:37
  • 2
    \$\begingroup\$ @WheatWizard output by exit code is not a string, so it doesn't apply here. \$\endgroup\$ – Martin Ender May 18 '17 at 4:29

232 Answers 232

0
\$\begingroup\$

Husk, 2 bytes

s"

Try it online!

Prints "".

Husk, 2 bytes

_1

Try it online!

Prints -1.

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

C# (Visual C# Interactive Compiler), 6 bytes

_=>9e5

Try it online!

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

Python 3 only 3 bytes.

Type 01. in Python 3 interpreter and get 1.0 output.

\$\endgroup\$
  • 3
    \$\begingroup\$ This is a snippet for the REPL interpreter, not a full program or function. \$\endgroup\$ – Stephen Apr 29 at 16:48
0
\$\begingroup\$

TI-BASIC, 2 bytes

ᴇ1

Prints 10.

is this one-byte token.

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

Bash, 12 bytes

yes|head -n6

outputs 6 lines of ys (6 ys, 6 newlines)

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

Gol><>, 1 byte

h

Surprisingly easy, "h" pops off a number from the stack and prints that number, then ends the program. If there is no number then by default outputs 0.

Try it online!

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

C++ (gcc), 60 58 bytes

#include<stdio.h>
int main(){for(int i=29;i--;)puts("x");}

Try it online!

\$\endgroup\$
  • 1
    \$\begingroup\$ This will output non-printable ascii. \$\endgroup\$ – Beefster Apr 30 at 17:46
  • \$\begingroup\$ Doh, missed the first rule, thanx! \$\endgroup\$ – movatica Apr 30 at 17:57
  • \$\begingroup\$ You don't need the int part of the int main, do you? \$\endgroup\$ – Jo King May 3 at 5:06
  • \$\begingroup\$ Gray area... it just issues a compiler warning, but in fact it'd be invalid C++. \$\endgroup\$ – movatica May 3 at 5:53
0
\$\begingroup\$

Ahead, 4 bytes

Prints 0000.

4kO@

4k    4 times
  O   pop stack and print 
   @  end

The empty stack always pops 0.

Try it online!

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

Javascript (ES6), 5 bytes

!1+''

outputs the string "false".

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

R, 6 bytes

seq(1)

Try it online!

I think we've covered all the other types of R answer already, but this one counts the print method's [1] and trailing newline. There might be some counting technicalities here.

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

TinCan, 122 bytes

# 31135, A, &                          #
# -256, A, -1                          #
# 0, A, 1                              #

Outputs 122 'a's.

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

Try it online!

Explanation:

Lines have a minimum length of 40 characters in TinCan, and there is only one instruction, so 40 bytes would be the shortest feasible TinCan program other than an empty file.

TinCan's interpreter is written in PHP and uses the PHP chr function to output the character value of each number on the stack when the program ends. This also works for values outside the range of 0 to 255, using bitwise and with 255 to get the result.

For this program, I multiplied the length of the program (122 bytes), minus one for the positive case, times 256 and added (256 - 97), 97 being the ASCII value of 'a'. This gives 31135.

The loop then generates a sequence of values starting at -31135 and counting upwards by 256 each iteration. Each value in sequence when processed by chr produces another 'a'. When the variable A becomes positive, the program exits and prints 122 'a's.

With the fixed line length, golfing this down would require removing one whole instruction, which I don't believe is possible. But I'd be happy to be proven wrong!

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

SNOBOL4 (CSNOBOL4), 23 bytes

	OUTPUT =DUPL(1,22)
END

Try it online!

Outputs 22 1s and then a newline.

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

Runic Enchantments, 2 bytes

m@

Try it online!

One of several possible programs that satisfies the challenge. This one is just the least obvious. Rather than pushing a value literal (a-f) to the stack, instead push the current value of the IP's energy/mana to the stack (which is initially 10).

1 byte solutions are impossible as Runic requires an output byte and a termination byte (both satisfied by @) as well as a Thing-To-Print byte (m).

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

Underload, 6 bytes

()aaaS

Outputs ((())), since a just puts brackets around the top item of the stack.

Try it Online!

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

Ohm v2, 1 byte

Try it online!

or

Try it online!

Ohm, 1 byte

º

Try it online!

or

°

Try it online!

Explanation

In Ohm if a component requires an input but no inputs are provided a 0 is implicitly pushed to the stack, so the output is 20 for the first program (in each version) and 100 for the second.

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

33, 1 byte

o

Prints 0, the default value of the accumulator.

i also works, printing a trailing newline.

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

8086/8088 machine code, 6 bytes

b8 21 21    mov ax, 2121         Load 0x2121 into AX.
ef ef ef    out [dx], ax (x3)    Output AX (2 bytes) to port [DX], 3 times.

Assumptions:

  • The output may be sent to I/O port 0.
  • DX is initialized with 0.

Joke answer:

ee    out [dx], al    Output AL (1 byte) to port [DX].

Assumptions:

  • The output may be sent to I/O port [DX], whatever that is.
  • AL is initialized with an ASCII character.
\$\endgroup\$
0
\$\begingroup\$

brainfuck, 36 bytes

++++++>-[>+<---]<[->++++++<]>[>.<-]<

Try it online!

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

Python 3, 13 bytes

print('x'*13)

Try it online!

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

Zsh, 9 bytes

<<<$[9E7]

try it online!

\$\endgroup\$
  • 1
    \$\begingroup\$ Should technically be 9E6 because of the trailing newline. \$\endgroup\$ – GammaFunction Aug 18 at 2:18
0
\$\begingroup\$

Python 3, 10 bytes

print(1e6)

Try it online!

\$\endgroup\$
  • \$\begingroup\$ you can save 1 byte by using Python 2: print 1e6 \$\endgroup\$ – Beefster Apr 30 at 17:37
  • \$\begingroup\$ Changing the language is not the point ;) \$\endgroup\$ – movatica Apr 30 at 17:56
  • \$\begingroup\$ This is also an exact duplicate of another answer. \$\endgroup\$ – Beefster Apr 30 at 17:57
  • \$\begingroup\$ That's possible. Tried to solve it without scrolling through 12 pages of answers first. \$\endgroup\$ – movatica Apr 30 at 17:58
  • 4
    \$\begingroup\$ You could do exit(1e5) to print to STDERR, saving 1 byte. \$\endgroup\$ – maxb Aug 15 at 9:33
0
\$\begingroup\$

Or, 5 bytes

 fals

This returns false (this should be a five-character constant) onto the stack, which can be used later in the program (or not really, none of the current known instructions in Or access non-top items).

Explanation

From the IRC log:

14:01 < fungot> mroman_: the command to push false is ' f'

Since fungot had not yet presented the full language, all that we know in the current interpreter is that extra instructions do nothing.

 f    Push false onto the stack
  als All of those are recognized as NOPs in the current implementation.
\$\endgroup\$
  • \$\begingroup\$ Languages must have a known implementation to be valid here. \$\endgroup\$ – Ørjan Johansen Oct 18 at 7:58
  • \$\begingroup\$ The known implementation is here. \$\endgroup\$ – A̲̲ Oct 18 at 10:19

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.