130
14
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 code-golf, 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>
Related – nimi – 2017-07-15T16:06:59.720
Can we assume a newline between copies of the source? – steenbergh – 2017-07-15T17:51:14.310
@steenbergh No, you can't. – Mr. Xcoder – 2017-07-15T17:51:32.553
2@Mr.Xcoder Then I'll just have to include one in my own source. – steenbergh – 2017-07-15T17:55:04.940
3@Mr.Xcoder I think that you should have prevented reading your own source code. – caird coinheringaahing – 2017-07-15T18:09:28.420
"Both the integers must be in base 10." oh no I can't just post
1
and claim it's in unary! oh man :( D: :P – Erik the Outgolfer – 2017-07-15T19:02:39.313Can we assume the interpreter is reset between program runs? – user202729 – 2017-07-16T03:22:10.687
@user202729 Yes, you can. – Mr. Xcoder – 2017-07-16T07:21:00.713
Are leading zeros allowed? E.g. there's a Hexagony solution that prints
002
and4
. – Martin Ender – 2017-07-16T08:13:22.800@MartinEnder Yes, that is perfectly fine. – Mr. Xcoder – 2017-07-16T08:13:49.790
1It only needs to work when doubled once? We don't need to support n many doublings? – Cody Gray – 2017-07-16T08:36:13.163
@CodyGray When doubled once. You have to support 1 doubling. – Mr. Xcoder – 2017-07-16T08:36:55.610
This challenge could be fun, if not for the
The initial source must be at least 1 byte long.
requirement – Daniel – 2017-07-17T09:05:11.6737@Daniel Let's say your source is
(empty program) and it produces `5`. If you double it, your source is
(empty program) and that produces5
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. – Mr. Xcoder – 2017-07-17T09:11:19.163@Mr.Xcoder If you're so sure, why not remove the rule? – Daniel – 2017-07-17T11:01:09.287
@Daniel Because I want to keep it :P – Mr. Xcoder – 2017-07-17T11:01:43.410
1This shouldn't be hard for esolangs that automatically dump the top of stack upon program termination. – MD XF – 2017-07-18T22:26:45.783
Does output have to be base 10? – Cyoce – 2017-07-22T00:57:40.663
@Cyoce Both the integers must be in base 10 – Mr. Xcoder – 2017-07-22T06:18:03.630
If we have a stack based language with no implicit output, can we assume the top of the stack is output? – Zacharý – 2017-08-23T23:24:24.127
@Zacharý Can you give me an example? – Mr. Xcoder – 2017-08-23T23:24:52.963
MY. Just MY in general since it has no implicit IO.
1
would push1
to the stack, but nothing to stdout. – Zacharý – 2017-08-23T23:26:57.910@Zacharý No, sorry – Mr. Xcoder – 2017-08-23T23:27:13.347
Needs clarification that the output must be printed. Output doesn't necessarily mean anything visible to the end-user; for example, a function
f(x){return ++x;}
would output (not print) x, incremented by 1. – None – 2018-01-16T09:07:25.3471@Rogem *You must build a full program* already implies that. – Mr. Xcoder – 2018-01-16T09:09:11.213
It does not - for example C allows returning an error code from a program upon program termination by
return
ing frommain()
. – None – 2018-01-16T09:11:02.920@Rogem I have edited the challenge to address your concerns. – Mr. Xcoder – 2018-01-16T09:13:42.153
Can you explain "must not throw any error" rule? I'm trying to use a language which, due to syntactic quirks, would cause the interpreter to segfault at the end of the normal program (after producing the correct output), but would continue executing without error and produce the correct doubled output (and segfault at the end of that). The program would still produce the correct output, but it would segfault in both cases. – Esolanging Fruit – 2018-02-12T04:26:55.297
@EsolangingFruit I removed that rule. I don’t even remember why and when I added it lol ;-) – Mr. Xcoder – 2018-02-12T05:25:47.717
@Mr.Xcoder I've seen a few submissions using
\r
to override the previouly written text. Do you endorse that? – Esolanging Fruit – 2018-02-15T02:37:28.323@EsolangingFruit Unfortunately, I cannot enforce them not to use it.
\r
is acceptable. – Mr. Xcoder – 2018-02-15T05:20:20.410I hereby give 200 points of my reputation to a person completing the challenge in Malbolge. – Krzysztof Szewczyk – 2019-12-15T16:45:02.410