рдмрд╣реБрд╡рд┐рдХрд▓реНрдкреА рдЬрдирдХ

рд╣реИрдмрд░реНрд╕ рдХреНрд╡реАрди рдХреЗ рдорд╣реАрдиреЗ рдкрд░, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдкрдиреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреЛ рдореИрдВрдиреЗ рдЪрд╛рд░ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдерд╛ред

рдПрдХ рдЕрдЪреНрдЫреА рдмрд╣реБрд╕реНрддрд░реАрдп рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдХрд╛ рдХрд╛рдо рд╣реИ, рд▓реЗрдХрд┐рди ...
рдЬрдм "рдЯреЗрд▓реАрдЧреНрд░рд╛рдл рд▓рд╛рдЗрди рдкрд░ рд╣рд╕реНрддрдХреНрд╖реЗрдк" рдХреЗ рдЕрдЧрд▓реЗ рдмреИрдЪ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╕рд╛рдзрд╛рд░рдг рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗрд╡рд▓ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реЛрддрд╛ рд╣реИ: "рдпрд╣ рдХреИрд╕реЗ рд╕рдВрднрд╡ рд╣реИ", рдФрд░ "рдХреМрди рдерд╛ рд╡рд╣ рдЙрджрд╛рд╕ рдЯреЙрдЯреЛрдирд┐рдХ рдЬреАрдирд┐рдпрд╕"ред
рдореИрдВ рдХрд╡рд░реЛрдВ рдХреЛ рддреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдХрд┐рд╕реА рднреА рднрд╛рдЧ рдореЗрдВ рдХрд┐рд╕реА рднреА рдЬрдЯрд┐рд▓рддрд╛ рдХреА рдПрдХ рдмрд╣реБрд╕реНрддрд░реАрдп рд▓рд┐рдЦрдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рдлреЗрдж рд╕реНрдерд╛рди рдФрд░ рдмреНрд░реЗрдирдлреИрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдЪреВрдВрдХрд┐ рд╣рдо рдХрд╛рд░реНрдпрдХреНрд░рдо рдЧреНрд░рдВрдереЛрдВ рдФрд░ рдЙрдирдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрдирд╛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реЛрдЧрд╛ред

рдХрд╛рд░реНрдпреЛрдВ


рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ?
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдПрдХ рджреБрднрд╛рд╖рд┐рдпрд╛ рд╣реИ : рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкрд╛рда рд▓реЗрддрд╛ рд╣реИ, рдорд╛рдирдХ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рдкрд╛рда рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЪрд▓рд╛рддрд╛ рд╣реИ, рдФрд░ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред
рд╣рдо рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрд╕ рдХрд╣рддреЗ рд╣реИрдВ: RUN ред
рдЪреВрдВрдХрд┐ рд╣рдо рдПрдХ рднрд╛рд╖рд╛ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкреВрд░рд╛ рдкрд░рд┐рд╡рд╛рд░ рд╣реИ: Runpython, RUNc, RUNbrainfuck ...
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕реЗ - рдпрд╣ рд╣рдореЗрдВ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рдо рднрд╛рд╖рд╛ рдХреЗ рдЕрдкрдиреЗ рд╡реНрдпрд╛рдЦреНрдпрд╛рдХрд╛рд░ рдХреЛ рдирд╣реАрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ, рдЙрд╕реА рднрд╛рд╖рд╛ рдореЗрдВред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореБрдЦреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрдм рд╣рдорд╛рд░реЗ рд╕рд┐рд░ рдореЗрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдореАрдХрд░рдгреЛрдВ рдХреЛ рд╣рд▓ рдХрд░реЗрдВрдЧреЗред

рджреВрд╕рд░реЗ, рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд╛рд░ рдбреЗрдХреЛрд░реЗрдЯрд░ рдФрд░ рд▓реЗрдЦрдХ рд╣реИрдВ ред рдбреЗрдХреЛрд░реЗрдЯрд░ рдПрдХ рдордирдорд╛рдирд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рдкрд╛рддреНрд░реЛрдВ рдХреЛ рдмрджрд▓рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд▓реЗрдЦрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рд╕реЗ рдШреЗрд░рддрд╛ рд╣реИред
L x = qopen + D x + qclose
рдбреЗрдХреЛрд░реЗрдЯрд░реНрд╕ рдХреА рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрдкрддреНрддрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рдЬреЛрдбрд╝ (рд╕рдВрдпреЛрдЬрди) рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рд╕рдВрд╡реЗрджрдирд╢реАрд▓рддрд╛ рд╣реИ: рдИ (рдПрдХреНрд╕ + рд╡рд╛рдИ) = рдПрдХреНрд╕ + рдЖрдИред

