Advent of Code 2024
(adventofcode.com)- दिसंबर का programming puzzle event Advent of Code इस तरह डिज़ाइन किया गया है कि skill और language choice की बाधाएँ कम हों, ताकि लोग practice, education, competition जैसी अलग-अलग वजहों से इसमें भाग ले सकें
- computer science background या high-performance hardware होना ज़रूरी नहीं है, और हर problem का ऐसा solution मौजूद है जो 10 साल पुराने hardware पर अधिकतम 15 सेकंड में पूरा हो जाता है
- अगर solution अटक जाए, तो example जाँचने, खुद के बनाए test cases, input validation, और फिर दोस्तों या subreddit hints की मदद से समस्या को सीमित किया जा सकता है
- 2024 FAQ में event duration में बदलाव, global leaderboard हटाना, private leaderboard नियम, AI का उपयोग, और copying·redistribution restrictions जैसी operational policies को समेटा गया है
- speed competition वैकल्पिक है, और प्रतिभागी puzzles हल करने और सीखने पर अपने लिए उपयोगी तरीके से ध्यान केंद्रित कर सकते हैं
Advent of Code की प्रकृति और भागीदारी की शर्तें
- Advent of Code Advent calendar फ़ॉर्मेट का एक event है, जिसमें छोटे programming puzzles होते हैं
- puzzles अलग-अलग skill levels के लिए होते हैं, और इन्हें अपनी पसंद की programming language में हल किया जा सकता है
- इसका उपयोग interview preparation, company training, university assignments, practice problems, speed competition, और प्रतिभागियों के बीच challenges के लिए किया जाता है
- computer science background अनिवार्य नहीं है; थोड़ी programming knowledge और problem-solving ability के साथ भी इसमें भाग लिया जा सकता है
- high-performance computer की भी ज़रूरत नहीं है, और हर problem का ऐसा solution है जो 10 साल पुराने hardware पर अधिकतम 15 सेकंड में पूरा हो जाता है
अटकने पर हल करने की प्रक्रिया
- अगर solution अटक जाए, तो पहले puzzle में दिए गए examples से program को verify करना चाहिए
- अगर example result सही नहीं आता, तो problem description दोबारा पढ़ें और देखें कि कहाँ गलतफहमी हुई या program अपेक्षा से अलग कैसे काम कर रहा है
- अगर examples सही हैं लेकिन answer गलत है, तो ऐसे test cases खुद बनाकर program पर लागू करें जिनका answer हाथ से verify किया जा सके
- यह भी जाँचना चाहिए कि पूरा puzzle input बिना किसी चूक के इस्तेमाल हुआ है या नहीं
- अगर फिर भी बात न बने, तो दोस्तों से मदद माँग सकते हैं, बाद में फिर से कोशिश कर सकते हैं, या subreddit से hints ले सकते हैं
साइट का उपयोग और authentication
- code blocks में, अगर JavaScript enabled है, तो triple-click करके पूरा block select किया जा सकता है
- authentication के लिए OAuth का उपयोग करके external services के माध्यम से पहचान verify की जाती है
- login करते समय credentials Advent of Code को नहीं, केवल उस external service को दिए जाते हैं
- external service Advent of Code server को बताती है कि user वही व्यक्ति है
- आम तौर पर पहले से public information के अलावा कोई अतिरिक्त जानकारी उजागर नहीं होती
- Advent of Code authentication service का unique ID, name, URL, और image याद रखता है
- अगर साइट का text पढ़ना मुश्किल लगे, तो high-contrast alternate stylesheet का उपयोग किया जा सकता है
- Firefox में View → Page Style → High Contrast का built-in support है
कठिनाई, रिलीज़ समय, और event की अवधि
- puzzles की difficulty और themes हर event में अलग होती हैं
- आम तौर पर समय के साथ puzzles कठिन होते जाते हैं, लेकिन किसी व्यक्ति के skill combination के अनुसार महसूस होने वाली कठिनाई बहुत अलग हो सकती है
- puzzles EST/UTC-5 मध्यरात्रि में जारी किए जाते हैं
- क्योंकि वह समय organizer के लिए यह सुनिश्चित करने के लिए स्थिर होता है कि सब कुछ बिना समस्या के चल रहा है
- अगर आप मध्यरात्रि में भाग नहीं ले सकते तो भी कोई समस्या नहीं; स्थानीय प्रतिस्पर्धा के लिए private leaderboards का उपयोग किया जा सकता है
- event के दिनों की संख्या बदली गई है
- Advent of Code चलाने में हर साल बहुत सारा free time लगता है, और उसका अधिकांश हिस्सा puzzles बनाने में जाता है
- 10 साल तक schedule बनाए रखने के बाद बदलाव की ज़रूरत पड़ी
- puzzles तारीख़ के नंबर से मेल खाने के लिए 1 दिसंबर से शुरू होते हैं, रोज़ाना जारी होते हैं, और दिसंबर के मध्य में समाप्त हो जाते हैं
leaderboard और speed competition
- global leaderboard हटा दिया गया है
- यह organizer, infrastructure, और कई users के लिए सबसे बड़े stress factors में से एक था
- कुछ प्रतिभागी competition को ज़रूरत से ज़्यादा गंभीरता से लेने लगे थे, और DDoS attacks जैसी हरकतें भी हुईं
- कई users ने केवल इसलिए गलत निष्कर्ष निकाला कि उनका समय तुलना के अन्य लोगों से धीमा था, इसलिए वे खुद को कमज़ोर programmer समझने लगे
- यह 2015 में एक मज़ेदार feature के रूप में शुरू हुआ था, लेकिन 10 साल में यह लगातार बढ़ती समस्या बन गया
- private leaderboard का read-only view share किया जा सकता है
- इस feature या data का उपयोग करके नया global leaderboard नहीं बनाना चाहिए
- तेज़ solving time वैकल्पिक है
- जल्दी हल करने के लिए puzzle-solving के अलावा कई अतिरिक्त skills और बहुत practice की ज़रूरत होती है
- speed-solve code अक्सर उस code से बिल्कुल अलग दिखता है जो code review pass कर सके
- अपने लिए उपयोगी goals के अनुसार तरीका चुनना और speed competition को पूरी तरह नज़रअंदाज़ करना भी ठीक है
AI का उपयोग और private leaderboard के नियम
- अगर आप किसी private leaderboard का हिस्सा हैं, तो organizer से अपेक्षित नियम ज़रूर जाँचें
- अगर नियम आपको उपयुक्त न लगें, तो किसी दूसरे private leaderboard को खोज सकते हैं या खुद बना सकते हैं
- private leaderboard के नियमों में maximum execution time, allowed languages, puzzle पहली बार कब खोला जा सकता है, कौन-से tools इस्तेमाल किए जा सकते हैं, यहाँ तक कि काम करते समय मज़ाकिया टोपी पहननी है या नहीं, जैसी बातें शामिल हो सकती हैं
- Advent of Code puzzles हल करते समय AI का उपयोग recommended नहीं है
- इसके लिए यह उपमा दी गई है कि क्या दोस्त को gym भेजने से आप खुद मज़बूत हो जाएँगे
- puzzles इस तरह डिज़ाइन किए जाते हैं कि इंसानों के लिए हल करना रोचक हो; AI उन्हें हल कर सकता है या नहीं, यह ध्यान में नहीं रखा जाता
- अगर उद्देश्य AI prompting practice है, तो उस उद्देश्य के लिए डिज़ाइन की गई दूसरी exercises ज़्यादा उपयुक्त हो सकती हैं
puzzle ideas, bugs, और copying policy
- puzzle ideas नहीं भेजने चाहिए
- copyright और attribution जैसे कानूनी मुद्दों के कारण ideas स्वीकार नहीं किए जाते
- गलती से किसी हिस्से का उपयोग हो जाने की संभावना से बचने के लिए puzzle idea जैसे दिखने वाले emails भी नहीं पढ़े जाते
- अगर आपको लगे कि आपने puzzle bug खोज लिया है, तो पहले subreddit पर जाँच करनी चाहिए
- puzzle जारी होने के एक घंटे बाद तक बहुत से लोग उसे हल कर चुके होते हैं, इसलिए उसके बाद bug होने की संभावना बहुत कम होती है
- Advent of Code का उपयोग मुफ़्त है, लेकिन उसकी copying स्वतंत्र नहीं है
- अपने code repository में puzzle text या अपने input जैसे Advent of Code के हिस्से शामिल नहीं करने चाहिए
- website बनाते समय उसे Advent of Code जैसा नहीं दिखाना चाहिए और न ही वैसा मिलता-जुलता नाम देना चाहिए
कानूनी सूचना और अनुमत दायरा
- Advent of Code अमेरिका में registered trademark है
- Advent of Code के design elements, wording, style, और concept उसकी एकमात्र संपत्ति हैं, और स्पष्ट लिखित सहमति के बिना उन्हें reproduce या use नहीं किया जा सकता
- copyright notice 2015-2025 Advent of Code है और सभी अधिकार सुरक्षित हैं
- discussions, classes, source code, print materials आदि में Advent of Code puzzles को link या refer किया जा सकता है, और यह commercial context में भी संभव है
- Advent of Code users के solution implementations पर ownership या copyright claim नहीं करता
1 टिप्पणियां
Hacker News की राय
AoC पसंद है, इसलिए पिछले 2–3 साल Rust में हल किया, और Discord पर सब मिलकर सबसे तेज़ solution बनाने जैसा खेलते रहे
उस प्रक्रिया में तरह-तरह की performance optimization tips, advanced algorithms और SIMD सीखा
इस बार Rust और Go में हल कर रहा हूँ, यह देखने के लिए कि क्या काम पर इस्तेमाल होने वाले Go को पसंद कर पाऊँगा या झेल पाऊँगा, या फिर यह hypothesis पक्का करूँगा कि यह खास नहीं है और इसे केवल बहुत ज़रूरी होने पर ही इस्तेमाल करूँगा
यह practical है, environment setup या side work कम है, file पढ़ने/parsing जैसी ज़रूरी चीज़ें ज़्यादातर built-in हैं, performance भी अच्छी है और hardware के काफ़ी करीब है, इसलिए छिपे हुए performance traps कम हैं
Rust कभी इस्तेमाल नहीं किया, इसलिए तुलना करना मुश्किल है, लेकिन बहुत सतही तौर पर देखें तो यह कम practical लगता है
AoC में memory safety जैसे production standards की बहुत ज़रूरत नहीं होती, इसलिए बाद के problems में safety से ज़्यादा practicality और performance अहम लगते हैं
हर साल Zig में speed optimization करने की कोशिश करता हूँ: https://github.com/ManDeJan/advent-of-code
बल्कि उल्टा, मेरे सामने Rust को पसंद करने की कोशिश करने वाली दुविधा है
Rust में करने की कोशिश की थी, लेकिन समझ नहीं आया कि तारीख़ के हिसाब से modules बाँटने चाहिए, या हर date को library file की तरह रखकर main entry point से connect करना चाहिए
अगर कोई public repository हो तो share कर दें
इस साल की challenge है standard library या allocator के बिना C में लिखना
इसे 32KB SRAM वाले STM32 पर चलने लायक होना चाहिए
2 साल पहले assembly में करके देखा था, लेकिन assembly के लिए standard library बनाने में घंटों लगाने के बाद हार मान ली और Rust पर switch कर गया
बहुत आगे नहीं बढ़ पाया, लेकिन memory protection न हो तो चीज़ें सचमुच मुश्किल हो जाती हैं
इस साल Amiga में MMU वाला 060 upgrade है, तो शायद यह समझकर कि उसका कैसे उपयोग करूँ, फिर से कोशिश कर सकता हूँ
C भी शामिल था, लेकिन hash table न होने से सचमुच दर्दनाक रहा
https://git.sr.ht/~q3cpma/aoc2024/tree/master/item/01
अगर progress देखने के लिए repository link डाल दें तो अच्छा होगा
पिछले साल external libraries के बिना C में सभी problems हल किए थे [1], और बहुत मज़ा आया
इसने भूली हुई low-level चीज़ें, जैसे heap, खुद implement कराईं, और numeric routines भी खुद लिखने पड़े, जो उम्मीद से आसान निकले
[1] https://github.com/sebastianotronto/aoc/tree/master/2023
grep चल सकता है, awk नहीं—कुछ इसी तरह; वैसा ही सीमित, लेकिन खतरनाक memory corruption bugs नहीं
आम तौर पर AoC Common Lisp में करता हूँ, लेकिन इस साल Swift आज़मा रहा हूँ
statically typed mainstream language के हिसाब से यह ऐसी छोटी-मोटी manipulations के लिए काफ़ी ठीक है
https://github.com/codr7/aoc24/tree/main/swift/Sources/aoc
यह साल थोड़ा अजीब है; मैं अपनी नई job में event तैयार कर रहा था
क्योंकि मुझे लगा कि यह developers के लिए frameworks जोड़ने से ज़्यादा, असली problem solving सीखने में उपयोगी है
लेकिन नया boss ऐसा निकला जिसके साथ बिल्कुल काम नहीं किया जा सकता, इसलिए मुझे छोड़ना पड़ा
अंत में हमेशा की तरह शायद बस मैं और Emacs ही रहेंगे
अलग-अलग solutions की तुलना करना काफ़ी दिलचस्प है
पहले Swift में AoC करने की कोशिश की थी, लेकिन इसी हिस्से की वजह से काफी ठंडा पड़ गया
छोटी functional one-liners अच्छी थीं, लेकिन करीब एक हफ्ते बाद parsing burden बहुत ज़्यादा हो जाएगा ऐसा लगता है
इस साल Swift आज़माना चाहता था, लेकिन इसके लिए Xcode खोलना थोड़ा ज़्यादा लगता है
फिर लौट आया, 25 दिनों तक धीरे-धीरे complex होते input parsers लिखने का season
असली problem input को handle करने लायक form में parse करने में होती है, और एक बार parsing हो जाए तो आसान हो जाता है
complex होती है problem खुद, और day 22 या 23 के आसपास की कठिन problem में भी input आम तौर पर whitespace से अलग की गई integers की lines या dots की grid जैसा होता है, यानी day 1–3 की आसान problems जैसा
इस साल लक्ष्य है सभी स्टार इकट्ठा करके कुल 500 स्टार पूरे करना
यानी सभी सालों के सभी problems खत्म करना
पिछले हफ्ते तक करीब 1024 लोग ऐसे थे जिनके पास कुल 450 स्टार थे
मैंने 2022 के day 6 के आसपास ही शुरू किया था, लेकिन इसमें डूब गया, और 2023 की शुरुआत में समय मिला तो पिछले सालों के problems लगातार हल किए
कुछ algorithms तैयार रखो तो यह बहुत मुश्किल नहीं होता, और हर साल कुछ topics दोहराए भी जाते हैं
आम तौर पर जिन असली algorithms को अक्सर नहीं छूते, उन्हें फिर से सीखने का मज़ा है
volunteers और Eric का धन्यवाद, और अब हर साल donate करने का सोच रहा हूं। सच में बहुत अच्छा event है
यह इस समय के highlights में से एक है, इसलिए अच्छा लगता है
इस बार इसे प्रशांत महासागर को पूर्व दिशा में पार करती flight में हल करना पड़ा
मेरे लिए भी, दोस्तों·सहकर्मियों·HN के लोगों के लिए भी यह एक मज़ेदार tradition बन गया है
wastl और helper elves ने इसे बनाया, यह फिर से कमाल लगता है
जिन्हें इससे value मिलती है, वे अगर संभव हो तो support करें
यह passion project है, लेकिन असल cost लगती है, यह भी सच है
फिर भी adventofcode सच में शानदार है, और अगर संभव हो तो support करना अच्छा है
हालांकि अभी मिल रहे support के पैमाने को देखते हुए लगता है creator काफी ठीक-ठाक चल रहे होंगे
इस साल F# और Gleam से करने की कोशिश करूंगा, लेकिन हर साल की तरह शायद 10–12 दिनों से ज़्यादा का समय और दिमाग नहीं होगा
जो लोग Python इस्तेमाल करते हैं, उन्हें F# भी एक बार आज़माना चाहिए
यह scripting के काफी करीब महसूस हो सकता है, और इसमें शानदार REPL भी है
पहले साल इसे बहुत boring न होने देने के लिए standard library बनाने की motivation मिली
अब लगता है कि बेहतर tools पहले ही खत्म कर दिए होते तो अच्छा रहता
jq में लिखे gdb जैसे CLI debugger wsjq[1] से debugging करता हूं, लेकिन यह slow है
[0]: https://github.com/thaliaarchi/ws-challenges
[1]: https://github.com/thaliaarchi/wsjq
functional programming का experience न रखने वाले व्यक्ति के लिए भी मज़ेदार था
इस साल participate करने का समय नहीं है, लेकिन अगर करता तो शायद फिर F# ही चुनता
अभी functional journey की शुरुआत में हूं, लेकिन अब तक लगता है कि AoC मददगार रहा है
पिछले साल Day 12 पर पूरे एक हफ्ते तक अटका रहा, और हल निकालने के बारे में सोचते-सोचते जागते हुए हर पल उसी में चला गया
इस साल खुद पर थोड़ा नरम रहकर participate नहीं कर रहा, और winter vacation को ठीक से enjoy करना चाहता हूं
अब तो इसे देखता ही नहीं। मज़ा काफी जल्दी stress में बदल जाता है
boundaries तय करना और आराम के समय का आनंद लेना जरूरी है
मेरे लिए Advent of Code एक slippery slope जैसा है
difficulty बढ़ने पर पहले आसान लगता है, फिर rewarding तरीके से मुश्किल, लेकिन कब बहुत ज्यादा समय लगने लगता है पता नहीं चलता
तब तक आप emotionally invested हो चुके होते हैं, यही risk है
https://eli.li/december-adventure
काटी जाने वाली सबसे लंबी तीन edges खोजने के लिए force-based graph engine तक लिखना पड़ा
हल करने के बाद दूसरों के solutions देखे तो उन्होंने Meta के theorem prover का इस्तेमाल करके करीब 10 lines में खत्म कर दिया था
मुझे वह बहुत बड़ा shortcut लगा
AoC पसंद है
AI bot हल कर रहा है या कोई और पहले उठता है, इसकी चिंता करने की जरूरत नहीं; बस अपने मज़े के लिए हल करो
चाहे challenge खुद पसंद हो, या कोई नई language आज़मानी हो, फर्क नहीं पड़ता
मुझे work से अलग करने के लिए जितना हो सके Kotlin functional style में हल करना पसंद है
आज का solution भी डाल दिया है। utilities इस्तेमाल करता हूं इसलिए pure Kotlin नहीं है, लेकिन बढ़िया functions जमा करके एक तरह की library बनाना भी मज़े का हिस्सा है
https://github.com/Matsemann/algorithm-problems/blob/main/ad...
पिछले कुछ साल Python NumPy इस्तेमाल किया, और इस साल Kotlin इस्तेमाल कर रहा हूं; पहले दिन के problem में transpose function की सबसे ज्यादा कमी महसूस हुई
मेरा code यहां है: https://github.com/charelF/AdventOfCode/blob/main/kt/src/y20...