# Print your code backwards - reverse quine

Write a program that prints its own source code out backwards, in other words an eniuq.

Scoring:

• +50 if you use pull data from the Internet.
• +1 point per character
• Lowest score wins.

Rules:

• No using other files (e.g. reverse.txt)
• Minimum code length is two characters.
• Your program cannot be a palindrome.
• Looks like this has been done before, just without the "no palindromes" rule. – Iszi Dec 18 '13 at 18:59
• Are those scores bonuses or penalties? You need to specify in words if something is a penalty or a bonus, because saying +10 can be taken to mean either "score as if it had 10 more characters than it actually does" or "the code can have 10 more characters that won't be scored", or other interpretations. – AJMansfield Dec 18 '13 at 20:24
• @AJMansfield Lowest score wins means that +x would be a penalty, -x would be a bonus. – Iszi Dec 18 '13 at 20:32
• The one question I have, then, is why is pulling data from the internet given a larger penalty than reading the source file? – AJMansfield Dec 18 '13 at 20:35
• Woohoo, 1st place on the hot network questions list :D Our site needs more attention... – Doorknob Dec 19 '13 at 0:09

# GolfScript - 2


1


(ie \n1 where \n is the newline character)

Output:

1



(ie 1\n)

To quote Ilmari:

GolfScript automatically appends a newline to the end of the output

Thus a newline followed by a number will print the number followed by a newline.

• +1 I didn't think anything could beat the Mathematica solution. – Kaya Dec 21 '13 at 19:55
• Pretty boring solution... – theonlygusti Apr 13 '15 at 17:26
• @theonlygusti It's golfscript, whaddya expect... – Redwolf Programs Feb 27 at 14:39

## huh?, 5 characters

!hcuO


I actually have NO idea how it works, but If you download the interpreter, and if you write !hcuO, then you get Ouch!

To run this, you need to execute the program like this:

huh.exe !hcuO


It will actually look for a file called !hcuO, but it doesn't exist, so it outputs Ouch!

• +1 for writing something you don't understand – Cruncher Dec 18 '13 at 17:54
• Is it not just a little ironic that you don't understand how your own code works, in an esolang that by design isn't supposed to understand your code either? – Iszi Dec 18 '13 at 18:08
• @Iszi That's the joke. – AJMansfield Dec 18 '13 at 20:17
• I'm not sure you're using huh? right, though I'm having a hard time finding proper documentation. It seems the usage is intended to be huh.exe <path to source code> and Ouch! is returned for an invalid path. Try putting your code into an actual file, and feeding that file as an argument to huh? and see what happens. It's also interesting to see that it generates a Notes.txt file with some commentary. – Iszi Dec 18 '13 at 21:59
• Ok, this thing just told me it thinks it understands but I didn't see anything happen. Maybe I should stop toying with it on my primary system. – Iszi Dec 18 '13 at 22:04

# Mathematica, 3 chars

a 2


a 2 means a times 2. So the answer is 2 a.

• This will probably win unless someone can get a two char solution. – ike Dec 20 '13 at 1:54
• In fact I know a two char solution. Also in Mathematica: 1#. The output is #1. – alephalpha Dec 20 '13 at 11:24
• @alephalpha: Then you should post that as an answer! – ProgramFOX Dec 20 '13 at 12:07

## H9+, 13 characters

!dlrow ,olleH


As the web page says, all characters that are not H, 9 or + are ignored, so my program will print Hello, world!

• The one and only practical benefit of crazy esoteric languages is to answer these crazy questions. – totymedli Dec 19 '13 at 8:11
• It'd be more practical if these questions were so. – kojiro Dec 22 '13 at 18:50
• That's pretty darned clever! – theonlygusti Apr 13 '15 at 17:28

## Javascript: 34 characters

reifitnedi detcepxenU :rorrExatnyS


outputs SyntaxError: Unexpected identifier, at least in the Chrome console

• Clever use of abusing the system through error abuse – WallyWest Dec 19 '13 at 1:46
• You sir, have made my day :D – major-mann Dec 19 '13 at 9:54
• @Lohoris Sorry, I didn't see that one – scrblnrd3 Dec 20 '13 at 14:58
• Firebug console in Mozilla Firefox: tnemetats erofeb ; gnissim :rorrExatnyS => SyntaxError: missing ; before statement. – kenorb Jul 21 '14 at 13:09