рд╡реИрд╕реЗ, рд╣рдо рддреБрд░рдВрдд рд╕рд╣рдордд рд╣реЛрдВрдЧреЗ: рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рди рдмрдбрд╝реЗ рдЕрдХреНрд╖рд░реЛрдВ рдореЗрдВ рд╣реЛрдВрдЧреЗ, рдЫреЛрдЯреЗ рдЕрдХреНрд╖рд░реЛрдВ рдореЗрдВ рддрд╛рд░, рдПрдлрдПрдХреНрд╕ - рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдл рд╕реЗ рдПрдХреНрд╕ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛, рдПрдлрдЬреАрдПрдХреНрд╕ - рдПрдл рдХреЛ рдЬреАрдПрдХреНрд╕ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛, рдпрд╛, рдПрдХ рд╣реА рд╣реИ, рд░рдЪрдирд╛ рдПрдлрдЬреА рд╕реЗ рдПрдХреНрд╕ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ред

Quine


рдпрджрд┐ рдЖрдк C рдореЗрдВ рд╕рдмрд╕реЗ рдЫреЛрдЯреА рд░рд╛рдиреА рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ,
char*f="char*f=%c%s%c;main(){printf(f,34,f,34,10);}%c";main(){printf(f,34,f,34,10);} 

рддрдм рд╣рдо рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреИрдЯрд░реНрди рджреЗрдЦреЗрдВрдЧреЗред рдпрд╣рд╛рдВ, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рджреЛ рдЯреБрдХрдбрд╝реЗ рджреЛ рдмрд╛рд░ рджреЛрд╣рд░рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ - рдПрдХ рдмрд╛рд░ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдкрд╛рда рдХреЗ рд░реВрдк рдореЗрдВ, рджреВрд╕рд░реА рдмрд╛рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдмреНрджрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВред

рдФрд░ рдЗрд╕реЗ рдиреАрдЪреЗ рд▓рд┐рдЦреЗрдВ: quine = a + b + Ea + c + Ee + d + e

рдареАрдХ рдЙрд╕реА рддрд░рд╣, рдЬреИрд╕реЗ рд╣рдо рдЕрдЬрдЧрд░ рдореЗрдВ рдХреНрд╡реАрди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
 s1,s2 = 's1,s2 = ', "\nprint s1+repr(s1)+', '+repr(s2)+s2" print s1+repr(s1)+', '+repr(s2)+s2 

рдпрд╛, рдереЛрдбрд╝рд╛ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдФрд░ рдХреНрд░рд┐рдпрд╛:
 # this is quine s1 = '# this is quine' s2 = 'print s1\nprint "s1="+repr(s1)\nprint "s2="+repr(s2)\nprint s2' print s1 print "s1="+repr(s1) print "s2="+repr(s2) print s2 

рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ рдП рдФрд░ рдИ рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рд╣реИрдВ, рдмрдбрд╝реЗ рдЧреНрд░рдВрде рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИрдВ; рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ рдмреА, рд╕реА, рдбреА - рдЧреЛрдВрдж, рдЖрдорддреМрд░ рдкрд░ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ, рдЧрд╛рдбрд╝реА рд╕реНрдерд╛рдирд╛рдВрддрд░рдг, рдЖрджрд┐ рд╕реЗ рдорд┐рд▓рдХрд░ред

рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреА рдмрд╛рдд рдХрд░рдирд╛ред рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдкрд╛рда рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рдЕрдЦрдВрдб рд░реЗрдЦрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд░реЗрдЦрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдЕрдиреНрдп рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдкрд░ рд▓реМрдЯреВрдВрдЧрд╛, рдФрд░ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ред
рдЗрд╕ рдмреАрдЪ, рд╡рд╛рдкрд╕ рд░рд╛рдиреА рдХреЗ рдкрд╛рд╕ред
RUN рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреНрд╡реАрди рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: RUN quine = quine ред
рдпрд╛рдиреА, рдХреНрд╡реАрди RUN рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдмрд┐рдВрджреБ рд╣реИред
рдЖрдЗрдП рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдХреНрд╡реАрди рдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдордирдорд╛рдиреЗ рддрд░реАрдХреЗ рд╕реЗ рдордирдорд╛рдиреЗ рддрд╛рд░ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдирд╛ рд╕реАрдЦреЗрдВ?
 Q(F,f,g,h,i,j) = a + b + Ef + c + Ej + d + e --  a,b,c,d,e -  () F  g,h,i. RUN Q(F,f,g,h,i,j) = f + g + Ff + h + Fj + i + j 

