A quine is a piece of code that upon executing will produce itself as the output. A quine is idempotent as its result will remain exactly the same no matter how much time you execute it. Quine are also known as self-replicating programs or self-copying programs.
Gallery of Quines
Here is a collection of quines in different programming languages that I've collected from the internet.
C implementation
Example 1:
const unsigned char data[] = { /* snip */ };
#include <stdio.h>
int main() {
printf( "const unsigned char data[] = {" );
for ( int i=0; i<sizeof(data); i++ ) {
printf( " %0#4x,", data[i] );
}
printf( "\n};\n\n" );
for ( int j=0; j<sizeof(data); j++)
putchar( data[j] );
return 0;
}
Example 2:
int main(void) {
char str[]= " int main(void)\
{ char str[]= %c%s%c;\
printf(str, 0x22, str, 0x22);}";
printf(str, 0x22, str, 0x22);}
Example 3:
main(){char*s="main(){char*s=%c%s%c;printf(s,34,s,34);}";printf(s,34,s,34);}
CoffeeScript implementation
s="s=%j;console.log s,s";console.log s,s
Java implementation
This is a verbose one compared to others.
public class Quine
{
public static void main(String[] args)
{
char q = 34; // Quotation mark character
String[] l = { // Array of source code
"public class Quine",
"{",
" public static void main(String[] args)",
" {",
" char q = 34; // Quotation mark character",
" String[] l = { // Array of source code",
" ",
" };",
" for(int i = 0; i < 6; i++) // Print opening code",
" System.out.println(l[i]);",
" for(int i = 0; i < l.length; i++) // Print string array",
" System.out.println(l[6] + q + l[i] + q + ',');",
" for(int i = 7; i < l.length; i++) // Print this code",
" System.out.println(l[i]);",
" }",
"}",
};
for(int i = 0; i < 6; i++) // Print opening code
System.out.println(l[i]);
for(int i = 0; i < l.length; i++) // Print string array
System.out.println(l[6] + q + l[i] + q + ',');
for(int i = 7; i < l.length; i++) // Print this code
System.out.println(l[i]);
}
}
JavaScript implementation
s="s=%j;console.log(s,s)";console.log(s,s)
(function a(){console.log('('+a+')')})()
code='var q=unescape("%27");console.log("code="+q+code+q+";eval(code)")';eval(code)
Lua implementation
s="s=%qprint(s:format(s))"print(s:format(s))
Perl implementation
Example 1:
$s='$s=%c%s%c;printf($s,39,$s,39);';printf($s,39,$s,39);
Example 2:
$s=q($s=q(%s);printf($s,%s););printf($s,%s);
Python implementation
Example 1:
_='_=%r;print (_%%_)';print (_%_)
Example 2:
s='s=%r;print(s%%s)';print(s%s)
Example 3:
s='s=%r;print(s%%s,sep="")';print(s%s,sep="")
Ruby implementation
Example 1:
s="s=%p;printf s,s";printf s,s
Example 2:
s="s=%p;print s%%s";print s%s
Example 3:
s="s=%p;puts s%%s";puts s%s
Example 4:
s="s=%c%s%c;printf s,34,s,34";printf s,34,s,34
Shell implementation
s='s=\47%s\47;printf "$s" "$s"';printf "$s" "$s"
Scheme implementation
(define x '(
(display "(define x '(")
(newline)
(map (lambda (s) (write s) (newline)) x)
(display "))")
(newline)
(display "(map eval x)")
(newline)
))
(map eval x)
Conclusion
As we can see, the simplest quine have similar format like this s="s=%p;printf s,s";printf s,s
, and larger quine requires more complexity and intricacy to produce.