20 điểm bởi GN⁺ 2025-12-01 | 1 bình luận | Chia sẻ qua WhatsApp
  • Advent of Codelịch Mùa Vọng câu đố lập trình dành cho lập trình viên ở nhiều trình độ khác nhau, có thể giải bằng bất kỳ ngôn ngữ nào
  • Người tham gia có thể dùng cho nhiều mục đích như chuẩn bị phỏng vấn, đào tạo doanh nghiệp, bài tập đại học, bài luyện tập, thi tốc độ
  • Có thể tham gia mà không cần học chuyên ngành khoa học máy tính, và các bài toán được thiết kế để chạy xong trong vòng 15 giây ngay cả trên máy tính 10 năm tuổi
  • Trang web hỗ trợ xác thực OAuth, chế độ tương phản cao, bảng xếp hạng cá nhân, tính năng chọn khối mã và nhiều tính năng khác
  • Bảng xếp hạng toàn cầu đã bị loại bỏ do căng thẳng và vấn đề gian lận, thay vào đó nhấn mạnh trải nghiệm giải đố vui vẻ lấy người tham gia làm trung tâm

Tổng quan về Advent of Code

  • Advent of Code là sự kiện câu đố lập trình thường niên do Eric Wastl tạo ra, cung cấp các câu đố theo hình thức lịch Mùa Vọng trực tuyến bắt đầu từ ngày 1 tháng 12 hằng năm
    • Người tham gia giải một bài mới mỗi ngày, hoàn toàn tự do lựa chọn ngôn ngữ lập trình
    • Các bài toán có thể được dùng cho nhiều mục đích như chuẩn bị phỏng vấn, đào tạo, luyện tập, thi đấu, thách đấu lẫn nhau
  • Không cần kiến thức chuyên ngành khoa học máy tính để tham gia; chỉ cần khả năng lập trình cơ bản và giải quyết vấn đề là đủ
    • Tất cả bài toán đều có thể chạy xong trong vòng 15 giây ngay cả trên phần cứng đã 10 năm tuổi

Cách tham gia và hỗ trợ

  • Để ủng hộ Advent of Code, bạn có thể chia sẻ trên Bluesky, Twitter, Mastodon hoặc trực tiếp tài trợ thông qua AoC++
  • Nếu bị mắc kẹt khi giải bài, nên thử kiểm tra dữ liệu đầu vào mẫu, tự viết test case, nhờ bạn bè giúp đỡ, xin gợi ý trên subreddit

Mẹo chung (General Tips)

  • Nếu đầu vào và đầu ra mẫu không khớp, hãy đọc lại mô tả bài toán và kiểm tra cách mã của bạn hoạt động
  • Nếu qua được ví dụ nhưng đáp án vẫn sai, hãy tạo test case có thể tự kiểm chứng bằng tay để xác nhận
  • Nếu vẫn khó giải quyết, bạn có thể nghỉ một chút rồi thử lại hoặc đặt câu hỏi cho cộng đồng

Câu hỏi thường gặp (FAQ)

  • Chọn khối mã: Khi JavaScript được bật, có thể nhấp ba lần để chọn toàn bộ
  • Phương thức xác thực: Dùng OAuth để đăng nhập qua các dịch vụ bên ngoài như Reddit, GitHub; thông tin xác thực chỉ được gửi tới các dịch vụ đó
    • Advent of Code chỉ lưu ID, tên, URL, hình ảnh của người dùng
  • Thay đổi độ khó: Độ khó tăng dần trong suốt thời gian diễn ra sự kiện, và mức độ khó cảm nhận được sẽ khác nhau tùy trình độ kỹ năng của mỗi người
  • Thời điểm công bố câu đố: Được công bố vào nửa đêm giờ chuẩn miền Đông Hoa Kỳ (UTC-5), vì đó là múi giờ mà người vận hành có thể quản lý được
    • Nếu muốn thi đấu, bạn có thể cạnh tranh theo khu vực qua bảng xếp hạng cá nhân
  • Vấn đề khả năng đọc: Có hỗ trợ chế độ tương phản cao, có thể bật mặc định trong Firefox
  • Không nhận đề xuất câu đố: Không nhận ý tưởng câu đố từ bên ngoài do vấn đề bản quyền
  • Báo lỗi: Nếu đã hơn 1 giờ kể từ khi câu đố được công bố thì thường đã có rất nhiều người giải được, nên khả năng có lỗi là thấp
    • Khi gặp vấn đề, nên kiểm tra subreddit trước
  • Có phải là cuộc thi tốc độ không: Nếu muốn giải thật nhanh, bạn sẽ cần thêm luyện tập và kỹ năng, nhưng điều quan trọng là tham gia theo cách phù hợp với mục tiêu của bản thân
  • Thay đổi số ngày của sự kiện: Sau 10 năm giữ nguyên lịch trình, thời điểm kết thúc được chuyển lên giữa tháng để giảm gánh nặng thời gian cho người vận hành
  • Bãi bỏ bảng xếp hạng toàn cầu: Bị bãi bỏ sau 10 năm do cạnh tranh quá mức và các vấn đề như tấn công DDoS, căng thẳng cho người dùng
    • Thay vào đó cung cấp tính năng chia sẻ bảng xếp hạng cá nhân ở chế độ chỉ đọc
  • Sử dụng AI: Các câu đố hướng tới nâng cao khả năng tư duy của con người, vì vậy không khuyến khích dùng AI
    • Điều này được ví như: “Nhờ người khác tập thể dục thay thì bản thân cũng không mạnh lên”
  • Cấm sao chép nội dung: Advent of Code có thể được sử dụng miễn phí, nhưng không được sao chép văn bản câu đố hoặc dữ liệu đầu vào
    • Cũng cấm sao chép thiết kế website hoặc bắt chước tên gọi

