- Advent of Code là lị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
Ý 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ễ
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
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 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
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
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
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
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
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
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
Các phương thức như
each_cons,permutation,primerất hữu ích cho AoCNế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
Đằ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