# Python, 43 41

_=']0~::[_%%_ tnirp;%r=_';print _%_[::~0]


# Mathematica, 2 bytes

1#


Outputs:

#1

## TI-BASIC, 2

i2


Where i is the imaginary number.

Outputs 2i

• This only works in the home screen, not inside a PRGM. – kernigh Jun 28 '14 at 3:27
• @kernigh Did you try it? It works fine. (If the last statement of a TI-BASIC program evaluates as an expression, its result is printed instead of 'Done' when the program terminates) – AJMansfield Apr 13 '15 at 18:04

# BASIC, 2212 7 characters

:-)

1 enil ni rorre xatnyS


EDIT: If you're allowed to enter the program in immediate mode, then this could be reduced to rorre xatnyS (12 characters).

In BBC BASIC, you only need 7 characters:

ekatsiM


# C++ 472 characters

A lot of characters but I cant think of a simpler way in a c-based language.

#include<iostream>
#include<string.h>
#define p(t) std::cout<<'}'<<';'<<')'<<strrev(&std::string(#t)[0])<<t;
char* strrev(char*p){char*t=p;char*q=p;while(q&&*q)++q;for(--q;p<q;++p,--q)*p=*p^*q,*q=*p^*q,*p=*p^*q;return t;}
int main(){p("(p{)(niam tni};t nruter;q*^p*=p*,q*^p*=q*,q*^p*=p*)q--,p++;q<p;q--(rof;q++)q*&&q(elihw;p=q*rahc;p=t*rahc{)p*rahc(verrts *rahc;t<<)]0[)t#(gnirts::dts&(verrts<<')'<<';'<<'}'<<tuoc::dts )t(p enifed#>h.gnirts<edulcni#>maertsoi<edulcni#");}


bash

$dnuof ton dnammoc :found :hsab- -bash: dnuof: command not found  Length: 31 characters. sh $ dnuof ton dnammoc :found :hs-


Length: 29 characters.

This one could not work on some Linux distributions, but works on OSX.

tcsh

$.dnuof ton dnammoC :found. .dnuof: Command not found.  Length: 26 characters. csh % .dnuof ton dnammoC :found. .dnuof: Command not found.  Length: 26 characters. The winner is: ksh $ dnuof ton :found :hsk


Length: 21 characters.

Above should work on all *unix based OS.

• Doesn't work for me, i have a command named dnuof – Kroltan Dec 19 '13 at 14:23
• I forgot to add, it doesn't work on distributions which has dnuof installed (whatever it is). Damn hackers. – kenorb Dec 19 '13 at 15:40
• Hahaha, there's a command named dnuof? :D what does it do? – Doorknob Dec 19 '13 at 23:51

## GolfScript, 12 chars

"-1%."-1%.


This code takes the double-quoted string "-1%.", reverses it (-1%), duplicates it (.) and un-evals () the second copy, restoring the double quotes around it.

### Previous entry (13 chars):

{'.~'+-1%}.~


Based on the 8-char quine {'.~'}.~ from this answer; the extra 5 chars are needed to stringify and reverse the output.

Ps. Note that GolfScript automatically appends a newline to the end of the output. If this is counted as part of the output, a corresponding newline can be prepended to either version of the code without affecting the output, for a cost of one extra char.

# Befunge 98 - 10 chars

"8k,'!1+,@


This works if your interpreter does not interpret wrapped lines after " as adding an extra space. If your interpreter does interpret wrapped lines like that, then this 11 char solution works (because duplicate spaces in a string literal are interpreted as one):

"9k,'!1+,@


If I can use g without penalty, then these also work (7 and 8 chars respectively):

"5k,g,@


and

"6k,g,@


## Ruby, 60

puts(2,s=<<2.chop.reverse,s)
puts(2,s=<<2.chop.reverse,s)
2


Based on a classic Ruby quine.

• Nice use of heredocs. – Jon Purdy Dec 23 '13 at 19:25

