1 poin oleh GN⁺ 2024-12-02 | 1 komentar | Bagikan ke WhatsApp
  • 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

 
GN⁺ 2024-12-02
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

    • Beberapa tahun terakhir saya mencoba menyelesaikannya dengan Go; setelah day 6 saya selalu kekurangan waktu atau fokus, tetapi untuk penggunaan seperti ini Go cukup bagus
      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
    • Saya penasaran dengan pendekatan menyelesaikan cepat di Rust; kalau ada tautan yang bisa dibagikan, saya ingin melihatnya
    • Akan bagus kalau Discord-nya bisa dibagikan
      Setiap tahun saya mencoba mengoptimalkan kecepatan dengan Zig: https://github.com/ManDeJan/advent-of-code
    • Go itu bukan "Golang", waktu kompilasi-nya lebih baik daripada Rust, dan tidak mencoba memaksa menggabungkan cara-cara penggunaan konkurensi yang tidak cocok satu sama lain
      Justru sebaliknya, ada dilema untuk mencoba menyukai Rust
    • Saya penasaran bagaimana orang menyusun proyek AoC
      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

    • Tahun lalu saya mencobanya dengan C di Amiga 1200 sungguhan, memakai compiler/runtime Matt Dillon bernama DICE
      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
    • Tahun ini saya tetap memakai Common Lisp, tetapi untuk soal hari pertama saya memutuskan mencoba menyelesaikannya dengan semua bahasa yang saya "kenal"
      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
    • Batasan itu terdengar cukup sulit, tetapi semoga berhasil
      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
    • Kalau panggilan RPC saja memungkinkan, apa pun bisa dilakukan bahkan dalam RAM 32KB :-)
    • Secara simetris, menarik juga mempertimbangkan memakai hanya sh dan tool CLI standar yang tidak Turing-complete
      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

    • Kalau belum, ada baiknya ikut leaderboard Swift: https://forums.swift.org/t/advent-of-code-2024
      Membandingkan solusi yang berbeda-beda cukup menarik
    • Saya penasaran apakah parsing dan manipulasi string di Swift tidak cukup menyakitkan
      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
    • Saya penasaran apakah penulisan solusi, kompilasi, dan eksekusi semuanya dilakukan dari Emacs
      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

    • Saya paling tidak suka soal seperti itu
      Masalah sebenarnya adalah mem-parse input ke bentuk yang mudah ditangani, dan begitu parsing selesai, sisanya mudah
    • Setelah beberapa hari, akhirnya pasti memakai regular expression, dan setiap tahun lupa sehingga harus belajar lagi
    • Parser input tidak selalu menjadi makin rumit seiring tanggal berjalan
      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
    • Itu hanya menempelkan cerita menarik pada parsing input
    • Menurut saya scanf dan state machine jauh lebih efektif daripada parser gaya split/explode
  • 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

    • Dengan begitu banyak sponsor dan pengguna AoC++, rasanya sulit melihatnya sebagai passion project kecil yang kesulitan membayar langganan bulanan VPS
      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

    • Saya sedang melanjutkan tradisi menyelesaikan AoC dengan Whitespace [0]
      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
    • Saya sedang mengerjakannya dengan bash, dan ingin melihat sejauh mana bisa berjalan
    • Dua AoC terakhir saya kerjakan dengan F#, meski sebenarnya hanya beberapa hari awal
      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 juga mulai belajar F# dan sedang memakainya untuk AoC tahun ini
      Saya masih di tahap awal perjalanan fungsional, tetapi sejauh ini menurut saya AoC membantu
    • Penasaran seperti apa dukungan Linux-nya :)
  • 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

    • Selama beberapa tahun berturut-turut ini mengambil alih hidup saya, dan dua kali saya baru berhasil menyelesaikannya pada malam Natal
      Sekarang saya sama sekali tidak melihatnya. Keseruan berubah menjadi stres dengan cukup cepat
    • Kedengarannya bijak
      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
    • Seorang teman baru-baru ini membagikan ini, dan sepertinya kamu akan menyukainya
      https://eli.li/december-adventure
    • Saya macet selama empat bulan di puzzle graph cut
      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...