Tugas 5 Kuliah KI – Self Replicating Code

Tugas ini berisi tentang bagaimana membuat program yang akan memberitahukan isi source codenya sendiri secara lengkap. Program semacam ini biasa disebut juga quine. Informasi tentang quine bisa ditemui pada halaman wikipedia berikut, http://en.wikipedia.org/wiki/Quine_(computing).

Di sini, penulis akan mencoba mengaplikasikan quine dengan kode pembatas “Dor”. Pertama, duplikat program ditulis pada array karakter seperti biasa. Lalu, pada bagian yang akan diisi oleh dirinya sendiri, kita bisa memberikan kode pembatas.

void replicate(const char *s) {
int i;
for (i=0; s[i]; ++i) {
if (s[i] == ‘\n’)
printf(“\\n”);
else if (s[i] == ‘\t’)
printf(“\\t”);
else
printf(“%c”,s[i]);
}
}

int main() {
const char source[] = “void replicate(const char *s) {\n\tint i;\n\tfor (i=0; s[i]; ++i) {\n\t\tif (s[i] == ‘\n’)\n\t\t\tprintf(\”\\n\”);\n\t\telse if (s[i] == ‘\t’)\n\t\t\tprintf(\”\\t\”);\n\t\telse\n\t\t\tprintf(\”%c\”,s[i]);\n\t}\n}\n\nint main() {\n\tconst char source[] = \”Dor\”;\n\tint i;\n\tfor (i=0; source[i]; ++i) {\n\t\tif (source[i]==’D’ && source[i+1]==’o’ && source[i+2]==’r’)\n\t\t\treplicate(source);\n\t\telse\n\t\t\tprintf(\”%c\”,source[i]);\n\t}\n}\n”;
int i;
for (i=0; source[i]; ++i) {
if (source[i]==’D’ && source[i+1]==’o’ && source[i+2]==’r’)
replicate(source);
else
printf(“%c”,source[i]);
}
}

Quine Result

Quine Result

Secara garis besar, kita cukup membuat program yang akan menuliskan seluruh isi karakter array berisi script program. Kemudian jika pembacaan isi array ditemukan kode pembatas, dalam program ini “Dor”, maka program akan menulis ulang seluruh isi array karakter apa adanya tanpa perlu mengkhawatirkan adanya kode pembatas “Dor” lagi.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s