The goal of this challenge is to make a program that outputs the nth letter of its source code where n is given as input to the program. Like most quine challenges, you are not allowed to read your source code as a file or use any builtin quine functions.


An integer 0 <= n < len(program).


The nth character (not byte) of your program.


Like most codegolf questions, you win the challenge by using the lowest number of bytes to solve the challenge.


-5% If your program supports negative indices python style (e.g. -1 would be the last character of your program). If used with the below bonus, your ranges must support negative indices.
-20% If your program supports ranges as input (any format) in addition to the above requirements.
-25% If your program complete both bonuses.


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=70727,OVERRIDE_USER=32700;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>

  • \$\begingroup\$ Are quine builtins forbidden? \$\endgroup\$ – user45941 Feb 1 '16 at 22:19
  • \$\begingroup\$ @Mego yes, they are. \$\endgroup\$ – TheNumberOne Feb 1 '16 at 22:21
  • \$\begingroup\$ Do bonuses stack (100% - 20% - 5% = 75%) or multiply (100% * 80% * 95% = 76%)? \$\endgroup\$ – ETHproductions Feb 1 '16 at 23:18
  • \$\begingroup\$ Do programs that don't actually read their input count? \$\endgroup\$ – Neil Feb 2 '16 at 0:03
  • \$\begingroup\$ @ETHproductions Stack. \$\endgroup\$ – TheNumberOne Feb 2 '16 at 0:13

Pyth, 0.75

(Also happens to be a CJam polyglot, and probably many other languages.)


Expects input on STDIN:

llama@llama:~$ echo 0..0 | pyth -c '0'

Any single digit works, of course. Not exactly the most interesting challenge in Pyth.

| improve this answer | |
  • 1
    \$\begingroup\$ It happens to be a polyglot in many other languages, too. \$\endgroup\$ – Mama Fun Roll Feb 1 '16 at 22:21
  • \$\begingroup\$ works in PlatyPar too \$\endgroup\$ – Cyoce Feb 1 '16 at 22:51
  • 1
    \$\begingroup\$ and Japt, and Jolf, and almost every language with implicit output \$\endgroup\$ – ETHproductions Feb 1 '16 at 23:21
  • 9
    \$\begingroup\$ And PHP, which is clearly the best language for golfing. \$\endgroup\$ – user253751 Feb 2 '16 at 4:21

Javascript ES6, 31 bytes



The standard quine framework:


[prompt()], which is the addon, gets the value at the input index of the resulting quine string.

| improve this answer | |

𝔼𝕊𝕄𝕚𝕟, 9 chars / 19 bytes


Try it here (Firefox only).

Ay, 19th byte!

0 works too (and is much better), but it's way too trivial for my liking.

In addition, ℹ ï,⧺ï would also work, but quine functions aren't allowed.


The standard quine framework is ⟮ɕṡ+ᶈ0.

)⎖ï takes the resulting quine string and gets the character at the input index.

Bonus solution, 11.4 chars / 25.65 bytes


Try it here (Firefox only).

This one qualifies for the 5% bonus, but still does not beat my original submission.


This one uses the stack. ᵖ…ɕṡ+ᶈ0; just pushes the quine string's individual characters to the stack, and ôᵍï directly outputs the character at the input index (positive or negative) in the stack.

| improve this answer | |
  • \$\begingroup\$ Why haven't you made an encoding for this yet? \$\endgroup\$ – Addison Crump Feb 2 '16 at 8:54
  • \$\begingroup\$ Updates are coming too fast! Can't keep up! \$\endgroup\$ – Mama Fun Roll Feb 2 '16 at 14:17

CJam, 12.35 bytes


The program is 13 bytes long and qualifies for the × 0.95 bonus. Try it online!

How it works

{         }      Define a code block.
           _~    Push a copy and execute the copy.
 s               Cast the original code block to string.
  "_~"+          Append "_~".
       ri        Read an integer from STDIN.
         =       Retrieve the character at that index.
| improve this answer | |
  • 4
    \$\begingroup\$ Of course, 0 would have been slightly shorter... \$\endgroup\$ – Dennis Feb 2 '16 at 5:13

Ruby, 53 * 0.75 = 39.75

$><<(<<2*2+?2)[eval gets]
$><<(<<2*2+?2)[eval gets]

Generates a HEREDOC string delimited by a 2 on its own line, concatenates it (*2) and then adds in the final 2 via a character literal. Slices into it using Ruby's built in String#[], which supports positive integers, negative integers, and ranges (input in the form m..n). $><< is output. (puts would require an extra space here).

| improve this answer | |
  • \$\begingroup\$ I think gets.to_i would do the same thing as eval gets, and be clearer. It wouldn't handle non-integer input, but that's not necessary anyway \$\endgroup\$ – Fund Monica's Lawsuit Feb 2 '16 at 20:09
  • \$\begingroup\$ That's normally what I'd do, but this gets the bonus for handling Ranges. (Also the non-existent bonus for being turing complete). \$\endgroup\$ – histocrat Feb 2 '16 at 20:48
  • \$\begingroup\$ Ah, I missed that. My bad. \$\endgroup\$ – Fund Monica's Lawsuit Feb 2 '16 at 20:48

Ruby, 38.25 bytes

a="a=%p;$><<(a%%a)[eval gets]";$><<(a%a)[eval gets]

Support negative indices and ranges. I blatantly picked up both $><< and the eval trick from histocrat, and the quine trick was someone else's to begin with, so I'll make this CW.


Python 2, 46.55 bytes


Supports negative indices.

| improve this answer | |
  • \$\begingroup\$ Yes, this supports negative indicies. \$\endgroup\$ – cat Feb 2 '16 at 2:58

Haskell, 122 bytes

main=getLine>>= \i->putChar$(!!(read i))$p++show p where p="main=getLine>>= \\i->putChar$(!!(read i))$p++show p where p="


main=getLine>>= \i->putChar$(!!(read i))$p++show p
 where p="main=getLine>>= \\i->putChar$(!!(read i))$p++show p\n where p="
| improve this answer | |

Befunge 93, 5 bytes

This is pretty (very) late but I'll post it anyway:

| improve this answer | |
  • 1
    \$\begingroup\$ This is on the edge of being legal IMO. It doesn't read its own source code as a file, but it does read its own source code. \$\endgroup\$ – user62131 Nov 17 '16 at 20:53

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.