- Advent of Code คือ ปฏิทินแอดเวนต์ปริศนาการเขียนโปรแกรม สำหรับโปรแกรมเมอร์หลากหลายระดับ และสามารถแก้ได้ด้วยภาษาใดก็ได้
- ผู้เข้าร่วมสามารถนำไปใช้ได้หลากหลายวัตถุประสงค์ เช่น เตรียมสัมภาษณ์, อบรมในองค์กร, งานมหาวิทยาลัย, แบบฝึกหัด, การแข่งความเร็ว
- สามารถเข้าร่วมได้แม้ไม่ได้เรียนสาขาวิทยาการคอมพิวเตอร์ และโจทย์ถูกออกแบบให้ รันจบได้ภายใน 15 วินาทีแม้บนคอมพิวเตอร์อายุ 10 ปี
- เว็บไซต์รองรับ การยืนยันตัวตนด้วย OAuth, โหมดคอนทราสต์สูง, ลีดเดอร์บอร์ดส่วนตัว, ฟังก์ชันเลือกข้อความในบล็อกโค้ด เป็นต้น
- ลีดเดอร์บอร์ดทั่วโลกถูกยกเลิกไปเพราะปัญหา ความเครียดและการโกง และเน้นย้ำประสบการณ์การแก้โจทย์ที่ สนุกและยึดผู้เข้าร่วมเป็นศูนย์กลาง
ภาพรวมของ Advent of Code
- Advent of Code เป็นอีเวนต์ปริศนาการเขียนโปรแกรมประจำปีที่สร้างโดย Eric Wastl โดยนำเสนอปริศนาในรูปแบบ ปฏิทินแอดเวนต์ออนไลน์ ซึ่งเริ่มทุกวันที่ 1 ธันวาคมของทุกปี
- ผู้เข้าร่วมจะแก้โจทย์ใหม่ทุกวัน และสามารถใช้ภาษาใดก็ได้โดยไม่มีข้อจำกัด
- โจทย์สามารถนำไปใช้ได้หลายรูปแบบ เช่น เตรียมสัมภาษณ์, การศึกษา, การฝึกฝน, การแข่งขัน, การท้าทายกันเอง
- การเข้าร่วม ไม่จำเป็นต้องมีความรู้ด้านวิทยาการคอมพิวเตอร์โดยเฉพาะ มีเพียงพื้นฐานการเขียนโปรแกรมและทักษะแก้ปัญหาก็เพียงพอ
- ทุกโจทย์สามารถ รันเสร็จได้ภายใน 15 วินาทีแม้บนฮาร์ดแวร์อายุ 10 ปี
วิธีเข้าร่วมและการสนับสนุน
- หากต้องการสนับสนุน Advent of Code สามารถแชร์ผ่าน Bluesky, Twitter, Mastodon หรือสนับสนุนโดยตรงผ่าน AoC++ ได้
- หากติดขัดระหว่างแก้โจทย์ แนะนำให้ ตรวจสอบอินพุตตัวอย่าง, เขียนเทสต์เคส, ขอความช่วยเหลือจากเพื่อน, ขอคำใบ้ใน subreddit
เคล็ดลับทั่วไป (General Tips)
- หากอินพุตและเอาต์พุตตัวอย่างไม่ตรงกัน ควรกลับไปอ่านคำอธิบายโจทย์อีกครั้งและตรวจสอบการทำงานของโค้ด
- หากผ่านตัวอย่างแล้วแต่คำตอบยังผิด ให้สร้าง เทสต์เคสที่ตรวจสอบด้วยตนเองได้ เพื่อยืนยันผล
- หากยังแก้ไม่ได้ อาจ พักสักครู่แล้วกลับมาลองใหม่ หรือ ถามชุมชน ได้
คำถามที่พบบ่อย (FAQ)
- การเลือกบล็อกโค้ด: เมื่อเปิดใช้ JavaScript สามารถเลือกทั้งหมดได้ด้วย การคลิกสามครั้ง
- วิธีการยืนยันตัวตน: ใช้ OAuth เพื่อล็อกอินผ่านบริการภายนอก เช่น Reddit, GitHub โดยข้อมูลรับรองจะถูกส่งไปยังบริการนั้นเท่านั้น
- Advent of Code จะเก็บเพียง ID, ชื่อ, URL, รูปภาพ ของผู้ใช้
- การเปลี่ยนแปลงของความยาก: โจทย์จะยากขึ้นอย่างค่อยเป็นค่อยไปตลอดช่วงอีเวนต์ และ ระดับความยากที่รับรู้ได้ จะแตกต่างกันไปตามทักษะของแต่ละคน
- เวลาเปิดเผยปริศนา: เผยแพร่ตอน เที่ยงคืนตามเวลามาตรฐานฝั่งตะวันออกของสหรัฐฯ (UTC-5) เพราะเป็นช่วงเวลาที่ผู้ดูแลสามารถจัดการได้
- หากต้องการการแข่งขัน สามารถแข่งกันตามภูมิภาคผ่าน ลีดเดอร์บอร์ดส่วนตัว ได้
- ปัญหาด้านการอ่าน: รองรับ โหมดคอนทราสต์สูง และสามารถเปิดเป็นค่าเริ่มต้นใน Firefox ได้
- ห้ามเสนอไอเดียปริศนา: เนื่องจากปัญหาด้านลิขสิทธิ์ จึงไม่รับไอเดียปริศนาจากภายนอก
- การรายงานบั๊ก: หากผ่านไปเกิน 1 ชั่วโมงหลังเผยแพร่ปริศนาแล้ว มักมีผู้ใช้จำนวนมากแก้ได้แล้ว จึงมีโอกาสที่เป็นบั๊กค่อนข้างต่ำ
- หากมีปัญหา แนะนำให้ตรวจสอบใน subreddit ก่อน
- เป็นการแข่งขันความเร็วหรือไม่: หากต้องการแก้ให้เร็ว จำเป็นต้องมี การฝึกฝนและทักษะเพิ่มเติม แต่สิ่งสำคัญคือ เข้าร่วมในแบบที่สอดคล้องกับเป้าหมายของตนเอง
- การเปลี่ยนจำนวนวันของอีเวนต์: หลังคงตารางเดิมมา 10 ปี ได้เปลี่ยนให้จบในช่วงกลางเดือนเพื่อลด ภาระด้านเวลาของผู้จัด
- การยกเลิกลีดเดอร์บอร์ดระดับโลก: หลังผ่านไป 10 ปี ได้ยกเลิกเพราะปัญหาการแข่งขันที่รุนแรงเกินไป รวมถึง การโจมตีแบบ DDoS และความเครียดของผู้ใช้
- มีการเพิ่ม ฟังก์ชันแชร์ลีดเดอร์บอร์ดส่วนตัวแบบอ่านอย่างเดียว มาแทน
- การใช้ AI: เนื่องจากปริศนามีเป้าหมายเพื่อ พัฒนาความคิดของมนุษย์ จึงไม่แนะนำให้ใช้ AI
- มีการอธิบายด้วยอุปมาว่า “ให้คนอื่นออกกำลังกายแทน ก็ไม่ได้ทำให้ตัวคุณแข็งแรงขึ้น”
- ห้ามคัดลอกเนื้อหา: แม้ Advent of Code จะใช้งานได้ฟรี แต่ ห้ามคัดลอกข้อความปริศนาหรือข้อมูลอินพุต
- รวมถึงห้ามเลียนแบบดีไซน์หรือชื่อของเว็บไซต์ด้วย
เครดิต (Credits)
- ปริศนา, โค้ด, ดีไซน์: Eric Wastl
- เบต้าเทสต์: Ben Lucek, JP Burke, Aneurysm9, Andrew Skalski
- ผู้จัดการชุมชน: Danielle Lucek, Aneurysm9
- ผู้เข้าร่วม: ผู้ใช้ทุกคน
ข้อกฎหมาย (Legal)
- Advent of Code เป็น เครื่องหมายการค้าจดทะเบียนในสหรัฐอเมริกา และดีไซน์ ภาษา สไตล์ และคอนเซปต์ทั้งหมดเป็นทรัพย์สินเฉพาะ
- ห้ามคัดลอกหรือนำไปใช้โดยไม่มีความยินยอมเป็นลายลักษณ์อักษรอย่างชัดแจ้ง
- สามารถ ลิงก์หรืออ้างอิง ปริศนาได้อย่างเสรี และอนุญาตแม้ในบริบทเชิงพาณิชย์
- Advent of Code ไม่อ้างสิทธิ์ลิขสิทธิ์ในโค้ดคำตอบ ของผู้เข้าร่วม
2 ความคิดเห็น
ปีที่แล้วก็ได้ร่วมเล่นไปนิดหน่อยเหมือนกัน... เวลาหนึ่งปีผ่านไปเร็วจริง ๆ ฮือ
ความคิดเห็นจาก Hacker News
ทุกครั้งที่ได้ยินว่าคนที่ไม่มีพื้นฐานวิทยาการคอมพิวเตอร์ก็เข้าร่วมได้ ก็รู้สึกว่าจริงๆ แล้วมันอาจทำให้ โปรแกรมเมอร์สายงานอดิเรก ผิดหวังได้
ถ้าคำว่า “ไปได้ไกลพอสมควร” หมายถึงการแก้โจทย์ง่ายๆ 1-2 ข้อก็คงจริง แต่เกินจากนั้นไม่ง่ายเลย
Advent of Code คือ ไฮไลต์ ของเดือนธันวาคมในทุกปี
น่าเสียดายที่ลีดเดอร์บอร์ดระดับโลกหายไป แต่ก็พอเข้าใจได้ การที่ปีนี้จัดแค่ 12 วันก็ดีเพราะช่วยลดภาระลง
อย่าพยายาม “เอาชนะ” แต่แค่สนุกกับการแก้ปัญหาก็พอ
ฉัน รัก Advent of Code มากจริงๆ
ที่ปีนี้มีแค่ 12 วันกลับเป็นเรื่องน่ายินดีเสียอีก ช่วงปลายปีมีตารางชีวิตจริงเยอะ ปีที่แล้วเลยทำได้แค่ประมาณครึ่งเดียว
ขอขอบคุณผู้จัดอย่างมาก
ปีนี้เป็นครั้งแรกที่ฉันลอง Advent of Code แล้วมัน สนุกมาก
คล้าย Project Euler แต่เน้นการเขียนโปรแกรมมากกว่าคณิตศาสตร์
ด่านแรกค่อนข้างง่าย แต่ด่านสองต้องการ แนวทางที่ปรับให้มีประสิทธิภาพ เลยยิ่งน่าสนใจ
การเอาลีดเดอร์บอร์ดสาธารณะออกถือว่าสมเหตุสมผล
ต่อให้ไม่นับปัญหา LLM ก็แทบจะแข่งไม่ได้อยู่แล้วนอกจากจะอยู่ใน เขตเวลาของสหรัฐฯ บางช่วง
แต่ถ้าได้เห็นสถิติอย่างอัตราการแก้โจทย์แยกตามเขตเวลาทั่วโลกก็น่าจะสนุกดี
การดู วิดีโอเขียนโค้ดสด บน YouTube ก็สนุกเหมือนกัน
ฉันรอ Advent of Code ทุกปี
ฉันไม่กดดันตัวเองกับลีดเดอร์บอร์ด แต่ใช้มันเป็นโอกาสในการเรียนรู้ภาษาใหม่หรือ ขัดเกลาทักษะ
ปกติเราไม่ได้ต้องมาบูตสแตรปโปรเจกต์เองหรือเขียน DFS กันบ่อยๆ ดังนั้นอีเวนต์แบบนี้จึงเป็นการฝึกที่ดี
เลยพยายามรักษาสมดุลด้วยงานอย่างการเขียนเทสต์หรือทำเอกสารในเวลาปกติ
ทุกปีก็จะค่อยๆ ปรับปรุงโจทย์เก่าๆ เพื่อฝึกเพิ่มประสิทธิภาพและ ความอ่านง่ายของโค้ด
ดีใจที่ปีนี้ Advent of Code กลับมาอีก
ตอนอ่าน FAQ แล้วไม่ค่อยเข้าใจว่าทำไมถึงมีกฎห้ามเผยแพร่ข้อมูลอินพุต
ตัวข้อความของปริศนาพอเข้าใจได้ แต่ที่แม้อินพุตก็ต้องไม่เปิดเผยนั้นน่าเสียดายอยู่ดี ถึงอย่างนั้นก็เคารพกติกาเพราะเป็นของฟรีให้เล่น
แบบสอบถามเรื่องภาษา: แม้ Python และ C++ จะถูกใช้เป็นหลัก แต่ในบรรดา ภาษากระแสรอง ก็มีบางตัวที่เหมาะกับ AoC มาก
เป็นการชวนแชร์กันว่าภาษาไหนเหมาะและน่าใช้
พูดเล่นนะ แต่บางครั้งก็ลองแก้ด้วย ASM สำหรับ Game Boy ด้วย จริงๆ แล้วใช้ Clojure หรือ Python มากกว่า
ปีนี้กำลังทำคอมไพเลอร์ไบต์โค้ดอยู่ ส่วนบนลีดเดอร์บอร์ดจะใช้ Go เพราะ ความเร็วในการคอมไพล์ ซึ่งช่วยให้ได้ที่ 1 ใน Day19 ของปี 2022
เช่น สร้างลิสต์ไม่สิ้นสุดขึ้นมาแล้ววนไปจนกว่าจะเจอเงื่อนไขที่ต้องการ
เมธอดอย่าง
each_cons,permutation,primeมีประโยชน์มากกับ AoCถ้าเตรียมยูทิลิตี้สำหรับ 2D grid หรือ parser ไว้ล่วงหน้าจะทำงานได้มีประสิทธิภาพขึ้นมาก
ปีนี้ตั้งใจจะลองลุยด้วย แอสเซมบลี (fasm)
มันอาจจะสนุกหรืออาจจะทรมานก็ได้ แต่ไม่ว่ายังไงก็เป็นกระบวนการเพื่อการเรียนรู้อยู่ดี
ดูเหมือนว่าลีดเดอร์บอร์ดจะหายไปหลังจากกระแส AI automation บูมขึ้นเมื่อปีที่แล้ว
น่าเสียดาย แต่ก็ดูเป็นการตัดสินใจที่เลี่ยงไม่ได้
ยังไงก็แข่งยากอยู่แล้ว ดังนั้นลีดเดอร์บอร์ดระดับโลกจึงแทบไม่มีความหมายอะไร