127
\$\begingroup\$

Your task, if you wish to accept it, is to write a program that outputs a positive integer (higher than 0). The tricky part is that if I duplicate your source code, the output must be double the original integer.

Rules

  • You must build a full program. That is, your output has to be printed to STDOUT.

  • The initial source must be at least 1 byte long.

  • Both the integers must be in base 10 (outputting them in any other base or with scientific notation is forbidden).

  • Your program must not take input (or have an unused, empty input).

  • Outputting the integers with trailing / leading spaces is allowed.

  • You may not assume a newline between copies of your source.

  • This is , so the shortest (original) code in each language wins!

  • Default Loopholes apply.

Example

Let's say your source code is ABC and its corresponding output is 4. If I write ABCABC instead and run it, the output must be 8.

Leaderboard

This uses uses @manatwork's layout.

/* Configuration */

var QUESTION_ID = 132558; // Obtain this from the url
// It will be like https://XYZ.stackexchange.com/questions/QUESTION_ID/... on any question page
var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";
var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk";
var OVERRIDE_USER = 8349457; // This should be the user ID of the challenge author.

/* App */

var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page;

function answersUrl(index) {
  return "https://api.stackexchange.com/2.2/questions/" +  QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER;
}

function commentUrl(index, answers) {
  return "https://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER;
}

function getAnswers() {
  jQuery.ajax({
    url: answersUrl(answer_page++),
    method: "get",
    dataType: "jsonp",
    crossDomain: true,
    success: function (data) {
      answers.push.apply(answers, data.items);
      answers_hash = [];
      answer_ids = [];
      data.items.forEach(function(a) {
        a.comments = [];
        var id = +a.share_link.match(/\d+/);
        answer_ids.push(id);
        answers_hash[id] = a;
      });
      if (!data.has_more) more_answers = false;
      comment_page = 1;
      getComments();
    }
  });
}

function getComments() {
  jQuery.ajax({
    url: commentUrl(comment_page++, answer_ids),
    method: "get",
    dataType: "jsonp",
    crossDomain: true,
    success: function (data) {
      data.items.forEach(function(c) {
        if (c.owner.user_id === OVERRIDE_USER)
          answers_hash[c.post_id].comments.push(c);
      });
      if (data.has_more) getComments();
      else if (more_answers) getAnswers();
      else process();
    }
  });  
}

getAnswers();

var SCORE_REG = /<h\d>\s*([^\n,]*[^\s,]),.*?(-?\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;

var OVERRIDE_REG = /^Override\s*header:\s*/i;

function getAuthorName(a) {
  return a.owner.display_name;
}

function process() {
  var valid = [];
  
  answers.forEach(function(a) {
    var body = a.body;
    a.comments.forEach(function(c) {
      if(OVERRIDE_REG.test(c.body))
        body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>';
    });
    
    var match = body.match(SCORE_REG);
    if (match)
      valid.push({
        user: getAuthorName(a),
        size: +match[2],
        language: match[1],
        link: a.share_link,
      });
    
  });
  
  valid.sort(function (a, b) {
    var aB = a.size,
        bB = b.size;
    return aB - bB
  });

  var languages = {};
  var place = 1;
  var lastSize = null;
  var lastPlace = 1;
  valid.forEach(function (a) {
    if (a.size != lastSize)
      lastPlace = place;
    lastSize = a.size;
    ++place;
    
    var answer = jQuery("#answer-template").html();
    answer = answer.replace("{{PLACE}}", lastPlace + ".")
                   .replace("{{NAME}}", a.user)
                   .replace("{{LANGUAGE}}", a.language)
                   .replace("{{SIZE}}", a.size)
                   .replace("{{LINK}}", a.link);
    answer = jQuery(answer);
    jQuery("#answers").append(answer);

    var lang = a.language;
    if (! /<a/.test(lang)) lang = '<i>' + lang + '</i>';
    lang = jQuery(lang).text().toLowerCase();

    languages[lang] = languages[lang] || {lang: a.language, user: a.user, size: a.size, link: a.link, uniq: lang};
  });

  var langs = [];
  for (var lang in languages)
    if (languages.hasOwnProperty(lang))
      langs.push(languages[lang]);

  langs.sort(function (a, b) {
    if (a.uniq > b.uniq) return 1;
    if (a.uniq < b.uniq) return -1;
    return 0;
  });

  for (var i = 0; i < langs.length; ++i)
  {
    var language = jQuery("#language-template").html();
    var lang = langs[i];
    language = language.replace("{{LANGUAGE}}", lang.lang)
                       .replace("{{NAME}}", lang.user)
                       .replace("{{SIZE}}", lang.size)
                       .replace("{{LINK}}", lang.link);
    language = jQuery(language);
    jQuery("#languages").append(language);
  }

}
body { text-align: left !important}

#answer-list {
  padding: 10px;
  width: 290px;
  float: left;
}

#language-list {
  padding: 10px;
  width: 290px;
  float: left;
}

table thead {
  font-weight: bold;
}

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/Sites/codegolf/all.css?v=617d0685f6f3">
<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><a href="{{LINK}}">{{SIZE}}</a></td></tr>
  </tbody>
