[II3062] Quine

:quine: /kwi:n/ /n./ [from the name of the logician Willard van Orman Quine, via Douglas Hofstadter] A program that generates a copy of its own source text as its complete output.

Tugas kali ini adalah membuat sebuah quine, bahasa pemrograman bebas. Berhubung sejak masuk kuliah saya memang paling banyak berkutat dengan bahasa C (mulai dari strukdat, OS, jarkom, progsis, hingga KP dan TA), saya pun berkelana ke dunia quine dalam bahasa C. Inilah sebuah contoh quine dalam bahasa C:

main(){char*a="main(){char*a=%c%s%c;int b='%c';printf(a,b,a,b,b);}";int b='"';printf(a,b,a,b,b);}

Untuk memudahkan penjelasan, kode di atas akan dipisah per instruksi dan diberi pewarnaan:

main() {
 char *a = "main(){char*a=%c%s%c;int b='%c';printf(a,b,a,b,b);}";
 int b = '"';
 printf(a, b, a, b, b);
}
   -- 

Langsung saja penjelasan dimulai dari instruksi terakhir, yaitu printf(a,b,a,b,b);. Perintah ini mencetak argumen kedua dan seterusnya menggunakan format yang didapat dari argumen pertama yang berupa sebuah char*. Pada contoh ini, format yang digunakan berasal dari char*a, yaitu "main(){char*a=%c%s%c;int b='%c';printf(a,b,a,b,b);}". Dengan printf(), substring-substring %c selanjutnya digantikan oleh argumen yang bersesuaian dalam format karakter, sedangkan %s dengan format string. Dengan demikian, setiap %c dalam char*a akan digantikan oleh karakter '"' sebagai isi dari variabel int b, dan %s akan digantikan oleh isi dari char*aitu sendiri. Maka output program di atas adalah:

main(){char*a="main(){char*a=%c%s%c;int b='%c';printf(a,b,a,b,b);}";int b='"';printf(a,b,a,b,b);}

yang sama persis dengan kode awal. Dengan memanfaatkan nomor ASCII dari karakter doublequote ('"'), yaitu 34, quine di atas dapat diringkas menjadi:

main(){char*a="main(){char*a=%c%s%c;printf(a,34,a,34);}";printf(a,34,a,34);}

Iklan

6 thoughts on “[II3062] Quine

  1. Ping balik: This is INTERESTING. http://rsatrioadi.w… « Crypto Code

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s