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

136 Answers 136

1
\$\begingroup\$

QBIC, 12 bytes

p=p+q┘Z=!p$┘

Explanation

p=p+q        Adds 1 to p (q = 1 in QBIC, and p starts out as 0)
┘            (Syntactic linebreak)
Z=!p$        Set Z$ to a string representation of p.
┘            (Syntactic linebreak)       

At the end of a QBIC program, if Z$<> "" it gets printed. So when running this code once, p gets increased by 1, the result is saved in Z$, the program ends and we print 1. By running it twice, Z$ will get overridden on the second iteration by p, which is now 2.

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

LOGO, 16 bytes

 ct pr bf gensym

output 1.

When doubled, it becomes

 ct pr bf gensym ct pr bf gensym

output 2.

Explanation:

  • ClearText clears all the output.
  • Print just print whatever it is given.
  • ButFirst return the input with the first item removed.
  • GenSym (perhaps GenerateSymbol) return g1 the first time it is invoked, g2 the second time, etc.

Because the output of GenSym depends on previous outputs, the interpreter should be reset between runs.

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

JavaScript (Node.js), 60 bytes

console.log(require('fs').readFileSync(__filename).length)//

Inspired by this Python 2 answer, this reads the length of the current file and prints it, preventing any duplicates of this code from being executed with the trailing comment.

Try it online!

Try it online doubled!

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

BlitzMax, 13 bytes

Print..
+1..'

No trailing newline.

Newlines act as statement terminators in BlitzMax unless prevented by a ... The ' symbol introduces a line comment. So if run as-is, the program outputs the result of the expression +1, which is 1. If doubled, the second Print is commented out and the program outputs the result of +1+1, which is 2. If you double the program a second time, you get 4, etc.

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

Ohm, 3 bytes

Original:

0Wl

Duplicated:

0Wl0Wl

Owles?

Explanation

0Wl    Main wire
0      Push 0
 W     Wrap in an array
  l    Push Length (1)
0Wl0Wl
0Wl    Push 1 ^
   0   Push another 0
    W  Wrap in an array ([0,1])
     l Push the length (2)

Try it online!
Try it online!Try it online!

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

PowerShell, 47 bytes

(gc $MyInvocation.MyCommand.Definition).Length#

Try it online! (Output: 47)

Output:

47

Explanation

(gc $MyInvocation.MyCommand.Definition).Length#
 ^  ^             ^         ^           ^     ^^
 |  |             |         |           |     ||
 |  |             |         |           |     |No newline and/or whitespace at the end
 |  |             |         |           |     |
 |  |             |         |           |     Hash - Marks all next text as comment
 |  |             |         |           |
 |  |             |         |           Length - Returns length of string
 |  |             |         |
 |  |             |         Definition - Returns full path to script file
 |  |             |
 |  |             MyCommand - Contains information about the script file
 |  |
 |  $MyInvocation - Auto variable containing information about the current script
 |
 Alias for Get-Content commandlet, returns content of file
| improve this answer | |
\$\endgroup\$
1
\$\begingroup\$

JavaScript, 41 chars

clearTimeout(1);x=setTimeout('alert(x)');

clearTimeout(1);x=setTimeout('alert(x)');clearTimeout(1);x=setTimeout('alert(x)');

| improve this answer | |
\$\endgroup\$
  • \$\begingroup\$ Shows 3 and 4 for me using the Run code snippet button \$\endgroup\$ – FliiFe Jul 18 '17 at 20:07
  • \$\begingroup\$ @FliiFe, try in incognito window with all browser extensions disabled. \$\endgroup\$ – Qwertiy Jul 18 '17 at 20:54
1
\$\begingroup\$

><>, 9 bytes

l";3"+10p

Try it online!

Explanation

l";3"+10p
l              | Push the length of the stack to the stack; STACK[0]
 ";3"          | Push 59 and 51 to the stack;               STACK[0, 59, 51]
     +         | Add the stack top 2 items;                 STACK[0, 110]
      10p      | At codebox[0,1] put the stack top item;    STACK[0]
                   NEW CODEBOX; ln;3"+10p
ln;            | Push length, print stack top and end;

When doubled we run through the code twice, it edits the print function in the same spot but doubles the amount of items we push to the stack.

><>, 18 bytes Doubled version

l";3"+10pl";3"+10p

Try it online!

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

Common Lisp REPL, 25 bytes