</table>
<table style="display: none">
  <tbody id="language-template">
    <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td><a href="{{LINK}}">{{SIZE}}</a></td></tr>
  </tbody>
</table>

\$\endgroup\$
  • 2
    \$\begingroup\$ @Mr.Xcoder Then I'll just have to include one in my own source. \$\endgroup\$ – steenbergh Jul 15 '17 at 17:55
  • 3
    \$\begingroup\$ @Mr.Xcoder I think that you should have prevented reading your own source code. \$\endgroup\$ – caird coinheringaahing Jul 15 '17 at 18:09
  • 1
    \$\begingroup\$ It only needs to work when doubled once? We don't need to support n many doublings? \$\endgroup\$ – Cody Gray Jul 16 '17 at 8:36
  • 7
    \$\begingroup\$ @Daniel Let's say your source is `` (empty program) and it produces 5. If you double it, your source is `` (empty program) and that produces 5 as well, no matter what you do. That being said, an empty program duplicated is still the empty program, and always produces the same output, except for the case where the empty program means something else (a random number generator, for example), which could not be valid anyway. \$\endgroup\$ – Mr. Xcoder Jul 17 '17 at 9:11
  • 1
    \$\begingroup\$ This shouldn't be hard for esolangs that automatically dump the top of stack upon program termination. \$\endgroup\$ – MD XF Jul 18 '17 at 22:26

131 Answers 131

1
\$\begingroup\$

Reflections, 10 bytes

_~#  _#_v

Test it! Test it double!

Explanation:

  • _~: read own source and push size
  • # _: convert to string
  • #_: print the first digit
  • v: reflects the IP down

Then, the program does either end when hitting the other v or when leaving the grid.

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

QBasic, 12 bytes

A script that takes no input and outputs to the console. Outputs 1 when single, outputs 2 when doubled.

CLS
n=n+1
?n
\$\endgroup\$
1
\$\begingroup\$

Small Basic, 45 bytes

A script which takes no input and outputs to the TextWindow console.

n=n+1
TextWindow.Clear()
TextWindow.Write(n)

Try it at SmallBasic.com

n=n+1
TextWindow.Clear()
TextWindow.Write(n)
n=n+1
TextWindow.Clear()
TextWindow.Write(n)

Try it Doubled at SmallBasic.com

SmallBasic.com depends on Silverlight, and thus the links must be opened in IE to function.

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

Python 2, 25 24 bytes

x=1
print 4*'\b',x,;x=2#

Both values of x (1 and 2) get printed when the code is repeated. However the second time, the backspace character backspaces/"erases" the 1 and prints the 2 over the top of it.

The behaviour of printing the backspace escape character \b seems quite system dependent (and it doesn't seem to work on many web REPLs...).

Trailing comment idea inspired by W W's answer.

Edit: byte saved, see comment.

\$\endgroup\$
  • \$\begingroup\$ Welcome to the site! \$\endgroup\$ – Wheat Wizard Jul 17 '18 at 17:52
  • \$\begingroup\$ Why don't you put x=2 after the print and before the comment instead of multiplying by two before the print? \$\endgroup\$ – Wheat Wizard Jul 17 '18 at 17:54
  • \$\begingroup\$ Thanks: I think that will save a byte or two... \$\endgroup\$ – Harry King Jul 17 '18 at 19:46
1
\$\begingroup\$

Z80Golf, 6 bytes

00000000: 3676 f630 3ce5                           6v.0<.

Try it online!

Doubled

00000000: 3676 f630 3ce5 3676 f630 3ce5            6v.0<.6v.0<.

Try it online!

Disassembly

start:
  ld (hl), $76
  or $30
  inc a
  push hl

The trick is to exclude any call or rst instructions, so that the execution exactly follows the order:

  • The program (one or two copies)
  • The nop slide, then putchar at address $8000 (exactly once), and then
  • halt which should be hit on return from putchar.

or $30; inc a sets up the ASCII '1' = $31 to print. push hl sets up the stack; ld (hl), $76 writes the halt instruction on the return address.

When doubled, the second inc a changes the value to ASCII '2' = $32. The other instructions are effective no-ops; the return address and the halt instruction on return don't change.

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

Ahead, 7 bytes

1~@O+K~

Prints 1 on its own, 2 when doubled, 3 when tripled etc.

Try it online!

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

Python 2, 27 bytes

+7
try:_
except:_=7;print _

Try it online!

Try it doubeled!

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

Aheui, 23 bytes

분아떠망히
아뷴

outputs 4.

Doubled:

분아떠망히
아뷴
분아떠망히
아뷴

outputs 8.

Try it on jsaheui

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

Perl 5, 10 bytes

print-s$0#

Try it online!

Doubled, 20 bytes

print-s$0#print-s$0#

Try it online!

Inspired by Sriotchilism O'Zaic recursive comment approach (Nice work by the way).

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

W, 2 bytes

1+

Explanation

1+   % Adds an (implicit) 0 (on empty input)
  1+ % Add the constant 1 to 1
     % Implicit output
\$\endgroup\$
-1
\$\begingroup\$

Unary(Inefficient conversion), 596 bytes

Not doubled: <<+.

Doubled: ++.>

Well, require left-exist tape, and output not ascii, but

\$\endgroup\$

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.