рдПрдХ рд╣реА рдЕрдЬрдЧрд░ рдкрд░:
 # this is Q def F(s) : '''     F   ''' s1 = 'Ef' s2 = 'Ej' print s1 + 'Eg' + F(s1) + 'Eh' + F(s2) + 'Ei' + s2 #  Ef, Eg, Eh, Ei, Ej тАФ  - 

рдХреНрд╡рд╛рди рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдкрджрд╛рд░реНрде рдХрд╛ рд╣рд▓ рд╣реИ: RUN Q(F,f,g,h,i,j) = Q(F,f,g,h,i,j)
 RUN Q(F,f,g,h,i,j) = f + b + Ff + c + Fj + d + e Q(F,f,g,h,i,j) = a + b + Ff + c + Ej + d + e 

Whence F = E, рдЕрд░реНрдерд╛рдд рд╕рдЬрд╛рд╡рдЯ рдХреА рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╡рд┐рдзрд┐ рднрд╛рд╖рд╛ рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдЬрд╛рд╡рдЯ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддреА рд╣реИ; рдкрд╛рда рдХреЗ рдЯреБрдХрдбрд╝реЗ - рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред

рдПрдХ рдФрд░ рд╡рд┐рд╖рдпрд╛рдВрддрд░: рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рд╣реА рднрд╛рд╖рд╛ рдХреЗ рднреАрддрд░, рд╕рдЬреНрдЬрд╛рдХрд╛рд░ рдмрд╣реБрдд, рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЗ рд░реВрдк рдореЗрдВ рддрд╛рд░реЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдлрд┐рд░ "рд▓рд╛рдЗрди" рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ 104, 97, 98, 114 рдкреНрд░рд┐рдВрдЯ '' .join (рдореИрдк (chr), xs) рд╣реИ, рдФрд░ рд╕рдЬрд╛рдП рдЧрдП рдлреЙрд░реНрдо рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд┐рдВрдЯ рд╣реИ ',' рдЬреЙрдЗрди (рдореИрдк (str), xs)ред

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ: RUN рдФрд░ Q рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рдКрдкрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ (Q рдЖрдорддреМрд░ рдкрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдФрд░ рдПрдХ рдлрдВрдХреНрд╢рди рдкрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдПрдХ рдЙрдЪреНрдЪ-рдХреНрд░рдо рдлрд╝рдВрдХреНрд╢рди рд╣реИ), рд▓реЗрдХрд┐рди рдЙрдирдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рдХреНрд╖реНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рдмрд╛рд╣рд░ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдХреНрд╡реАрди рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдЬрдмрдХрд┐ рдлрд╝рдВрдХреНрд╢рди E рдХреЛ рд▓рдХреНрд╖реНрдп рднрд╛рд╖рд╛ рдореЗрдВ рдкрд╛рда рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП!

рдкреНрд░рд┐рдВрдЯрд░


рдЕрдм рдЪрд▓реЛ рдПрдХ рдФрд░, рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдХрд╛рд░реНрдпрдХреНрд░рдо рджреЗрдЦреЗрдВред рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкрд╛рда рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред
 printer = p + Sq + r RUN printer = q 

рдЬрд╣рд╛рдВ рдПрд╕ рд╕рдЬрд╛рдпрд╛ рдкрд╛рда рднрдВрдбрд╛рд░рдг рдХрд╛ рдХреБрдЫ рддрд░реАрдХрд╛ рд╣реИред

рдЪреВрдВрдХрд┐ рд╣рдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдордирдорд╛рдиреЗ рдкрд╛рда рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд┐рдВрдЯрд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдПрдХ рдлрдВрдХреНрд╢рди рдХрд░реЗрдВрдЧреЗ:
 P(q) = p + Sq + r 

рдмреЗрд╢рдХ, рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп: RUN P(q) = q
рдпрд╣реА рд╣реИ, рдкреНрд░рд┐рдВрдЯрд░ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЗ рд╡рд┐рдкрд░реАрдд рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ!