(if(boundp'z)6(setq z 3))

Try it online!

Try the double version online!

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

Bash 35 bytes

trap 'echo $a' 0
a=$((2**${a:-1}))

single source output:

2

double source output:

4

This uses bash default value parameter expansion to set a to either 1 or the result of 2^a. An exit trap is defined that will print the current value of a, so each additional copy of the source will double the output.

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

Python 3, 62 60 bytes

This time, back to stdout and no cheating.

class X:
 def __del__(s):print(y)
try:y*=2
except:y=1;z=X()

Saved 2 bytes thanks to @OldBunny2800!

| improve this answer | |
\$\endgroup\$
  • \$\begingroup\$ Can't you remove the newline/indent in front of class? \$\endgroup\$ – OldBunny2800 Jul 25 '17 at 13:28
  • \$\begingroup\$ There shouldn't be one in front of class; do you mean the def? I think that's necessary. I don't know how to put method definition on the same line as the class definition. \$\endgroup\$ – lungj Jul 25 '17 at 13:32
  • \$\begingroup\$ I mean, would class X():def __del__(s):print(y) work? \$\endgroup\$ – OldBunny2800 Jul 25 '17 at 13:33
  • \$\begingroup\$ Also, don't think you need parentheses after a class declaration. \$\endgroup\$ – OldBunny2800 Jul 25 '17 at 13:34
  • \$\begingroup\$ The one liner does not work on Python 3.6.0 on macOS installed via homebrew, but it's possible works on some other Python 3. \$\endgroup\$ – lungj Jul 25 '17 at 13:35
1
\$\begingroup\$

Python 3, 74 67 57 bytes

Quick and dirty... Output via text file is allowed per meta.

try:f+=[2]
except:f=[2]
open('o','w').write(str(sum(f)))

| improve this answer | |
\$\endgroup\$
  • 1
    \$\begingroup\$ f.append(2) can be f+=[2] and try: f can be try:f and except: f=[] can be except:f=[] \$\endgroup\$ – Mr. Xcoder Jul 15 '17 at 15:36
  • \$\begingroup\$ @Dennis happier with this version? \$\endgroup\$ – wrymug Jul 16 '17 at 20:27
  • 1
    \$\begingroup\$ Much better. You need to count a trailing newline though, as open... and try... mustn't wind up on the same line. \$\endgroup\$ – Dennis Jul 17 '17 at 21:15
  • \$\begingroup\$ The rules allow assuming a trailing newline between copies. \$\endgroup\$ – zbw Jul 20 '17 at 15:52
  • \$\begingroup\$ @zbw the rules say explicitly the opposite of that \$\endgroup\$ – Taylor Scott Aug 2 '17 at 1:21
1
\$\begingroup\$

Python 3, 48 bytes

Apparently, file I/O is acceptable as an output format.

try:y*=2
except:y=1
open('x','w').write(str(y))

The 48th character is a new-line character at the end of this program.

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

WinDBG, 40 bytes

r$t0=d;r$t0=@$t0*2;.printf"\r%d",@$t0;$$

Outputs 26, and that doubles each time the source is appended.

How it works:

r $t0 = d;                           Initialize psuedo-register t0 to 13
r $t0 = @$t0 * 2;                    Double t0
.printf "\r%d", @$t0;                Move caret to start of output line and print t0
$$                                   Comment until the next ; (comment r $t0 = d)

Sample output:

0:000> r$t0=d;r$t0=@$t0*2;.printf"\r%d",@$t0;$$
26

0:000> r$t0=d;r$t0=@$t0*2;.printf"\r%d",@$t0;$$r$t0=d;r$t0=@$t0*2;.printf"\r%d",@$t0;$$
52

0:000> r$t0=d;r$t0=@$t0*2;.printf"\r%d",@$t0;$$r$t0=d;r$t0=@$t0*2;.printf"\r%d",@$t0;$$r$t0=d;r$t0=@$t0*2;.printf"\r%d",@$t0;$$
104

0:000> r$t0=d;r$t0=@$t0*2;.printf"\r%d",@$t0;$$r$t0=d;r$t0=@$t0*2;.printf"\r%d",@$t0;$$r$t0=d;r$t0=@$t0*2;.printf"\r%d",@$t0;$$r$t0=d;r$t0=@$t0*2;.printf"\r%d",@$t0;$$
208
| improve this answer | |
\$\endgroup\$
1
\$\begingroup\$

Scala (interpreted), 85 Bytes

if(System getProperty "v"eq "")print(2)else{System.setProperty("v","");print("1\r")};

Commented

if(System getProperty "v"eq "") // If the system property "v" is set to ""
  print(2)                      // Print 2
else{                           // Otherwise
  System.setProperty("v","");   // Set the system property "v" to ""
  print("1\r")                  // Print 1 with a carriage return
};


Text that ends with a carriage return and not a newline will be overwritten if anything else is written to the line.


Note: likely doesn't work on all consoles, tested on Windows 8.1 command prompt. For example the TIO console.

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

Lua, 63 bytes

a=1+(a or 0)t=setmetatable(t or{},{__gc=function()print(a)end})

This code does not have a newline at the end.
When program starts, variable a is nil, then it gets modified from nil to 1 and (if program code is doubled) from 1 to 2.
The finalizer of table t gets executed when program finishes (when memory of the table is released), it simply prints last value of variable a.
Lua 5.2+ is required.

| improve this answer | |
\$\endgroup\$
  • 1
    \$\begingroup\$ Seems like it prints nothing. Checked it at lua.org/cgi-bin/demo. Isn't it too late to print when the finalizer is called? \$\endgroup\$ – Qwertiy Jul 19 '17 at 9:29
  • \$\begingroup\$ @Qwertiy - Thanks for bugreport. It is a bug on Lua demo web page. \$\endgroup\$ – Egor Skriptunoff Jul 22 '17 at 20:43
  • \$\begingroup\$ Yep, fine: ideone.com/5xuJhk & ideone.com/poh01N \$\endgroup\$ – Qwertiy Jul 22 '17 at 21:26
  • \$\begingroup\$ You can golf this down to 64 bytes (from 76 bytes at current) by removing whitespace (see Here) \$\endgroup\$ – Taylor Scott Aug 1 '17 at 12:24
  • 2
    \$\begingroup\$ @TaylorScott - All the bytes are <s>belong to us</s> counted! They are 63. Newline was removed. \$\endgroup\$ – Egor Skriptunoff Aug 3 '17 at 18:53
1
\$\begingroup\$

Ruby, 21 bytes

$.+=1
END{p$.
exit!};

1x: Try it online! 2x: Try it online!

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

Ruby, 31 bytes

x||=1;x*=2;END{p x;exit!};

Try it online!

| improve this answer | |
\$\endgroup\$
  • 1
    \$\begingroup\$ You can use END instead of at_exit for -7 bytes. \$\endgroup\$ – Jordan Dec 17 '17 at 23:02
  • \$\begingroup\$ @Jordan nice, thanks! I've edited to incorporate that, but your answer is still shorter so I hope that's okay with you :) \$\endgroup\$ – Simon George Dec 18 '17 at 15:49
  • \$\begingroup\$ Totally fine. Nice answer! \$\endgroup\$ – Jordan Dec 18 '17 at 15:50
1
\$\begingroup\$

Implicit on TIO, 2 bytes

:.

Hmm, not particularly positive how this works. I'll explain it to myself:

:.
    (implicit read integer input), duplicate stack (stack: 0, 0)
 .  increment                                      (stack: 0, 1)

Ok, now I see. : doesn't read input if the stack has a value on it.

:.:.
:     stack: 0, 0
 .    stack: 0, 1
  :   stack: 0, 1, 1
   .  stack: 0, 1, 2

Only works on TIO (:., :.:.) when the input box is empty.

| improve this answer | |
\$\endgroup\$
  • \$\begingroup\$ Would this not also work if you redirect STDIN to an empty file, or if you press Ctrl + Shift + 2 when prompted for input? \$\endgroup\$ – LyricLy Sep 7 '17 at 5:32
  • \$\begingroup\$ @LyricLy Yes, but those require extra bytes. \$\endgroup\$ – MD XF Sep 8 '17 at 2:42
  • \$\begingroup\$ I don't understand. Doesn't it work that way already? Both methods would be sending empty input, just like TIO does. Or am I misunderstanding the reason that it only works on TIO? \$\endgroup\$ – LyricLy Sep 8 '17 at 2:45
  • \$\begingroup\$ @LyricLy Yes, it works that way. But redirecting to STDIN would require, in a shell, ./interpreter sourcefile < emptyfile, and assuming you have an empty file is a standard loophole. Pressing Ctrl+Shift+2 would require user input that is not specified in the challenge, another standard loophole. \$\endgroup\$ – MD XF Sep 8 '17 at 2:46
  • 1
    \$\begingroup\$ I wouldn't consider merely requiring EOF to be piped to the program a standard loophole, but I see where you're coming from. \$\endgroup\$ – LyricLy Sep 8 '17 at 2:52
1
\$\begingroup\$

Pyt, 2 bytes

Explanation:

0       Push 0 onto the stack [0]
 Ł      Get the length of the stack (1)


Try it online!


Doubled:

0Ł0Ł

Explanation:

0           Push 0 onto the stack [0]
 Ł          Get the length of the stack (1)
  0         Push 0 onto the stack [1,0]
   Ł        Get the length of the stack (2)


Try it online!

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

Chip, 11+5 = 16 bytes

+5 bytes for -wc1

<b
*\ae*f
`

The active code:

*\ae*f

Activates a, e, and f which means 0x00110001.

Active code when doubled:

 b
*\ae*f
`<
*\a

Prevents activation of both a's, activates b, e, and f, which means 0x00110010.

Try it online!

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

Julia 0.6, 41 bytes

My first two ideas were already done in python answers (check file length, use a finalizer on an object). So here I check if π is an integer to gate the code that sets π=1 and registers the print to occur on exit. Then just double π each time.

π%1>0?(π=1;atexit(()->show(π))):π*=2;

Try it online!

Try twice it online!

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

Julia 0.6, 24 bytes

Riffing off of lungj's Python 3 answer. This works on my terminal on my mac, but not on TIO. The \r should reset back to the start of the line, so it always overwrites the previous output. Uses string interpolation with $ to execute π=2π÷1 which doubles π and uses integer division to round it to an integer. It does output "WARNING: imported binding for π overwritten in module Main" as well, but thats not an error, and is pretty close to a compiler warning.

print("\r$(π=2π÷1)");

Try it online!

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

tinylisp, 16 bytes

((q(G(i G 2 1)))

Try it online!

Try it doubled!

How?

(q (G (function-body))) creates an unnamed lambda function that takes a variable number of arguments and names the arglist G. In our case, the body of the function is (i G 2 1), which tests if G is empty or not; if it is, we return 1; if it isn't, we return 2. In other words, if we call this function with zero arguments, it returns 1; otherwise, 2.

In the single version, therefore, we call the function without arguments: (function (with an implicit closing parenthesis). In the double version, we call the function, and then call it again with that result as an argument: (function (function (with two implicit closing parentheses).

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

Newline 3 bytes

i\n

Note: running newline in TC mode

Output is the red text up top

Try it online

| improve this answer | |
\$\endgroup\$
  • \$\begingroup\$ You should indicate a newline by leaving an empty line in the code block, not by using an escape sequence. \$\endgroup\$ – Jakob Aug 22 '17 at 22:38
  • \$\begingroup\$ You're referring to the last line of code, correct? That is an actual newline; the string literal is 2 bytes (i and a newline), but its representation in JavaScript source is three (i\n). Your submission here should be encoded as text, not JavaScript source. \$\endgroup\$ – Jakob Aug 23 '17 at 1:32
  • \$\begingroup\$ Could you provide a reference to the thread on Meta? You posted a 3-byte solution here, but the solution you link to is 2 bytes. This doesn't make sense to me. \$\endgroup\$ – Jakob Aug 23 '17 at 21:24
  • \$\begingroup\$ continuing in chat \$\endgroup\$ – Jakob Aug 24 '17 at 21:25
  • 1
    \$\begingroup\$ @Christopher This has nothing to do with rewriting the interpreter in another language. The source code of your program in memory is 2 bytes, not 3. Whether you create that string with a literal (which takes more than 2 characters) or read it from a file (which would contain 2 characters) doesn't matter. \$\endgroup\$ – Martin Ender Feb 13 '18 at 14:15
1
\$\begingroup\$

Microscript, 2 bytes

1 

(Note the trailing space.)

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

SNOBOL4 (CSNOBOL4), 48 bytes

	INPUT('I',1,,'.code.tio');	OUTPUT =size(I);end;

Try it online!

Equivalent to this python answer.

Because the existence of an END label terminates the program, reading the source file is the only way to get this to work, as the program ABCABC is otherwise equivalent to ABC.

SNOBOL always reads input one line at a time so we have to use ; rather than newlines.

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

Stax, 2 bytes

|X

Run online, doubled

Added for completeness. |X in Stax means increment register x and push. Register x is implicitly initialized with 0. The top of stack is implicitly output.

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

SmileBASIC, 11 10 bytes

CLS?X+1X=1
| improve this answer | |
\$\endgroup\$
1
\$\begingroup\$

Yabasic, 22 bytes

An Anonymous function that takes no input and outputs to STDOUT in graphics mode.

Clear Screen
n=n+1
?n

Note: Because this answer uses graphics mode, it does not function on TIO

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