3 poin oleh GN⁺ 2023-12-24 | 1 komentar | Bagikan ke WhatsApp

Analisis kode xmas.c

  • Kode C bernama xmas.c yang dibuat pada tahun 1988 memenangkan International Obfuscated C Code Contest.
  • Ukuran kode ini lebih kecil daripada hasil keluarannya, sehingga menunjukkan arah baru bagi standar kompresi teks.
  • Saat dikompilasi dan dijalankan, kode ini bekerja tanpa parameter dan, yang menarik, terlihat seperti seseorang menekan tuts mesin tik secara acak.

Keluaran kode

  • Saat kode dijalankan, lirik lagu "The Twelve Days of Christmas" akan dicetak.
  • Isi keluarannya adalah lirik yang mencantumkan hadiah dari hari pertama hingga hari kedua belas Natal.

Analisis

  • Untuk memahami kode ini, kita perlu menulis ulangnya ke bentuk yang lebih mudah dibaca.
  • Dalam proses penulisan ulang, terungkap cara mendekripsi sandi substitusi menggunakan string tertentu.
  • Variabel t memainkan peran penting dalam mengendalikan arah rekursi.
  • Kode ini mendekripsi sandi substitusi melalui rekursi dan mencetak lirik lagu Natal.

Penyederhanaan

  • Setelah program dipahami, beberapa loop dan fungsi pustaka string C dapat digunakan untuk menyederhanakan kode.
  • Pada akhirnya, setelah disederhanakan, program ini dapat diperkecil menjadi sekadar mencetak lirik.

Pendapat GN⁺

  • Puncak kreativitas: Kode xmas.c adalah contoh luar biasa dari penulisan kode obfuscated dengan menggunakan sandi substitusi dan rekursi. Ini menunjukkan bagaimana kreativitas dapat diekspresikan dalam pemrograman.
  • Nilai edukatif: Proses menganalisis dan memahami kode ini bisa menjadi latihan yang baik bagi software engineer pemula untuk meningkatkan keterampilan pemrograman.
  • Seru dan menarik: Kode ini memberi kesempatan untuk menemukan sisi menyenangkan dari pemrograman dan merasakan kegembiraan dalam memecahkan masalah yang kompleks.

1 komentar

 
GN⁺ 2023-12-24
Komentar Hacker News
  • Ada contoh serupa di dunia TeX, yaitu xii.tex:

    • Jika menaruh kode yang tampak rumit di dalam dokumen TeX lalu menjalankan pdftex, hasilnya bisa berbeda dari yang diperkirakan. Ini bisa dilihat di shreevatsa.net.
  • Kode ini mengingatkan pada kompleksitas Kolmogorov:

    • Melihat kode yang sulit dipahami menghasilkan keluaran yang diinginkan memicu rasa penasaran apakah ada program yang lebih pendek tetapi menghasilkan keluaran yang sama, dan bagaimana cara menemukannya.
  • Saya menerima kode ini saat pertama kali diterbitkan, tetapi nama filenya berbeda:

    • Disimpan dengan nama "carol.c", dan ketika dicoba dikompilasi serta dijalankan di sistem modern, compiler mengeluarkan pesan peringatan.
  • IOCCC (International Obfuscated C Code Contest) masih sangat aktif bahkan pada 2023:

    • Penjelasan tentang IOCCC sangat bagus, dan bisa dilihat di www.ioccc.org.
  • Jika peringatannya dimatikan, ini juga bekerja di repositori kode terbaru (trunk):

  • Ada juga tugas serupa di Rosetta Code:

    • Ada contoh program yang secara berulang menghasilkan lagu yang makin panjang berjudul "Old Lady Swallowed a Fly". Bisa dilihat di rosettacode.org.
  • Saya punya kenangan baik ketika profesor menampilkan potongan kode ini di awal kuliah pada semester terakhir saya di universitas:

    • Mengenang pengalaman pertama melihat kode ini dalam kuliah profesor tersebut pada 2022.
  • Saat kuliah, kode ini ada di materi belajar cetak tentang bahasa C, dan saya ingat pernah mengetiknya sendiri sekali:

    • Saat belajar bahasa C, saya benar-benar memasukkan kode ini sendiri sehingga menjadi pengalaman yang membekas.
  • Kode ini menggunakan versi bahasa C yang sangat lama:

    • Ada pendapat bahwa signature fungsi main menggunakan gaya K&R lama, jadi sekarang mungkin tidak akan bisa dikompilasi.
  • Salah satu hal menarik adalah hubungan antara Larry Wall yang dua kali memenangkan IOCCC dan fakta bahwa dia merancang Perl:

    • Riwayat penghargaan perancang Perl di IOCCC memberi kesan seolah itu menjelaskan ciri khas bahasa Perl.