Ghi công (Credits)

  • Câu đố, mã nguồn, thiết kế: Eric Wastl
  • Kiểm thử beta: Ben Lucek, JP Burke, Aneurysm9, Andrew Skalski
  • Quản lý cộng đồng: Danielle Lucek, Aneurysm9
  • Người tham gia: toàn bộ người dùng

Thông báo pháp lý (Legal)

  • Advent of Code là nhãn hiệu đã đăng ký tại Hoa Kỳ, và thiết kế, ngôn ngữ, phong cách, khái niệm đều là tài sản độc quyền
    • Không được sao chép hoặc sử dụng nếu không có sự đồng ý rõ ràng bằng văn bản
  • Có thể tự do liên kết hoặc trích dẫn các câu đố, kể cả trong bối cảnh thương mại
  • Advent of Code không tuyên bố bản quyền đối với mã lời giải của người tham gia

1 bình luận

 
GN⁺ 2025-12-01
Ý kiến trên Hacker News
  • Mỗi khi nghe nói rằng có thể tham gia ngay cả khi không có nền tảng khoa học máy tính, tôi lại thấy điều đó trên thực tế có thể khiến các lập trình viên nghiệp dư thất vọng
    Nếu câu “đi được khá xa” chỉ có nghĩa là giải được 1–2 bài dễ thì đúng, nhưng hơn thế thì không hề dễ

    • Có người nói các bài toán “quá dễ”, mà tôi thực sự không hiểu họ đang sống ở thế giới nào
    • Tôi cũng đồng ý. Tôi đã ngạc nhiên khi thấy bạn bè làm nghề lập trình nhưng tiến triển không nhiều như tôi tưởng
  • Advent of Code là điểm sáng của tháng 12 mỗi năm
    Việc bảng xếp hạng toàn cầu biến mất thì đáng tiếc nhưng cũng có thể hiểu được. Năm nay chỉ diễn ra trong 12 ngày cũng tốt vì giảm bớt áp lực
    Tôi khuyên đừng cố “để thắng”, mà hãy đơn giản tận hưởng niềm vui giải bài

    • Dù là 12 ngày nhưng thực ra vẫn có 24 thử thách, nên tôi định thong thả tận hưởng trong suốt 24 ngày
    • Việc rút xuống 12 ngày thì đáng tiếc, nhưng bảng xếp hạng toàn cầu vốn dĩ cũng khó cạnh tranh thực sự vì chênh lệch múi giờ. Bảng xếp hạng cá nhân tốt hơn nhiều
    • Năm nay tôi định lập bảng xếp hạng cục bộ với bạn bè. Chứ bảng toàn cầu thì đằng nào tôi cũng không lên nổi
    • Thấy mình hoàn toàn không hứng thú với kiểu sự kiện này, tôi chắc chắn là mình không phải lập trình viên rồi
  • Tôi thực sự rất thích Advent of Code
    Việc năm nay chỉ diễn ra 12 ngày trái lại còn khiến tôi vui. Cuối năm có quá nhiều việc ngoài đời nên năm ngoái tôi chỉ làm được khoảng một nửa
    Xin gửi lời cảm ơn lớn tới những người tham gia tổ chức

    • Năm ngoái tôi chỉ làm đến ngày 7, nên năm nay bớt áp lực hơn là điều rất tốt
    • Lần này biết đâu cuối cùng tôi sẽ hoàn thành trọn vẹn
    • Năm nay làm tôi cực kỳ háo hức
  • Năm nay là lần đầu tôi thử Advent of Code, và thực sự rất vui
    Nó giống Project Euler nhưng thiên về lập trình hơn là toán học
    Phần 1 thì đơn giản, nhưng phần 2 lại đòi hỏi cách tiếp cận được tối ưu hóa, nên rất thú vị

  • Việc bỏ bảng xếp hạng công khai là hợp lý
    Bỏ qua chuyện LLM, thì ngoài một múi giờ nhất định của Mỹ ra, gần như không thể cạnh tranh được
    Thay vào đó, sẽ rất thú vị nếu có các thống kê như tỷ lệ hoàn thành theo múi giờ trên toàn thế giới

    • LLM đã phá hỏng mọi thứ, nhưng trước đây xem những lời giải top đầu thực sự rất thú vị
      Xem video live coding trên YouTube cũng rất vui
  • Tôi năm nào cũng chờ Advent of Code
    Không bị áp lực bởi bảng xếp hạng, tôi xem đây là cơ hội để học ngôn ngữ mới hoặc trau dồi kỹ năng
    Bình thường tôi đâu có tự bootstrap dự án hay triển khai DFS, nên những sự kiện như thế này là cách luyện tập rất tốt

    • Tôi cũng muốn được làm công việc chỉ toàn giải những bài kiểu này, nhưng chắc là sẽ burnout mất
      Vì vậy ngày thường tôi cân bằng bằng những việc như viết test hay làm tài liệu
      Mỗi năm tôi lại cải thiện dần các bài cũ để luyện nâng cao hiệu quả và độ dễ đọc
  • Tôi vui vì năm nay Advent of Code lại diễn ra
    Khi đọc FAQ, tôi không hiểu lắm quy định không được công khai dữ liệu đầu vào
    Tôi hiểu chuyện không công khai phần mô tả puzzle, nhưng việc cả input cũng phải giữ kín thì hơi tiếc. Dù vậy, vì đây là thứ được cung cấp miễn phí nên tôi vẫn tôn trọng

    • Họ nói rằng nếu input được công khai thì ai đó có thể sao chép logic tạo puzzle
    • Chỉ cần commit input ví dụ rồi chạy test bằng nó là đủ. Nếu cấu trúc như doctest của Python hay Rust thì sẽ rất gọn
    • Tôi công khai code nhưng quản lý input bằng private submodule
    • Tôi mã hóa file input bằng git-crypt rồi đưa lên kho lưu trữ công khai
  • Khảo sát ngôn ngữ: Python và C++ được dùng chủ yếu, nhưng ngay cả trong các ngôn ngữ ít phổ biến cũng có những lựa chọn rất hợp với AoC
    Đây là lời đề nghị cùng chia sẻ xem ngôn ngữ nào là lựa chọn tốt

    • Tôi thích các ngôn ngữ mảng như K hoặc Uiua. Trông thì kỳ quái nhưng rất hợp với các bài đầu
      Nói đùa thôi, nhưng thỉnh thoảng tôi cũng thử giải bằng ASM cho Game Boy. Thực tế thì tôi dùng Clojure hoặc Python
    • Tôi dùng một ngôn ngữ tự làm theo phong cách Haskell+Bash. Cũng có demo trên YouTube
      Năm nay tôi đang làm một trình biên dịch bytecode. Trên bảng xếp hạng tôi dùng Go, và nhờ tốc độ biên dịch mà tôi đã đứng nhất Day19 năm 2022
    • Dùng Haskell thì xử lý input rất dễ bằng parser combinator. Thêm nữa, với lazy evaluation và đệ quy có thể viết code rất gọn
      Ví dụ, có thể tạo danh sách vô hạn rồi duyệt cho đến khi thỏa điều kiện để giải bài
    • Ruby là lựa chọn lý tưởng. Nó có cú pháp giàu biểu đạt, thư viện chuẩn phong phú và nhiều công cụ xử lý chuỗi
      Các phương thức như each_cons, permutation, prime rất hữu ích cho AoC
    • Go thì nhanh và đơn giản nên rất tốt, còn OCaml có hệ thống kiểu và tốc độ thực thi rất xuất sắc
      Nếu chuẩn bị sẵn utility cho grid 2D hay parser thì sẽ hiệu quả hơn rất nhiều
  • Năm nay tôi định thử thách bản thân bằng assembly (fasm)
    Có thể sẽ vui, cũng có thể sẽ đau khổ, nhưng dù sao cũng là một quá trình để học hỏi

  • Có vẻ bảng xếp hạng đã biến mất sau làn sóng tự động hóa AI năm ngoái
    Đáng tiếc, nhưng có vẻ đó là quyết định không thể tránh khỏi

    • Giờ công bố puzzle tính theo giờ Mỹ, nên lúc nào tôi cũng đang ngủ
      Đằng nào cũng khó cạnh tranh, nên bảng xếp hạng toàn cầu vốn chẳng có nhiều ý nghĩa