$_=q{print~~reverse"$_=q{_};eval"};eval  Old 52 character answer (27+25 penalty) open+0;print ~~ reverse <0>  Reads its own source, stores the reverse in a scalar, and prints that. • The scalar operator can be replaced by ~~. However, you need to add +25 to your score for reading your own source code. – breadbox Dec 18 '13 at 19:26 • @breadbox noted – smcg Dec 18 '13 at 19:39 • +1. I was about to post something like my shell solution: _='say"lave;\047",~~reverse,"\047=_$"';eval, but your solution is shorter :-) Note that you can golf it down to 39 characters using say. Hope you will beat all the esoteric weirdness :-) – Tomas Feb 1 '14 at 20:26 • @Tomas are you suggesting replacing print with say? That ends up not printing anything. – smcg Feb 3 '14 at 14:58 • Did you run perl with -Mfeature=say option? – Tomas Feb 3 '14 at 15:19 # Fission, 6 bytes A rare case of a generalised quine that is the same length as the normal quine: "LO+!'  The idea is the same as that of the normal quine, but we're using a left-going atom (starting at the L) so that print mode traverses the code in the opposite order. # J: 26 Standard quining (26 chars): by defining a function and passing it its own definition, in quotes: |.(,],2#{:)'|.(,],2#{:)'''  Could probably be made shorter. J-specific (33 chars): by defining a variable and asking what file the variable was defined in, i.e. this one, then printing out the contents of that file: 1!:2&2|.1!:1(4!:4 a=:<'a'){4!:3''  Must be saved & run from a script (i.e. not in the REPL, because then the answer to the question is "your argument wasn't defined in a file", so there's no file to read). • The second one should get the + 25 bonus to read the own file. – Johannes Kuhn Dec 18 '13 at 20:04 • @JohannesKuhn: Penalty, but yeah. – jazzpi Dec 19 '13 at 10:08 • "Bonus" sounds nicer. – Johannes Kuhn Dec 19 '13 at 10:15 # ><>, 25 bytes I was surprised to find this hadn't been done yet. :) ...yhsif sllems gnihtemoS  Paste code here and run it. . is the Jump command, popping x and y off the stack, and moving the IP to (x, y) in the code box. In this case, the stack is empty, so the language's only error message is printed: Something smells fishy...  • The best answer – Insane Apr 24 '16 at 18:28 # Microscript, 11 bytes I kind of had to do this. 0"Caxq"Caxq  Surprisingly, this is actually shorter than the language's shortest known true quine. q and a are otherwise equivalent, except q adds wrapping quotes while a does not. # JavaScript jQuery 1199274 70 characters alert($("#answer-16051 pre code").text().split("").reverse().join(""))


Now using jQuery, as minitech suggested in the comments, and manually wrapping with <pre><code> so I can use text() without fear of other code blocks in this post interfering. Manually wrapping with <h4> was incompatible with chromeium when I tested it, so now it should work in most browsers.

This program, if run from this page, finds the code block directly above, reverses its contents, and puts it in an alertbox.

Its easy enough to verify, just paste it into the dev console.

• This is way longer than just using a function. And you should use jQuery (on this page) or at least querySelector anyways… – Ry- Dec 19 '13 at 17:58
• @minitech thanks for the tip, I swapped it for a querySelector now. I would like to look into the jQuery possibility, but it looks like it will take a little longer for me to figure out. – AJMansfield Dec 19 '13 at 18:37
• @minitech ok, thanks for the jQuery tip. (I only started learning javascript yesterday.) – AJMansfield Dec 19 '13 at 18:45
• I like this solution; thinking outside the box. – theonlygusti Apr 13 '15 at 17:35

## PHP, 41 characters (+25)

Don't know if I understood the assignment correctly. But here's a PHP try:

