draft
noindex
pernyataan if
cek angka genap
time-memory tradeoff
programming
andreas karlsson
assembly language
machine code

post t:8:1:0:e:r:m:m:v:t:8:z

kkartu tarot orang pintar
post t:8:1:0:e:r:m:m:v:t:8:z

(4) Miliar Pernyataan IF: Cara Gila Cek Angka Genap yang Bikin Geleng-Geleng Kepala

Pernah kebayang nggak sih, buat ngecek sebuah angka itu genap atau ganjil, kita harus nulis ribuan, bahkan miliaran, pernyataan if? Kedengarannya gila, ya? Tapi ternyata, ide "sesat" ini beneran dieksplorasi oleh seorang programmer, Andreas J. H. Karlsson. Dan yang lebih bikin takjub, cara yang kelihatan "nggak efisien" ini malah menghasilkan sesuatu yang menarik dan bahkan performatif!

Awal Mula Ide Nyeleneh

Semua berawal dari sebuah video TikTok. Sang kreator konten membagikan sebuah trik sederhana: daripada menggunakan operator modulus (%) yang umum dipakai untuk mengecek genap/ganjil, dia malah menggunakan serangkaian pernyataan if. Konsepnya simpel: jika angka sama dengan 0, maka genap. Jika sama dengan 1, maka ganjil. Jika sama dengan 2, maka genap, dan seterusnya, sampai angka yang diinginkan. Tentu saja, metode ini terlihat sangat boros kode dan membosankan jika dilakukan secara manual. Tapi, Andreas melihat ada potensi di balik keanehan ini.

Eksplorasi "Time-Memory Tradeoff"

Motivasi utama Andreas adalah untuk membuktikan prinsip "time-memory tradeoff" dalam dunia pemrograman. Prinsip ini pada dasarnya mengatakan bahwa kita bisa mengorbankan penggunaan memori yang lebih besar demi mendapatkan kecepatan eksekusi yang lebih cepat, atau sebaliknya. Dalam kasus ini, Andreas mencoba melihat apakah pendekatan yang "brute-force" dalam hal penulisan kode (memakan banyak memori untuk menyimpan semua pernyataan if) bisa menghasilkan performa yang ngebut.

Dari C Hingga Assembly, Hingga 4 Miliar Pernyataan IF

Eksplorasi ini tidak langsung menghasilkan angka miliaran. Awalnya, Andreas mencoba implementasi sederhana menggunakan bahasa C. Dia membuat program dengan sejumlah kecil pernyataan if. Namun, untuk mencapai angka yang lebih besar, dia beralih ke Python untuk menghasilkan kode secara otomatis.

Tahap selanjutnya adalah menciptakan kode untuk integer 8-bit, lalu 16-bit, dan puncaknya adalah 32-bit. Di sinilah tantangan teknis mulai muncul. Ukuran file dan batasan kompilator menjadi kendala. Untuk membuat program yang mampu menangani hingga 32-bit integer (yang berarti bisa sampai 4 miliar kemungkinan angka genap dan ganjil!), Andreas harus berkreasi lebih jauh.

Dia akhirnya menggunakan x86-64 assembly language. Bukan sembarang assembly, tapi assembly yang dibantu dihasilkan oleh ChatGPT! Kode assembly ini kemudian dikompilasi menjadi machine code, dan yang paling keren, di-map langsung ke memori untuk dieksekusi. Ini adalah cara yang sangat "low-level" dan memaksimalkan kontrol atas eksekusi program.

Hasil yang Mengejutkan

Meskipun terdengar seperti metode yang tidak masuk akal, pendekatan ini, dengan segala trik dan optimasi yang dilakukan, berhasil menunjukkan bahwa sebuah ide yang terlihat absurd secara konvensional bisa direalisasikan secara teknis. Lebih dari itu, performanya pun bisa jadi mengejutkan, mengalahkan cara-cara konvensional yang mungkin kurang dioptimalkan.

Kisah ini adalah pengingat bahwa dalam dunia programming, tidak ada batasan untuk kreativitas. Ide yang paling aneh sekalipun bisa menjadi bahan eksplorasi yang menarik, dan dengan pemahaman mendalam tentang bagaimana komputer bekerja, bahkan pendekatan yang "tidak efisien" pun bisa diubah menjadi solusi yang performatif. Ini adalah pembuktian nyata akan fleksibilitas pemrograman dan kekuatan "time-memory tradeoff" yang seringkali terabaikan. Jadi, jangan pernah takut untuk berpikir di luar kebiasaan, siapa tahu ide gila Anda bisa jadi terobosan!

Diskusi

Login dulu buat ikutan diskusi.