Advent of Code 2024
(adventofcode.com)- Advent of Code, acara puzzle pemrograman bulan Desember, dirancang untuk menurunkan hambatan tingkat kemampuan dan pilihan bahasa, sehingga dapat diikuti untuk berbagai tujuan seperti latihan, pendidikan, dan kompetisi
- Tidak perlu latar belakang ilmu komputer atau perangkat berperforma tinggi; setiap soal memiliki solusi yang selesai dalam maksimal 15 detik di perangkat keras berusia 10 tahun
- Jika buntu saat menyelesaikan soal, persempit masalah secara bertahap dengan urutan: memeriksa contoh, membuat test case sendiri, memvalidasi input, lalu meminta petunjuk dari teman atau subreddit
- FAQ 2024 merangkum kebijakan operasional seperti perubahan durasi acara, penghapusan global leaderboard, aturan private leaderboard, penggunaan AI, serta pembatasan penyalinan dan redistribusi
- Kompetisi kecepatan bersifat opsional; peserta dapat berfokus menyelesaikan puzzle dan belajar dengan cara yang berguna bagi mereka sendiri
Karakter Advent of Code dan syarat partisipasi
- Advent of Code adalah acara berbentuk Advent calendar yang terdiri dari puzzle pemrograman kecil
- Puzzle ditujukan untuk berbagai tingkat kemampuan dan dapat diselesaikan dengan bahasa pemrograman pilihan
- Dapat digunakan untuk persiapan wawancara, pelatihan perusahaan, tugas kuliah, soal latihan, kompetisi kecepatan, dan tantangan antar peserta
- Latar belakang ilmu komputer tidak wajib; sedikit pengetahuan pemrograman dan kemampuan pemecahan masalah sudah cukup untuk berpartisipasi
- Komputer berperforma tinggi juga tidak diperlukan, dan setiap soal memiliki solusi yang selesai dalam maksimal 15 detik di perangkat keras berusia 10 tahun
Prosedur penyelesaian saat buntu
- Jika buntu, pertama-tama verifikasi program dengan contoh yang disertakan dalam puzzle
- Jika hasil contoh tidak cocok, baca kembali deskripsi soal dan periksa bagian yang mungkin disalahpahami atau perilaku program yang berbeda dari perkiraan
- Jika contoh sudah cocok tetapi jawaban akhir salah, buat sendiri test case yang jawabannya dapat diperiksa manual, lalu terapkan ke program
- Pastikan juga seluruh input puzzle telah digunakan tanpa ada yang terlewat
- Jika masih buntu, Anda dapat meminta bantuan teman atau mencoba lagi nanti, dan juga bisa mendapatkan petunjuk di subreddit
Penggunaan situs dan autentikasi
- Jika JavaScript aktif, blok kode dapat dipilih seluruhnya dengan triple click
- Autentikasi menggunakan OAuth untuk memverifikasi identitas melalui layanan eksternal
- Saat login, kredensial hanya diberikan kepada layanan eksternal tersebut, bukan kepada Advent of Code
- Layanan eksternal memberi tahu server Advent of Code bahwa pengguna adalah benar dirinya
- Umumnya tidak ada informasi tambahan yang terungkap selain informasi yang sudah publik
- Advent of Code mengingat ID unik, nama, URL, dan gambar dari layanan autentikasi
- Jika teks di situs sulit dibaca, stylesheet alternatif kontras tinggi dapat digunakan
- Firefox mendukung View → Page Style → High Contrast secara bawaan
Tingkat kesulitan, waktu rilis, dan durasi acara
- Tingkat kesulitan dan topik puzzle berbeda di setiap acara
- Secara umum puzzle menjadi semakin sulit seiring waktu, tetapi tingkat kesulitan yang dirasakan dapat sangat berbeda tergantung kombinasi keterampilan masing-masing orang
- Puzzle dirilis pada tengah malam EST/UTC-5
- Karena itu adalah waktu ketika operator dapat memastikan bahwa soal berjalan stabil tanpa masalah
- Tidak masalah jika tidak bisa ikut tepat tengah malam, dan kompetisi lokal dapat menggunakan private leaderboards
- Jumlah hari acara berubah
- Pengoperasian Advent of Code membutuhkan banyak waktu luang setiap tahun, dan pembuatan puzzle mengambil sebagian besar waktu tersebut
- Setelah mempertahankan jadwal selama 10 tahun, perubahan menjadi perlu
- Puzzle dimulai pada 1 Desember agar nomor tanggal sesuai, dirilis setiap hari, dan berakhir pada pertengahan Desember
Leaderboard dan kompetisi kecepatan
- global leaderboard dihapus
- Ini merupakan salah satu sumber stres terbesar bagi operator, infrastruktur, dan banyak pengguna
- Sebagian peserta menganggap kompetisi terlalu serius, bahkan ada tindakan seperti serangan DDoS
- Banyak pengguna keliru menyimpulkan bahwa mereka programmer yang lebih buruk hanya karena waktu mereka lebih lambat daripada pihak pembanding
- Dimulai sebagai fitur menyenangkan pada 2015, tetapi selama 10 tahun berkembang menjadi masalah yang semakin besar
- Tampilan baca-saja untuk private leaderboard dapat dibagikan
- Fitur atau data ini tidak boleh digunakan untuk membuat global leaderboard baru
- Waktu penyelesaian cepat bersifat opsional
- Untuk menyelesaikan dengan cepat, diperlukan berbagai keterampilan tambahan dan banyak latihan selain menyelesaikan puzzle itu sendiri
- Kode speed-solve sering kali terlihat sangat berbeda dari kode yang akan lolos code review
- Anda boleh memilih pendekatan sesuai tujuan yang berguna bagi diri sendiri dan sepenuhnya mengabaikan kompetisi kecepatan
Penggunaan AI dan aturan private leaderboard
- Jika Anda tergabung dalam private leaderboard, Anda harus memeriksa aturan yang diharapkan kepada operatornya
- Jika aturannya tidak cocok, Anda dapat mencari private leaderboard lain atau membuat sendiri
- Aturan private leaderboard dapat mencakup waktu eksekusi maksimum, bahasa yang diizinkan, kapan puzzle boleh pertama kali dibuka, alat yang boleh digunakan, hingga apakah harus memakai topi lucu saat mengerjakan
- Penggunaan AI tidak disarankan saat menyelesaikan puzzle Advent of Code
- Analogi yang digunakan adalah apakah mengirim teman ke gym bisa membuat diri sendiri menjadi lebih kuat
- Puzzle dirancang agar menarik ketika diselesaikan oleh manusia, dan tidak mempertimbangkan apakah AI dapat menyelesaikannya
- Jika tujuannya adalah berlatih prompt AI, latihan lain yang dirancang untuk tujuan tersebut mungkin lebih sesuai
Ide puzzle, bug, dan kebijakan penyalinan
- Jangan mengirimkan ide puzzle
- Ide tidak diterima karena masalah hukum seperti hak cipta dan attribution
- Untuk menghindari kemungkinan menggunakannya secara tidak sengaja, email yang tampak seperti ide puzzle pun tidak dibaca
- Jika merasa menemukan bug pada puzzle, periksa terlebih dahulu di subreddit
- Setelah satu jam sejak puzzle dirilis, sudah banyak orang yang menyelesaikannya, sehingga kemungkinan bug setelah itu sangat rendah
- Advent of Code dapat digunakan secara gratis, tetapi tidak bebas untuk disalin
- Jangan memasukkan bagian Advent of Code seperti teks puzzle atau input Anda sendiri ke dalam repositori kode
- Saat membuat situs web, jangan membuatnya terlihat seperti Advent of Code atau memberinya nama yang mirip
Pemberitahuan hukum dan ruang lingkup yang diizinkan
- Advent of Code adalah merek dagang terdaftar di Amerika Serikat
- Elemen desain, frasa, gaya, dan konsep Advent of Code adalah milik tunggal Advent of Code, dan tidak boleh disalin atau digunakan tanpa persetujuan tertulis eksplisit
- Pemberitahuan hak cipta adalah 2015-2025 Advent of Code dan semua hak dilindungi
- Puzzle Advent of Code boleh ditautkan atau dirujuk dalam diskusi, kelas, kode sumber, materi cetak, dan sebagainya, termasuk dalam konteks komersial
- Advent of Code tidak mengklaim kepemilikan atau hak cipta atas implementasi solusi pengguna
1 komentar
Opini Hacker News
Karena suka AoC, selama 2–3 tahun terakhir saya menyelesaikannya dengan Rust, dan di Discord kami bermain dengan cara bersama-sama membuat solusi tercepat
Dalam prosesnya saya belajar berbagai trik optimasi performa, algoritma tingkat lanjut, dan SIMD
Kali ini saya sedang mengerjakannya dengan Rust dan Go untuk melihat apakah saya akan menyukai atau setidaknya bisa tahan memakai Go yang dipakai di tempat kerja, atau memastikan hipotesis bahwa saya tidak terlalu suka dan hanya akan memakainya saat benar-benar perlu
Praktis, sedikit urusan setup lingkungan atau pekerjaan sampingan, sebagian besar fitur yang diperlukan seperti membaca/parsing file sudah bawaan, performanya juga bagus dan cukup dekat dengan hardware sehingga jebakan performa tersembunyi lebih sedikit
Saya belum pernah memakai Rust jadi sulit membandingkan, tetapi secara sangat permukaan Rust terasa kurang praktis
AoC tidak terlalu membutuhkan standar produksi seperti keamanan memori, jadi pada soal-soal akhir praktikalitas dan performa tampaknya lebih penting daripada keamanan
Setiap tahun saya mencoba mengoptimalkan kecepatan dengan Zig: https://github.com/ManDeJan/advent-of-code
Justru sebaliknya, ada dilema untuk mencoba menyukai Rust
Saya sempat ingin mencobanya dengan Rust, tetapi belum kebayang apakah harus memisahkan modul per tanggal, atau menjadikan tiap tanggal sebagai file library lalu menghubungkannya ke entry point utama
Kalau ada repositori publik, akan bagus jika dibagikan
Tantangan tahun ini adalah menulisnya dalam C tanpa standard library atau allocator
Harus bisa berjalan di STM32 dengan SRAM 32KB
Dua tahun lalu saya mencobanya dengan assembly, tetapi menyerah setelah berjam-jam membuat standard library untuk assembly lalu beralih ke Rust
Saya tidak terlalu jauh, tetapi tanpa proteksi memori semuanya jadi benar-benar sulit
Tahun ini Amiga saya punya upgrade 060 dengan MMU, jadi mungkin saya bisa mencari cara memanfaatkannya lalu mencoba lagi
C juga termasuk, dan karena tidak ada hash table, itu benar-benar menyiksa
https://git.sr.ht/~q3cpma/aoc2024/tree/master/item/01
Akan sangat berterima kasih kalau kamu mengunggah tautan repositori supaya progresnya bisa dilihat
Tahun lalu saya menyelesaikan semua soal dengan C tanpa library eksternal [1], dan itu sangat menyenangkan
Saya jadi harus mengimplementasikan sendiri hal-hal low-level yang sudah terlupakan, misalnya heap, dan juga menulis routine numerik sendiri; ternyata lebih mudah dari yang saya kira
[1] https://github.com/sebastianotronto/aoc/tree/master/2023
Misalnya grep boleh tetapi awk tidak; sama-sama terbatas, tetapi tanpa bug kerusakan memori yang fatal
Biasanya saya mengerjakan AoC dengan Common Lisp, tetapi tahun ini sedang mencoba Swift
Untuk bahasa mainstream bertipe statis, Swift cukup lumayan untuk manipulasi kecil-kecilan seperti ini
https://github.com/codr7/aoc24/tree/main/swift/Sources/aoc
Tahun ini agak aneh, karena saya sedang menyiapkan event di tempat kerja baru
Alasannya saya pikir ini berguna bagi developer untuk belajar pemecahan masalah nyata, bukan sekadar menyambung-nyambungkan framework
Namun bos baru ternyata orang yang benar-benar tidak bisa diajak bekerja sama, jadi saya harus pergi
Pada akhirnya, seperti biasa, sepertinya yang tersisa hanya saya dan Emacs
Membandingkan solusi yang berbeda-beda cukup menarik
Dulu saya pernah mencoba AoC dengan Swift, tetapi bagian itu membuat saya cukup kehilangan minat
Solusi satu baris fungsional yang kecil memang menyenangkan, tetapi setelah sekitar seminggu beban parsing sepertinya akan terlalu besar
Tahun ini saya ingin mencoba Swift, tetapi membuka Xcode hanya untuk ini terasa agak berlebihan
Datang lagi rupanya, musim 25 hari menulis parser input yang makin lama makin rumit
Masalah sebenarnya adalah mem-parse input ke bentuk yang mudah ditangani, dan begitu parsing selesai, sisanya mudah
Yang makin rumit adalah soalnya sendiri, dan soal sulit sekitar hari ke-22 atau ke-23 pun input-nya biasanya berupa baris integer yang dipisahkan spasi atau grid titik, mirip soal mudah hari 1–3
Tahun ini targetnya mengumpulkan semua bintang hingga total 500 bintang
Artinya menyelesaikan semua tahun dan semua soal
Per minggu lalu, tampaknya ada sekitar 1.024 orang yang punya total 450 bintang
Saya baru mulai sekitar day 6 tahun 2022, tetapi langsung ketagihan, dan karena ada waktu di awal 2023, saya menyelesaikan tahun-tahun sebelumnya satu per satu
Kalau menyiapkan beberapa algoritma, ini tidak terlalu sulit, dan ada juga tema yang berulang tiap tahun
Seru juga mempelajari kembali hal-hal seperti algoritma sungguhan yang biasanya tidak sering disentuh
Terima kasih kepada para sukarelawan dan Eric, dan mulai sekarang saya berniat berdonasi setiap tahun. Ini benar-benar event yang bagus
Saya suka karena ini salah satu highlight di periode ini
Kali ini saya harus mengerjakannya di pesawat yang menyeberangi Pasifik ke arah timur
Ini sudah menjadi tradisi yang menyenangkan, baik secara pribadi maupun bagi teman-teman, rekan kerja, dan orang-orang HN
Sekali lagi saya merasa wastl dan para elf pembantu luar biasa karena membuatnya
Kalau ada yang mendapat manfaat dari sini, sebaiknya mendukungnya kalau memungkinkan
Ini memang passion project, tetapi faktanya tetap ada biaya nyata
Meski begitu adventofcode memang sangat bagus, dan kalau memungkinkan sebaiknya didukung
Hanya saja, melihat skala dukungan yang diterima saat ini, sepertinya pembuatnya cukup baik-baik saja
Tahun ini saya mau mencoba dengan F# dan Gleam, tetapi seperti tiap tahun, tampaknya saya tidak akan punya waktu dan kapasitas mental untuk lebih dari 10–12 hari
Orang-orang yang memakai Python sebaiknya mencoba F# juga
Rasanya bisa cukup dekat dengan scripting, dan punya REPL yang bagus
Pada tahun pertama, itu menjadi motivasi untuk membuat standard library agar tidak terlalu membosankan
Sekarang saya merasa seharusnya sudah menyelesaikan tool yang lebih baik
Saya melakukan debugging dengan wsjq[1], debugger CLI mirip gdb yang ditulis dengan jq, tetapi lambat
[0]: https://github.com/thaliaarchi/ws-challenges
[1]: https://github.com/thaliaarchi/wsjq
Itu tetap menyenangkan bahkan bagi orang yang belum punya pengalaman pemrograman fungsional
Tahun ini saya tidak punya waktu untuk ikut, tetapi kalau ikut, kemungkinan saya akan memilih F# lagi
Saya masih di tahap awal perjalanan fungsional, tetapi sejauh ini menurut saya AoC membantu
Tahun lalu saya macet selama seminggu penuh di Day 12, dan semua waktu terjaga saya habis untuk memikirkan cara menyelesaikannya
Tahun ini saya mau lebih berbaik hati pada diri sendiri, tidak ikut, dan benar-benar menikmati liburan musim dingin
Sekarang saya sama sekali tidak melihatnya. Keseruan berubah menjadi stres dengan cukup cepat
Menetapkan batas dan menikmati waktu istirahat itu penting
Bagi saya, Advent of Code seperti lereng licin
Saat tingkat kesulitan naik, awalnya mudah, lalu menjadi sulit dengan rasa puas, tetapi tanpa sadar sudah menyita terlalu banyak waktu
Pada titik itu, bahayanya adalah kita sudah telanjur terlibat secara emosional
https://eli.li/december-adventure
Saya sampai harus menulis engine graf berbasis gaya untuk menemukan tiga edge terpanjang yang harus dipotong
Setelah berhasil menyelesaikannya dan melihat solusi orang lain, ternyata mereka memakai theorem prover dari Meta dan selesai dalam sekitar 10 baris
Bagi saya itu terlihat seperti trik curang besar
Saya suka AoC
Tidak perlu peduli apakah bot AI yang menyelesaikannya, atau apakah orang lain bangun lebih pagi; cukup kerjakan untuk kesenangan sendiri
Entah karena suka tantangannya, atau ingin mencoba bahasa baru
Saya suka menyelesaikannya dengan gaya fungsional Kotlin sebisa mungkin, supaya berbeda dari pekerjaan
Solusi hari ini juga sudah saya unggah. Karena memakai utility, ini bukan Kotlin murni, tetapi mengumpulkan fungsi-fungsi keren menjadi semacam library juga bagian dari keseruannya
https://github.com/Matsemann/algorithm-problems/blob/main/ad...
Beberapa tahun terakhir saya memakai Python NumPy, lalu tahun ini memakai Kotlin, dan pada soal hari pertama, fungsi transpose adalah yang paling saya rindukan
Kode saya ada di sini: https://github.com/charelF/AdventOfCode/blob/main/kt/src/y20...