Barnaamijka Quine ama Quine waa barnaamij soo saara koodka isha u gaar ah marka la fuliyo. Quine waxaa laga yaabaa inaysan "ka soo bixin dibadda lafteeda" tusaale ahaan, daabacaadda waxa ku jira feylka uu ku jiro ama iyadoo la isticmaalayo awoodo hordhac ah si ay u daabacdo wakiilkeeda. Taa beddelkeeda, waa inay xisaabisaa koodka isha u gaar ah.
Habka caadiga ah ee loo abuuro barnaamijka noocan oo kale ah wuxuu u dhacaa laba tallaabo:
- Ku bilow doorsoomayaasha xargaha oo leh meeleeyaha isdhexgalka.
- Daabac xadhigga oo isku xidh laftiisa .
Khiyaamadu waa in si sax ah loo helo xadhigga. Sida tan loo sameeyo way ku kala duwan tahay luqadda luqadda waxayna ku xiran tahay sida doorsoomiyaha loogu dhawaaqo, baahida loo qabo semicolons iyo khadadka cusub, calaamadaha xigashada ee loo baahan yahay, iwm. Isticmaalka calaamadaha xigashada waa mid xiiso leh; Waa in la helaa hab lagu muujiyo in calaamadda oraahda la daabaco iyada oo aan dhab ahaan la isticmaalin calaamadda xigashada.
Bash
Si la mid ah waxyaabaha ugu badan ee Bash, barnaamijkani waxa uu isticmaalaa quursi xiiso leh. In kasta oo hal-sheeggu ay yihiin xigasho xooggan oo aan waxba balaadhin, haddana la fasiray printf
jilayaasha baxsadka octal sida jilayaasha leh barta koodka ee la cayimay:
s='s=%s;printf "$s" "$s"';printf "$s" "$s"
Python
Python dhexdeeda, qaabka tilmaamuhu wuu soo noqonayaa %r
si toos ah xigashooyin kali ah. Way fududahay haddii koodku ku dhammaado xarfo khad cusub:
s='s=%r;print(s%%s)';print(s%s)
Haddii aad rabto koodka bilaa xariiqda, waa inaad qortaa kuwan soo socda:
s='s=%r;print(s%%s,sep="")';print(s%s,sep="")
JavaScript
Xirmooyinka JavaScript ee soo socda ayaa hoos yimaada node.js. aad isticmaasho console.log
, kaas oo had iyo jeer ku dhejiya khad cusub, sidaas darteed khad cusub ayaa loo baahan yahay dhamaadka qoraal kasta:
s="s=%j;console.log(s,s)";console.log(s,s)
Barnaamijkan soo socda ayaa sidoo kale xiiso leh: ma daabacdo matalaadiisa oo dhan, laakiin waxay ku tiirsan tahay xaqiiqda ah in hawluhu leeyihiin matalaad gaar ah.:
(function a(){console.log('('+a+')()')})()
Tusaalaha xiga wuxuu ku dhow yahay khiyaamo sababtoo ah eval
loo isticmaalo:
code='var q=unescape("%27");console.log("code="+q+code+q+";eval(code)")';eval(code)
Miridhku
Daxalku waxa uu bixiyaa hab lagu lifaaqo doodda xigashooyinka ee daabacaadda qaabaysan. Si kastaba ha ahaatee, macro-kani wuxuu u baahan yahay doodda ugu horreysa ee makro-daabcadu inay noqoto xarggo sax ah! Sidaa darteed waxaa fiican in la isticmaalo aqoonsiga doodda booska:
fn main(){print!("fn main(){{print!({0:?},{0:?})}}","fn main(){{print!({0:?},{0:?})}}")}
PHP
Barnaamijkan PHP wuxuu u shaqeeyaa isagoo ku kaydinaya koodhka isha ee xadhig ka dibna isticmaalaya xadhigga printf
wax soo saarka. The 39
waxay u taagan tahay dabeecadda ASCII '
, in si sax ah loo maareeyo xigashooyinka ku jira xadhigga:
<?php
$code = '<?php
$code = %c%s%c;
printf($code, 39, $code, 39);
';
printf($code, 39, $code, 39);
HQ9+
Ugu dambeyntii waa HQ9+, oo uu sameeyay Cliff Biffle:
Q