1 คะแนน โดย GN⁺ 2024-12-02 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Advent of Code ที่สร้างโดย Eric Wastl เป็นอีเวนต์ออนไลน์ที่นำเสนอปริศนาการเขียนโปรแกรมหลากหลายแบบ และสามารถแก้ได้ด้วยหลายภาษาโปรแกรมมิง

  • ถูกนำไปใช้เพื่อวัตถุประสงค์หลากหลาย เช่น การเตรียมสัมภาษณ์ การฝึกอบรมในบริษัท งานมหาวิทยาลัย แบบฝึกหัด และการแข่งขันทำความเร็ว

  • แม้ไม่มีพื้นฐานด้านวิทยาการคอมพิวเตอร์ ก็สามารถเข้าร่วมได้หากมีความรู้การเขียนโปรแกรมเล็กน้อยและทักษะการแก้ปัญหา

  • เคล็ดลับทั่วไป

    • หากติดขัดระหว่างแก้ปัญหา สามารถใช้ตัวอย่างที่ให้มาในปริศนาเพื่อตรวจสอบคำตอบได้
    • หากตัวอย่างไม่ทำงาน ควรกลับไปอ่านคำอธิบายอีกครั้งและตรวจสอบว่าโปรแกรมทำงานตามที่คาดไว้หรือไม่
    • หากยังแก้ไม่ได้ สามารถขอความช่วยเหลือจากเพื่อน หรือลองใหม่ภายหลังได้
  • คำถามที่พบบ่อย

    • หากต้องการเลือกบล็อกโค้ด ให้คลิกบล็อกโค้ดสามครั้งขณะที่เปิดใช้งาน JavaScript
    • Advent of Code ใช้ OAuth ในการจัดการการยืนยันตัวตน และข้อมูลส่วนตัวของผู้ใช้จะไม่ถูกเปิดเผยนอกเหนือจากข้อมูลที่เปิดเผยสาธารณะอยู่แล้ว
    • การจะเข้าร่วม global leaderboard หรือไม่ สามารถตัดสินใจได้ตามเป้าหมายส่วนบุคคล
    • ความยากของปริศนาจะเปลี่ยนแปลงไปตลอดช่วงอีเวนต์ และอาจรู้สึกต่างกันไปตามระดับทักษะของแต่ละคน
    • ปริศนาจะเปิดตอนเที่ยงคืน (EST/UTC-5) ซึ่งเป็นเวลาที่ผู้ดูแลสามารถบริหารจัดการได้อย่างเสถียร
    • หากอ่านข้อความบนเว็บไซต์ได้ยาก สามารถใช้โหมดคอนทราสต์สูงได้
    • ไม่มีการรับไอเดียปริศนาเนื่องจากปัญหาทางกฎหมาย
    • หากคิดว่าปริศนามีบั๊ก สามารถไปถามในซับเรดดิตก่อน
    • หากจะสตรีมการแก้โจทย์ ควรหลีกเลี่ยงช่วงที่ผู้อื่นกำลังแข่งขันอยู่
    • ไม่แนะนำให้ใช้ AI เพื่อไต่อันดับบน global leaderboard
  • เครดิต

    • ปริศนา โค้ด และการออกแบบ: Eric Wastl
    • ผู้ทดสอบเบตา: Tim Giannetti, Ben Lucek, JP Burke, Aneurysm9, Andrew Skalski
    • ผู้จัดการชุมชน: Danielle Lucek, Aneurysm9
  • ข้อกฎหมาย

    • Advent of Code เป็นเครื่องหมายการค้าจดทะเบียนในสหรัฐอเมริกา และองค์ประกอบด้านการออกแบบ ภาษา สไตล์ และแนวคิด เป็นทรัพย์สินของ Advent of Code
    • สามารถลิงก์หรืออ้างอิงปริศนาได้ แต่ห้ามคัดลอกหรือแจกจ่ายส่วนใดส่วนหนึ่งของ Advent of Code ซ้ำ