while(!isset($s) ||$s) echo isset($s) ? array_pop($s) : ($s = str_split(file_get_contents(__FILE__)) and null);  edit: this can be much shorter: echo strrev(file_get_contents(__FILE__));  But since it can be that simple, this is probably not what is being asked... • phpFiddle: phpfiddle.org/main/code/fuy-mv0 – nl-x Dec 18 '13 at 20:24 • When I click run, I get a whole bunch of useless nonsense (here is a short snippet of it: >? ;)llun dna ))__ELIF__(f$(tilps_rts = s$( : )s$(pop_yarra ? )s$(tessi ohce )s$ || )s$(tessi!(elihw ;"stnetnoc_"=.f$ ;'teg_elif'=f$php?<>?}};ESLAF nruter;"ec6x\i66x\02x\e47x\96x\rw ; there is much much more). Also, include your character count; this is a code golf. Also, it seems that you are reading your source file, so add 25 to your character count and that is your score. Lowest score wins. – Justin Dec 18 '13 at 21:30 • @Quincunx First off, it is backwards ... but secondly, this is the source code that phpfiddle generates! (but backwards...) They seem to escape a lot of thing, trying to keep things safe. Replace array_pop with array_shift to see the source code not backwards... – nl-x Dec 18 '13 at 21:33 • Yes I can see the reversed source code, but what is with all the extraneous text? There are a lot of escape sequences, but there are some that aren't (eg: ESLAF nruter ie return FALSE). – Justin Dec 18 '13 at 21:36 • @Quincunx Sorry, I'm not catching if you are showing interest in the way phpFiddle works, or if you are criticizing my code. If it's the latter, then in my defense, put my code in a .php file and run it in a browser, and it'll work cleanly. I just thought phpfiddle was a nice thing to let you see, so you can see a bit of it's inner workings. – nl-x Dec 18 '13 at 21:42 ## MATLAB, 78 characters:  | .snoisserpxe ro stnemetats BALTAM ni dilav ton si retcarahc tupni ehT :rorrE  Note that the solution requires you to begin with a special character (alt+0160) and that it prints exactly the reversed message. (Unlike the python solution) # UNIX shell, 31 Real solution at 52 characters: A='printf "A$ lave;\047echo $A|rev\047=A"';eval$A


But beware! Honesty doesn't pay off in today's world! Penalty is too low!!

6 chars + 25 = 31:

rev $0  • On OSX rev$0 generates the error: rev: illegal option -- b. – kenorb Jul 21 '14 at 13:21

## MS-DOS, 24 bytes

eman elif ro dnammoc daB


Output:

Bad command or file name


# JavaScript, 62

function f(){alert((f+'f()').split('').reverse().join(''))}f()


Works for me on latest Chrome (v 31.0.1650.63). Some other browsers may give a different output. (If you reverse that output, then it would work :P)

# SmileBASIC, 118 102 bytes

FOR I=-101TO.?MID$(("+CHR$(34))*3,30,102)[-I];:NEXTFOR I=-100TO.?MID$(("+CHR$(34))*3,30,102)[-I];:NEXT


## JavaScript, 56

($=_=>_!=$._?_?$(_.slice(1))+_[0]:')':$('($='+$+')('))()

• Please state your environment because this does not work in Chrome. Is this Rhino or what? – George Reith Dec 20 '13 at 13:39
• @GeorgeReith: Anything with ES6 arrow function support. All SpiderMonkeys should work fine, for example (Rhino included). – Ry- Dec 20 '13 at 14:42

# CSS, 88 bytes

<style>:before,*{display:block;unicode-bidi:bidi-override;direction:rtl;content:'<style>


Put in a blank html page to avoid conflict with other tags.

# JavaScript, 535046 43 bytes

q=_=>("q="+q+";q()").split("").reverse().join("");q()


(q=_=>(q=${q})().split("").reverse().join(""))()  (q=_=>(q=${q})().split.reverse().join)()


(q=_=>[...(q=${q})()].reverse().join)()  Please help me shorten this up. • You don't need the wrapper. q=_=>[...q=${q}].reverse().join  works just as well. – Rɪᴋᴇʀ Apr 22 '16 at 0:00
• If I remove the wrapper, it will not automatically execute itself. – ericw31415 Apr 22 '16 at 0:29
• it doesn't need to. Functions are fine. – Rɪᴋᴇʀ Apr 22 '16 at 1:03
• But then, the code returns the function reference, not the output of the function. – ericw31415 Apr 23 '16 at 20:16
• @ericw31415 is right. the function call is necessary. – Mama Fun Roll Apr 25 '16 at 4:07

# Fuzzy Octo Guacamole, 4 bytes

KNU_


K prints _UNK, N pushes None, and U pushes 0. And _ pops the top value on the stack (but doesn't print). So only _UNK is printed.

• Why does K output _UNK`? – caird coinheringaahing May 22 '17 at 17:37
• @RandomUser ask Riker for more details, he's the language's creator. I just read the docs. – Bald Bantha May 22 '17 at 22:04