Quine์ ์คํ ์ ์ด์ ์ ์คํ๋ ์ถ๋ ฅ๊ณผ ๋์ผํ ์ฝ๋๋ฅผ ์์ฑํ๋ ์ฝ๋๋ฅผ ๋งํฉ๋๋ค. ๋ฉฑ๋ฑ์ฑ ์์ฑ์ ๋ํ๋ ๋๋ค. Quine์ "์์ฒด ๋ณต์ ํ๋ก๊ทธ๋จ" ๋๋ "์์ฒด ๋ณต์ฌ ํ๋ก๊ทธ๋จ"์ผ๋ก๋ ์๋ ค์ ธ ์์ต๋๋ค.
๋ถ์ธ ์ฑ๋ช ํ๊ตญ์ด ์ค๋ ฅ์ด ๋ถ์ ํ์ฌ ์ด ๊ธ์ด ๊ตฌ๊ธ ๋ฒ์ญ๊ธฐ๋ฅผ ์ฃผ๋ก ํ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ถ์ ํํ ๋ฌธ๋ฒ๊ณผ ์ดํ๊ฐ ์์์ ์์ต๋๋ค. ์ด ์ ์ํด ๋ถํ๋๋ฆฌ๋ฉฐ, ์ถํ์ ๋ค์ ๊ฒํ ํ์ฌ ์์ ํ๋๋ก ํ๊ฒ ์ต๋๋ค.
C
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
s="s=%j;console.log s,s";console.log s,sJava
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
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
s="s=%qprint(s:format(s))"print(s:format(s))Perl
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
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
Example 1
s="s=%p;printf s,s";printf s,sExample 2
s="s=%p;print s%%s";print s%sExample 3
s="s=%p;puts s%%s";puts s%sExample 4
s="s=%c%s%c;printf s,34,s,34";printf s,34,s,34Shell
s='s=\47%s\47;printf "$s" "$s"';printf "$s" "$s"Scheme
(define x '(
(display "(define x '(")
(newline)
(map (lambda (s) (write s) (newline)) x)
(display "))")
(newline)
(display "(map eval x)")
(newline)
))
(map eval x)์ฐธ๊ณ
Bertoldi, D. How to write your first Quine program.ย Towards Data Science. https://towardsdatascience.com/how-to-write-your-first-quine-program-947f2b7e4a6f