1 ความคิดเห็น

 
GN⁺ 2024-12-02
ความเห็นจาก Hacker News
  • ใช้ภาษา Go มาเป็นปีที่ 4 แล้ว และรู้สึกว่าภาษานี้ไม่ค่อยเหมาะกับการแก้ปัญหา เพราะขาดโครงสร้างข้อมูลพื้นฐานใน standard library และถึงจะเป็นภาษาที่คอมไพล์แล้ว ความเร็วก็ยังช้า
  • ชอบ AoC มาก และตลอด 2-3 ปีที่ผ่านมาได้ลองทำด้วย Rust โดยใน Discord ได้เรียนรู้ทั้งการปรับแต่งประสิทธิภาพหลากหลายแบบ อัลกอริทึมขั้นสูง และ SIMD เพื่อหาวิธีแก้ที่เร็วที่สุด
    • รอบนี้จะลองทำทั้ง Rust และ Golang เพื่อดูว่าจะชอบหรือพอทนกับ Golang ได้ หรือพิสูจน์สมมติฐานว่า Golang ไม่ค่อยดี
  • ความท้าทายในการเขียน input parser ที่ซับซ้อนขึ้นเรื่อย ๆ ตลอด 25 วันได้เริ่มขึ้นอีกครั้ง
  • ปีนี้ตั้งใจจะลองทำบน NES (Nintendo Entertainment System)
    • ด้วยข้อจำกัดของ RAM (2KiB และเพิ่มได้อีก 8KiB บนคาร์ทริดจ์) ทำให้บางโจทย์อาจเป็นไปไม่ได้ แต่ก็วางแผนจะพยายามแก้ให้ได้มากที่สุด
    • โจทย์ของวันนี้สามารถแก้ได้ภายใน 4 วินาที โดยใช้ RAM เพิ่มอีก 4KiB บนคาร์ทริดจ์
  • ความท้าทายในปีนี้คือเขียนด้วย C โดยไม่มี standard library หรือ allocator เพื่อให้รันบน STM32 ได้
    • เมื่อ 2 ปีก่อนเคยลองด้วยแอสเซมบลี แต่หลังจากเสียเวลาไปมากกับการเขียน standard library ของแอสเซมบลี ก็ยอมแพ้แล้วเปลี่ยนไปใช้ Rust
  • ปกติทำ AoC ด้วย Common Lisp แต่ปีนี้กำลังลอง Swift
    • สำหรับภาษากระแสหลักแบบ static type แล้ว ก็ไม่ได้แย่กับงานลักษณะนี้
    • โค้ด Swift AoC
  • ปีนี้ระหว่างกำลังจัดงานอีเวนต์ที่ที่ทำงานใหม่ ก็ได้ตระหนักว่าไม่สามารถทำงานร่วมกับหัวหน้าคนใหม่ได้ จึงต้องลาออก
    • คิดว่าการให้เหล่านักพัฒนาได้เรียนรู้การแก้ปัญหาจริง แทนที่จะเอาแต่ประกอบ framework เข้าด้วยกันนั้นมีประโยชน์มาก
    • สุดท้ายก็คงจะอยู่กับ Emacs ตามเดิม
  • แก้โจทย์ทั้งหมดเสร็จแล้ว และนี่เป็นปัญหาทางธุรกิจ แค่เปลี่ยนหัวหน้านักประวัติศาสตร์ก็พอ
  • มีคนที่ทำความท้าทายนี้ด้วย Common Lisp และ C standard library ขณะที่อีกคนกำลังพยายามเรียก curl เพื่อดาวน์โหลดไฟล์ข้อมูล
  • ปีก่อนติดอยู่ที่วันที่ 12 เป็นเวลาหนึ่งสัปดาห์ และใช้เวลาทั้งหมดไปกับการคิดหาทางแก้ ปีนี้จึงตั้งใจจะใจดีกับตัวเอง ไม่เข้าร่วม และเพลิดเพลินกับการพักผ่อนช่วงฤดูหนาวแทน
  • ปีนี้ตั้งใจจะลองทำด้วย F# และ Gleam แต่ก็คาดว่าเหมือนทุกปี คือคงไม่มีทั้งเวลาและสภาพจิตใจพอจะทำเกินวันที่ 10-12
    • อยากแนะนำให้ผู้ใช้ Python ลอง F#: มันให้ความรู้สึกคล้ายการทำสคริปต์มาก และยังมี REPL ที่ยอดเยี่ยมด้วย