рд╕реА рдореЗрдВ:
 #include <stdio.h> int main() { printf("%s", "hello\nhabr"); return 0; } 

рдЕрдЬрдЧрд░ рдкрд░:
 print """ hello RSDN """ 

рдпрд╣реА рд╣реИ, рдпрд╣рд╛рдБ рдлрд╝рдВрдХреНрд╢рди S рдЕрдЪреНрдЫреЗ рдкреБрд░рд╛рдиреЗ рдИ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ (рдЕрдЬрдЧрд░ рдкрд░, рдпрд╣ рдФрд░ рднреА рд╕рд░рд▓ рд╣реИ, рдЖрдкрдХреЛ рд▓рд╛рдЗрди рдлреАрдб рд╕реЗ рдмрдЪрдирд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛)ред
рдФрд░ рдпрд╣рд╛рдБ - рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛:
 #include <stdio.h> int main() { putchar(114);putchar(115);putchar(100);putchar(110); return 0; } 

рдкреНрд░рд┐рдВрдЯрд░ P, рдХреНрд╡реАрди рдХреНрдпреВ рдХреЗ рд╕рд╛рде рдЕрдиреБрдХреВрд▓рддрд╛ рд╕реЗ рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рддрддреНрд╡, p рдФрд░ r, рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВред

рдореЗрдЯрд╛- рдкреНрд░рд┐рдВрдЯрд░ рдХреЛ рдкреНрд░рд┐рдВрдЯрд░ рд╕реЗ рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ: рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЬреЛ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЯреЗрдХреНрд╕реНрдЯ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред
 Pmeta (q) = PPq = P(p + Sq + r) = p + S(p + Sq + r) + r = p + Sp + SSq + Sr + r pmeta = p + Sp Smeta = SS rmeta = Sr + r RUN (RUN( Pmeta(q) )) = q 


