Квайн — комп'ютерна програма, яка не отримує ніяких вхідних даних та видає на виході копію свого власного початкового коду. Цей термін названо на честь американського логіка та філософа Квайна, який займався дослідженням автореференції.
Приклади простих квайнів в різних мовах програмування
10 LIST
(Код слід писати в одному рядку, але для прочитності зроблено розриви рядків.)
->++>+++>+>+>+++>>>>>>>>>>>>>>>>>>>>>>+>+>++>+++>++>>+++>+>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>+>+>>+++>>>>+++>>>+++>+>>>>>>>++>+++>+++>+>+++>+>>+++>>>+++>+>++>+++> >>+>+>+>+>++>+++>+>+>>+++>>>>>>>+>+>>>+>+>++>+++>+++>+>>+++>+++>+>+++>+>++>+++>+ +>>+>+>++>+++>+>+>>+++>>>+++>+>>>++>+++>+++>+>>+++>>>+++>+>+++>+>>+++>>+++>>+[[> >+[>]+>+[<]<-]>>[>]<+<+++[<]<<+]>+[>>]+++>+[+[<++++++++++++++++>-]<++++++++++.<]
#include<stdio.h> char*i="\\#include<stdio.h>",n='\n',q='"',*p= "%s%cchar*i=%c%c%s%c,n='%cn',q='%c',*p=%c%c%s%c,*m=%c%c%s%c%c;%s%c",*m= "int main(){return!printf(p,i+1,n,q,*i,i,q,*i,q,n,q,p,q,n,q,m,q,n,m,n);}" ;int main(){return!printf(p,i+1,n,q,*i,i,q,*i,q,n,q,p,q,n,q,m,q,n,m,n);}
Або коротший приклад
main(){char*a="main(){char*a=%c%s%c;printf(a,34,a,34);}";printf(a,34,a,34);}
Цей приклад використовує препроцесор
#define T(a) main(){printf(a,#a);} T("#define T(a) main(){printf(a,#a);}\nT(%s)\n")
#include <iostream> int main(){const char c=',',dq='"',q[]="'",*s[]={"#include <iostream>", "int main(){const char c=',',dq='","',q[]=",",*s[]={","};std::cout<<s[0]<<std::endl<<s[1]<<dq<<s[2] <<dq<<q<<dq<<s[3]<<dq<<s[0]<<dq<<c<<dq<<s[1]<<dq<<c<<dq<<s[2]<<dq<<c<<dq<<s[3]<<dq<<c<<dq<<s[4]<<dq <<s[4]<<std::endl;}"};std::cout<<s[0]<<std::endl<<s[1]<<dq<<s[2]<<dq<<q<<dq<<s[3]<<dq<<s[0]<<dq<<c <<dq<<s[1]<<dq<<c<<dq<<s[2]<<dq<<c<<dq<<s[3]<<dq<<c<<dq<<s[4]<<dq<<s[4]<<std::endl;}
using System; namespace quine { class Program { [STAThread] static void Main(string[] args) { string s = "using System;{0}namespace quine{0}{2}{0}{1}class Program{0} {1}{2}{0}{1}{1}[STAThread]{0}{1}{1}static void Main(string[] args){0}{1}{1}{2}{0}{1}{1}{1} string s = {4}{6}{4};{0}{1}{1}{1}Console.Write(s, Environment.NewLine, {4}{5}t{4}, {4}{2} {4}, {4}{3}{4}, {4}{5}{4}{4}, {4}{5}{5}{4}, s);{0}{1}{1}{3}{0}{1}{3}{0}{3}"; Console.Write(s, Environment.NewLine, "\t", "{", "}", "\"", "\\", s); } } }
Легший варіант
class Q { static void Main() { string s = @"class Q {0} static void Main() {0} string s = @{2}{3}{2}; System.Console.Write(s, '{0}', '{1}', '{2}', s); {1} {1}"; System.Console.Write(s, '{', '}', '"', s); } }
Q
class Q{public static void main(String[]a){char q=34;String t="class Q{public static void main(String[]a){char q=34;String t=;System.out.println(t.substring(0,62)+q+t+q+t.substring(62));}}";System.out.println(t.substring (0,62)+q+t+q+t.substring(62));}}
unescape(q="unescape(q=%220%22).replace(0,q)").replace(0,q)
або
function quine() { return quine.toString(); }
(funcall (lambda (x) (append x (list (list 'quote x)))) '(funcall (lambda (x) (append x (list (list 'quote x))))))
Або так:
:X
a='a=%c%s%c;a=sprintf(a,39,a,39);disp(a);';a=sprintf(a,39,a,39);disp(a);
Python 2:
a='a=%s;print a%%`a`';print a%`a`
Python 3:
c='c=%r;print(c%%c)';print(c%c)
a="a="":b=left(a,3):c=mid(a,3):msgbox(b+b+c+c)":b=left(a,3):c=mid(a,3):msgbox(b+b+c+c)
Див. також
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
U Vikipediyi ye statti pro inshi znachennya cogo termina Kvajn znachennya Kvajn komp yuterna programa yaka ne otrimuye niyakih vhidnih danih ta vidaye na vihodi kopiyu svogo vlasnogo pochatkovogo kodu Cej termin nazvano na chest amerikanskogo logika ta filosofa Kvajna yakij zajmavsya doslidzhennyam avtoreferenciyi Prikladi prostih kvajniv v riznih movah programuvannyaBASIC 10 LIST Brainfuck Kod slid pisati v odnomu ryadku ale dlya prochitnosti zrobleno rozrivi ryadkiv gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt lt lt gt gt gt lt lt lt lt lt gt gt gt gt lt gt lt lt C include lt stdio h gt char i include lt stdio h gt n n q p s cchar i c c s c n cn q c p c c s c m c c s c c s c m int main return printf p i 1 n q i i q i q n q p q n q m q n m n int main return printf p i 1 n q i i q i q n q p q n q m q n m n Abo korotshij priklad main char a main char a c s c printf a 34 a 34 printf a 34 a 34 Cej priklad vikoristovuye preprocesor define T a main printf a a T define T a main printf a a n T s n C include lt iostream gt int main const char c dq q s include lt iostream gt int main const char c dq q s std cout lt lt s 0 lt lt std endl lt lt s 1 lt lt dq lt lt s 2 lt lt dq lt lt q lt lt dq lt lt s 3 lt lt dq lt lt s 0 lt lt dq lt lt c lt lt dq lt lt s 1 lt lt dq lt lt c lt lt dq lt lt s 2 lt lt dq lt lt c lt lt dq lt lt s 3 lt lt dq lt lt c lt lt dq lt lt s 4 lt lt dq lt lt s 4 lt lt std endl std cout lt lt s 0 lt lt std endl lt lt s 1 lt lt dq lt lt s 2 lt lt dq lt lt q lt lt dq lt lt s 3 lt lt dq lt lt s 0 lt lt dq lt lt c lt lt dq lt lt s 1 lt lt dq lt lt c lt lt dq lt lt s 2 lt lt dq lt lt c lt lt dq lt lt s 3 lt lt dq lt lt c lt lt dq lt lt s 4 lt lt dq lt lt s 4 lt lt std endl C using System namespace quine class Program STAThread static void Main string args string s using System 0 namespace quine 0 2 0 1 class Program 0 1 2 0 1 1 STAThread 0 1 1 static void Main string args 0 1 1 2 0 1 1 1 string s 4 6 4 0 1 1 1 Console Write s Environment NewLine 4 5 t 4 4 2 4 4 3 4 4 5 4 4 4 5 5 4 s 0 1 1 3 0 1 3 0 3 Console Write s Environment NewLine t s Legshij variant class Q static void Main string s class Q 0 static void Main 0 string s 2 3 2 System Console Write s 0 1 2 s 1 1 System Console Write s s HQ9 Q Java class Q public static void main String a char q 34 String t class Q public static void main String a char q 34 String t System out println t substring 0 62 q t q t substring 62 System out println t substring 0 62 q t q t substring 62 JavaScript unescape q unescape q 220 22 replace 0 q replace 0 q abo function quine return quine toString LISP funcall lambda x append x list list quote x funcall lambda x append x list list quote x Abo tak X MATLAB a a c s c a sprintf a 39 a 39 disp a a sprintf a 39 a 39 disp a Python Python 2 a a s print a a print a a Python 3 c c r print c c print c c VBScript a a b left a 3 c mid a 3 msgbox b b c c b left a 3 c mid a 3 msgbox b b c c Div takozhFormula Tappera HQ9