рдХреЛрдИ рд╣рдореЗрдВ рдмрд╣реБрднрд╛рд╖реА рдкреНрд░рд┐рдВрдЯрд░ рдмрдирд╛рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХ рд░рд╣рд╛ рд╣реИ:
 Pbilingua(q) = P'P"q = P'(p" + S"q + r") = p' + S'p" + S'S"q + S'r" + r' RUN"(RUN'(Pbilingua(q))) = RUN"(RUN'(P'P"(q))) = RUN"(P"(q)) = q 


рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдк рдХрд┐рддрдиреА рднреА рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ( рдорд▓реНрдЯреА-рдкреНрд░рд┐рдВрдЯрд░ ):
 Pmulti(q) = pmulti + Smultiq + rmulti pmulti = p1 + S1p2 + S1S2p3 + S1S2S3p4 Smulti = S1S2S3S4 rmulti = S1S2S3r4 + S1S2r3 + S1r2 + r1 


рд╣рдо рд╕рднреА рдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рд╕рдЬреНрдЬрд╛рдХрд╛рд░реЛрдВ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд░рдЪрдирд╛ рдХреИрд╕реЗ рдХрд░реЗрдВред (рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ - рдиреАрдЪреЗ)ред

рдФрд░ рдПрдХ рдФрд░ рдкреНрд░рд┐рдВрдЯрд░, рдкреВрд░реНрдгрддрд╛ рдХреЗ рд▓рд┐рдП: рдпрд╣ рдПрдХ рдЕрд╢рдХреНрдд рдкреНрд░рд┐рдВрдЯрд░ P0 (рдкрд╛рда) = рдкрд╛рда рд╣реИ
 p0 = "" r0 = "" S0 = id 


рдкрд┐рдВрдЧ рдкреЛрдВрдЧ


рдЦреИрд░, рдЕрдм рдкреНрд░рд┐рдВрдЯрд░ (рдпрд╛ рдорд▓реНрдЯреА-рдкреНрд░рд┐рдВрдЯрд░) рдФрд░ рдХреНрд╡реАрди рдХреЛ рдкрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣рд╛рдВ рд╕рдореАрдХрд░рдг рдХрд╛ рд╣рд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдЪрд▓реЛ рдЗрди рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдкрд┐рдВрдЧ рдФрд░ рдкреЛрдВрдЧ рдХрд╣рддреЗ рд╣реИрдВ:
 RUN ping = pong RUN pong = ping 


рдФрд░ рдкрд┐рдВрдЧ рдкреНрд░рд┐рдВрдЯрд░ P (рдкреЛрдВрдЧ) рд╣реЛ, рдФрд░ рдкреЛрдВрдЧ рдХреБрдЫ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛред рдпрджрд┐ рдпрд╣ рдкреА (рдкрд┐рдВрдЧ) рдерд╛, рддреЛ рд╣рдо рдПрдХ рдЕрд╕реАрдо рд░реВрдк рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ, рдФрд░ рд╣рдо рдЕрдВрддрд┐рдо рд╕рдорд╛рдзрд╛рди рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рддреЛ рдкреЛрдВрдЧ = рдХреНрдпреВ (рдПрдл, рдПрдл, рдЬреА, рдПрдЪ, рдЖрдИ, рдЬреЗ)ред
рд╕реНрдерд╛рдирд╛рдкрдиреНрди:
 ping = P pong = p + S pong + r = p + S(a + b + Ef + c + Ej + d + e) + r = p + Sa + Sb + SEf + Sc + SEj + Sd + Se + r = (p + Sa + Sb) + SEf + Sc + SEj + (Sd + Se + r) ping = RUN pong = f + g + Ff + h + Fj + i + j 

рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП f = p+Sa+Sb , рдФрд░ g=Sa+Sb рдирд╣реАрдВ?
рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЪ рдФрд░ рдЬреЗ рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрди рдореЗрдВ рдкреЛрдВрдЧ рд╕реНрд░реЛрдд рдХреЛрдб (рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ рдП, рдмреА, рдбреА, рдИ) рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдЬреА, рдПрдЪ, рдЖрдИ рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдЕрд╡рд╛рдВрдЫрдиреАрдп рд╣реИред

рддреЛ рд╣рдо рдорд┐рд▓ рдЧрдП
pong = a+b + E(p+Sa+Sb) + c + E(Sd+Se+r) + d+e

рдФрд░ рдХрд╣реАрдВ рдПрдХ рдпрд╛ рдИ рдХреЗ рдЖрдВрддреЛрдВ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди F = SE рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ ESc рдЫрд┐рдкрд╛ рд░рд╣реЗ рд╣реИрдВред
рдиреЛрдЯ: рдпрджрд┐ рдИ рдореЗрдВ рдИрдПрд╕рд╕реА рд╣реИ, рддреЛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕реА рдИ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИред

рдЖрдЗрдП рдЕрдм рд╣рдо рдЗрди "рдЖрдВрддреЛрдВ рдореЗрдВ рдЫрд┐рдкрдиреЗ" рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдПрдВред рдПрдХ рдФрд░ рдлрдВрдХреНрд╢рди рд▓реЗрдВред
рдЪрд▓реЛ
 pong = R(F,x,y,z) = a + Ex + b + Ez + c + Ey + d RUN R(F,x,y,z) = x + Fx + y + Fz + z P pong = p+Sa + SEx + Sb + SEz + Sc+SEy+Sd+r RUN pong = x + Fx + y + Fz + z 


рддреЛ рд╣рдореЗрдВ рдорд┐рд▓рд╛:
 F = SE x = p+Sa y = Sb z = Sc+SEy+Sd+r = Sc + SESb + Sd + r 


рдпрджрд┐ рдЖрдк рдкреЛрдВрдЧ рдХреЛ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ,
 pong = R(F,x,y,z) = a + Ex + b + Ey + b + Ez + c RUN R(F,x,y,z) = x + Fx + y + Fy + y + Fz + z 

рдпрд╣реА рд╣реИ, рдЕрдЧрд░ рд╣рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреА рдПрдХ рд╕реВрдЪреА рдорд┐рд▓реА, рддреЛ рд╣рдо рджреЛрд╣рд░реА рд╕рдЬрд╛рд╡рдЯ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓реЗрдВрдЧреЗ:

 P pong = p+Sa + SEx + Sb + SEy + Sb + SEz + Sc+r RUN pong = x + Fx + y + Fy + y + Fz + z 


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ P = {S, p,r} рдФрд░ R = {E,a,b,c} рд▓рд┐рдП рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд╣реИрдВ, рддреЛ рд╣рдо рддреБрд░рдВрдд рдЙрдиреНрд╣реЗрдВ рдкрд┐рдВрдЧ-рдкреЛрдВрдЧ рдореЗрдВ рдмрджрд▓ рджреЗрдВрдЧреЗред рдФрд░ рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдкреА рдПрдХ рдорд▓реНрдЯреА-рдкреНрд░рд┐рдВрдЯрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░ рдкрд┐рдВрдЧ-рдкреЛрдВрдЧ n + 1 рдХреА рдЕрд╡рдзрд┐ рдХреЗ рд╕рд╛рде рджреЛрд▓рди рдХрд░реЗрдЧрд╛, рдЬрд╣рд╛рдВ n рдмрд╣реБ-рдкреНрд░рд┐рдВрдЯрд░ рдХреА рдмрд╣реБрд▓рддрд╛ рд╣реИред рдФрд░ рдпрджрд┐ P рдПрдХ рдЕрд╢рдХреНрдд рдкреНрд░рд┐рдВрдЯрд░ рд╣реИ, рддреЛ рдкрд┐рдВрдЧ-рдкреЛрдВрдЧ 1 рдХреА рдЕрд╡рдзрд┐ рдХреЗ рд╕рд╛рде рджреЛрд▓рди рдХрд░реЗрдЧрд╛ рдФрд░ (рдЬрд┐рд╕рдиреЗ рд╕реЛрдЪрд╛ рд╣реЛрдЧрд╛?) рдПрдХ рдХреНрд╡реАрди рдмрди рдЬрд╛рддрд╛ рд╣реИред

рдЖрдЦрд┐рд░реА рдЪреАрдЬ рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ рд╡рд╣ рд╣реИ рдХрдВрдкреЛрдЬрд┐рд╢рди рдПрд╕рдИред
рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рдХрд╛рд░реНрдп рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред
рджрд┐рдпрд╛ рдЧрдпрд╛: рдкреЛрдВрдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛; рд╕рдЬреНрдЬрд╛рдХрд╛рд░ рдИ рдФрд░ рдПрд╕, рдЗрд╕ рднрд╛рд╖рд╛ рдХреЗ рдИ рдореВрд▓ рдирд┐рд╡рд╛рд╕реА рдХреЗ рд╕рд╛рде, рдФрд░ рдПрд╕ рдХреЛрдИ рднреАред
рдЦреЛрдЬреЗрдВ: рдкреМрдВрдЧ рд╕рдмрд░реВрдЯреАрди рдкрд╛рда рдЬреЛ рдПрд╕рдИ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
рдФрд░ рдЙрд╕реА рд╕рдордп, рд╡рд┐рдХрд╛рд╕ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреА рднрд╛рд╖рд╛ рдореЗрдВ рд╕рдЬреНрдЬрд╛рдХрд╛рд░ рдИ рдФрд░ рдПрд╕рдИ рд▓рд╛рдЧреВ рдХрд░реЗрдВред рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рдо рдмрд╣реБрд╕реНрддрд░реАрдп рдХреА рдкреАрдврд╝реА рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╕рдЬреНрдЬрд╛рдХрд╛рд░ рдлрд┐рд░ рд╕реЗ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реЛрддреЗ рд╣реИрдВред
рдбреЗрдХреЛрд░реЗрдЯрд░ рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рддрд░рдг рдпреЛрдЧреНрдп рд╣реИ: F (a + b) = Fa + Fbред
рдпрджрд┐ рд╣рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХ рднрд╛рдЧреЛрдВ рдореЗрдВ рддреЛрдбрд╝рддреЗ рд╣реИрдВ - рдПрдХрд▓-рд╡рд░реНрдг рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕, рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ
F(abcdтАж) = Fa + Fb + Fc + Fd + тАж
рд╕рдЬреНрдЬрд╛рдХрд╛рд░ рд╕рд╣рдпреЛрдЧреА рд╣реИрдВ:
FG(abcdтАж) = FGa + FGb + FGc + FGd + тАж

рдЗрд╕рд▓рд┐рдП, рд╣рдо рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдг рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЛрдбрд┐рдВрдЧ рдЯреЗрдмрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд░рдЪрдирд╛ рдХреЛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рдорд╛рди рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде, рд▓реЗрдХрд┐рди рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдорд╛рди рдХреЗ рд╕рд╛рде рдкреБрдирд░реНрдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХрд╛рд░реНрдп рдпреЛрдЬрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдереА:
рджрд┐рдП рдЧрдП:

рд╣рдо рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ:
  1. рд╣рдо рдмрд╣реБ-рдкреНрд░рд┐рдВрдЯрд░ {S,p,r} , S1S2... рдЧрдгрдирд╛ S1S2... рддрд╛рд▓рд┐рдХрд╛рдУрдВ рд╕реЗред
  2. рд╣рдо рдЯреЗрдмрд▓ F = SE рдкрд╛рддреЗ рд╣реИрдВред
  3. рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рд╣рдо рдиреНрдпреВрдирддрдо рд╡рд░реНрдгрдорд╛рд▓рд╛ рдкрд╛рддреЗ рд╣реИрдВ - рд╡рд░реНрдгреЛрдВ рдХрд╛ рд╕рдореВрд╣ рдЬреЛ p, r, Sa, Sb, Sc, Sd рдмрдирд╛рддреЗ рд╣реИрдВред рдпрд╣ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХрд┐ рд╕рднреА ASCII рдпрд╛, рднрдЧрд╡рд╛рди рди рдХрд░реЗ, рдпреВрдирд┐рдХреЛрдб рдХреА рдХреЛрдбрд┐рдВрдЧ рдЯреЗрдмрд▓ рдХреЛ рдвреЗрд░ рди рдХрд░реЗрдВред
  4. рддрд╛рд▓рд┐рдХрд╛ рдХреЛ c рдпрд╛ c рдореЗрдВ рдЪрд┐рдкрдХрд╛рдПрдБред
  5. рд╣рдо x=(p+Sa), y=(Sb), z=(Sc+r) рдкрд╛рддреЗ рд╣реИрдВред
  6. рд╣рдо рдПрдХ рдкреЛрдВрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ: a+Ex+b+Ey+b+Ey+c ред

рд╡рд╣ рд╕рдм рд╣реИ!

рдФрд░ рдЪреВрдВрдХрд┐ рдпреЗ рд╕рднреА рдЪрд░рдг рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдПрдХ рдХреНрд╡реАрди рдЬрдирд░реЗрдЯрд░ рд▓рд┐рдЦреЗрдВред
рдпрд╣рд╛рдВ, рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрдЬрдЧрд░ рдХреЛрдб рдЬреЛ (рдлрд┐рд▓рд╣рд╛рд▓) рдЕрдЬрдЧрд░ рдФрд░ рд╕реА рд╕реЗ рдмрд╣реБрд╕реНрддрд░реАрдп рдмрдирд╛рддрд╛ рд╣реИред
рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдкреВрд░рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджрд╕ рдорд┐рдирдЯ рдХреА рдмрд╛рдд рд╣реИред
 #-*- coding: utf-8 -*- #  - ,     def I(c) : ''' id-,    ''' return c def C(c) : '''      ''' if c=='"' or c=='\\' or ord(c)<32 or ord(c)>126 : return '\\%03o' % ord(c) # ,  ,      #           , #     : \x24bad -    chr(0x24BAD),    $bad else : return c def decor(F,s) : '''     ''' return ''.join(map(F,s)) #       def compose(F,G) : '''   ''' return lambda c : decor(F,G(c)) #  -  (S,p,r) def make_printer(S, tpl, tag = '<-T->') : '''      ( <-T-> ,   ) ''' p,r = tpl.split(tag) return S,p,r nul_printer = (I,'','') def show_printer(prn, t) : '''       t ''' S,p,r = prn return p + decor(S,t) + r def meta_printer(prn1, prn2) : '''   ''' S1,p1,r1 = prn1 S2,p2,r2 = prn2 S = compose(S1,S2) p = p1 + decor(S1,p2) r = decor(S1,r2) + r1 return S,p,r #  - ,      -  (E, am, b, cm) #  am  cm -  decorator -> string def make_quiner(E, M, tpl, tagX = '<-X->', tagF = '<-F->') : '''       <-X->       x,y,z,  <-F-> ,     F  E -  ,  M      ''' a,b,b_,c = tpl.split(tagX) assert b==b_ am = lambda F : a.replace(tagF, M(F)) if tagF in a else a cm = lambda F : c.replace(tagF, M(F)) if tagF in c else c return E,am,b,cm def show_quiner(qnr, F,x,y,z) : '''         a,Ex,b,Ey,b,Ez,c --  x,Fx,y,Fy,y,Fz,z -- ,     (RUN) ''' E,am,b,cm = qnr a,c = am(F), cm(F) ex,ey,ez = decor(E,x), decor(E,y), decor(E,z) return a + ex + b + ey + b + ez + c def show_quiner_printer(qnr,prn) : '''      p+Sa,SEx,Sb,SEy,Sb,SEz,Sc+r --   x , Fx, y , Fy, y , Fz, z --    ''' E,am,b,cm = qnr S,p,r = prn F = compose(S,E) a,c = am(F), cm(F) x = p + decor(S,a) y = decor(S,b) z = decor(S,c) + r ex,ey,ez = decor(E,x), decor(E,y), decor(E,z) return a + ex + b + ey + b + ez + c ############################################################# #     : c_quine_tpl = '''/* C quine */ #include <stdio.h> const char* f[128] = {<-F->}; const char* xyz[3] = {"<-X->", "<-X->", "<-X->"}; void ps(const char* s) { while(*s) putchar(*s++); } void pm(const char* s) { while(*s) ps(f[*s++]); } int main() { ps(xyz[0]); /* x */ pm(xyz[0]); /* Fx */ ps(xyz[1]); /* y */ pm(xyz[1]); /* Fy */ ps(xyz[1]); /* y */ pm(xyz[2]); /* Fz */ ps(xyz[2]); /* z */ return 0; } ''' def c_quine_M(F) : '''   -     ''' codes = [ '"%s"' % decor(C,decor(F,chr(i))) for i in xrange(128) ] return ', '.join(codes) c_quiner = make_quiner(C, c_quine_M, c_quine_tpl) #    ,           py_quine_tpl = '''#!/usr/bin/python import sys m = [ <-F-> ] xyz = [ "<-X->", "<-X->", "<-X->" ] def ps(s) : sys.stdout.write(s) def pm(s) : for c in s : ps(m[ord(c)]) ps(xyz[0]) pm(xyz[0]) ps(xyz[1]) pm(xyz[1]) ps(xyz[1]) pm(xyz[2]) ps(xyz[2]) ''' py_quiner = make_quiner(C, c_quine_M, py_quine_tpl) #     ################### #     : c_printer_tpl = '''#include <stdio.h> int main() { printf("%s", "<-T->"); return 0; } ''' c_printer = make_printer(C, c_printer_tpl) py_printer_tpl = '''import sys sys.stdout.write("<-T->") ''' py_printer = make_printer(C, py_printer_tpl) #################### # !    c_c_printer = meta_printer(c_printer, c_printer) py_py_printer = meta_printer(py_printer, py_printer) #  1  c_quine = show_quiner_printer(c_quiner, nul_printer) py_quine = show_quiner_printer(py_quiner, nul_printer) #  2  c_c_quine = show_quiner_printer(c_quiner, c_printer) py_py_quine = show_quiner_printer(py_quiner, py_printer) #  2  -  c_py_quine = show_quiner_printer(c_quiner, py_printer) py_c_quine = show_quiner_printer(py_quiner, c_printer) #  3  - -   c_c_c_quine = show_quiner_printer(c_quiner, c_c_printer) py_py_py_quine = show_quiner_printer(py_quiner, py_py_printer) c_py_py_quine = show_quiner_printer(c_quiner, py_py_printer) py_c_c_quine = show_quiner_printer(py_quiner, c_c_printer) sys.stdout.write(py_py_py_quine) # ,  , - ... 

рд╕реНрд░реЛрдд рдФрд░ рдЙрд╕рдХреЗ рдлрд▓ рдмрд╛рд▓реНрдЯреА рдкрд░ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ: bitbucket.org/nickolaym/quines

рдмреЗрд╢рдХ, рдорд╢реАрди рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдорд▓реНрдЯреАрдХреАрдЗрди рдЕрдиреБрдЧреНрд░рд╣ рдореЗрдВ рднрд┐рдиреНрди рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХрд╛ рдЖрдХрд╛рд░ 5438 рдмрд╛рдЗрдЯреНрд╕ рд╣реИ, рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдЯреЗрдмрд▓ рдЗрд╕рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╣реИред

рдЗрд╕реЗ рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП (рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХрддрд╛ рдФрд░ рдорд╢реАрди рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реБрдП) - рдореИрдВ рдЕрдкрдиреЗ рджрдо рдкрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВред

рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдФрд░ рд▓рд┐рдЦреВрдВрдЧрд╛:


4 рд╕рд╛рд▓ рдкрд╣рд▓реЗ RSDN рдкрд░ рдореЗрд░реА рдЪреЗрддрдирд╛ рдХреА рдзрд╛рд░рд╛ рднреА рджреЗрдЦреЗрдВред http://rsdn.ru/forum/etude/3604693

Source: https://habr.com/ru/post/In188852/


All Articles