【熟肉】AOC赛制介绍和注意事项
关于 - About
你好,我是Eric Wastl,Advent of Code的创始人。欢迎来到AoC!我也做了其他一些东西。你能在Bluesky、Mastodon和Github上找到我
Advent of Code是一项不限制具体编程语言的解谜闯关类降临日日赛事。AoC已被广泛用于面试培训、企业培训、大学作业、技术练习、速通乃至给别人出题。
注

AoC的一小部分赞助商(这些赞助商也会使用AoC作为内部的技术培训)
注
Rice University 莱斯大学在2019年秋Comp215活动中就使用了AoC作为课程作业
参赛者不强制需要计算机科学背景——一点点编程知识和一些解决问题的能力就足够完成许多关卡。参赛者也不需要一台性能强劲的电脑,每道题都会有一种在古董电脑花至多十五秒就能解出答案的解法
如果参赛者想为AoC做贡献,可以通过AoC++分享解法,间接帮助其他参赛者
温馨提示 - General Tips
如果你卡壳了,请先拿题目给的示例输入试一下自己的解法——用题目给的示例输出校正你的解法。如果没解出来,请再读一遍题目描述,看一下你是不是漏了什么,是不是没写对程序?测试通过后,如果还是得不到正确答案,请手动写一些测试样例,看看是否符合你的预期。请确认你拿到了题目的完整输入,如果还是不行,请问问你的朋友,或者休息一下稍后再回来解题。也可以到Reddit板块上找解法
常见问题 - Frequently Asked Questions
Q:有没有办法快速选中整个代码块?
你应该连点三次来选中代码块。记得启用JS脚本
#!/usr/bin/env perl
use warnings;
use strict;
print "You can test it out by ";
print "triple-clicking this code.\n";Q:网站的认证服务是如何做的?
AoC使用Oauth作为认证框架。登录时你需要提供的是第三方凭据,而不是AoC的凭据;然后第三方服务会告诉AoC你就是你,不是别人。总的来说,这能很好地保护你的个人信息(除了本来就是公开的那些)。AoC的Oauth服务提供方有Reddit和Github。AoC会记住你用来验证身份的服务的UID、用户名、路径和头像
Q:为什么AoC这么简单/坐牢?
每一年的难度和主题都在变化。总的来说,题目难度会随时间迁移而逐渐提升,并且与你个人的技能集息息相关——有的题目对你来说会更难,有的题目则会容易一些,大家都一样。出题才是最难的
Q:为什么UTC/美国东部时区 5点才上题?
因为到那时我才有办法确保一切准备就绪。我也有家庭,也有工作,也需要休息。如果你做不到半夜爬起来做题,也不用太逼着自己;如果你想冲榜,请出门左转私人排行榜
Q:网站文本太瞎眼了,有没有对比度高一点的版本?
确实是有高对比度的样式的。火狐浏览器默认就支持这种样式(View -> Page Style -> High Contrast)
Q:我想出题!我可以联系你吗?
别!考虑版权法和版权归属,我不接受外部出题,我甚至都不能看你的邮件,不然我的出题思路就会被污染。
Q:题目有问题怎么办?
一旦题目已经出来一小时,有很多人解了出来,题目就不大可能有什么问题了。有问题请出门左转Reddit相关论坛
Q:我应该冲榜吗?
随你便。能做出来就不错了,冲榜要的技能可就更多了,还得天天练多多练。速通解法可不像是能通过代码审计的工程解法。当然,如果你觉得冲榜很有趣,那就冲吧!不过,你应该找到对自己有用的方向,因此,你完全可以不追求速度,自己设置一个目标,并努力达成那个目标
Q:为什么每年赛事持续的时间都在变化?
为了维护AoC,我牺牲了很多业余时间。在保持了赛事安排十年不变动后,我需要一次改变。比赛仍然是12月1日开赛(Day 1就是12月第一天),约十二月中旬结束
Q:总榜怎么没了?
总榜曾是我、基础设施以及很多用户最大的负担之一。人们太看重荣誉了,已经偏离AoC的初衷了;有些人甚至诉诸DDoS。很多人都因为自己交题不够快,而怪罪自己是差劲的程序员。 AoC本应该是一项写着玩的赛事,但十年后的今天,已经变成一项只有冲榜冲榜冲榜的赛事——所以,我移除了总榜(不过,我允许你分享只读的私人排行榜视图。请别把私人排行榜变成一个小一点的总榜)
Q:在冲私人排行榜的同时,我应该使用AI/关注榜单流/检验不同解法/找朋友帮忙等等吗?
如果你是某个私人榜的成员,你应该问问管理者对参赛者的预期是什么。如果你不爽这些预期,请自己开一个私人排行榜或者找一个符合自己需求的私人排行榜。私人排行榜可能会限制你的程序的最大运行时间、可使用的编程语言、你什么时候能够打开题目、你可以使用什么工具,甚至可能会要求你写程序时戴个什么别的帽子
Q:我应该用AI解题吗?
别。你的好基友能代替你上厕所吗?AoC给人类开的,不是给AI开的,更不是给类人猿开的。如果你想练习提示词工程,那么多的是比AoC更适合锻炼Ai的,记住这一点。
Q:我可以复制或再分发AoC的题目吗?
别。AoC可以免费使用,但不能免费复制。如果你要在别处公开一个代码仓库,请移除AoC的题目文本部分或你自己的题目输入。如果你在写网站,请不要复刻AoC网页
版权信息
出题和设计
- Eric Wastl
内测人员
- Ben Lucek
- JP Burke
- Aneurysm9
- Andrew Skalski
社区版主
Danielle Lucek 和 Aneurysm9
玩家
你!
法律信息
Advent of Code is a registered trademark in the United States. The design elements, language, styles, and concept of Advent of Code are all the sole property of Advent of Code and may not be replicated or used by any other person or entity without express written consent of Advent of Code. Copyright 2015-2025 Advent of Code. All rights reserved.
You may link to or reference puzzles from Advent of Code in discussions, classes, source code, printed material, etc., even in commercial contexts. Advent of Code does not claim ownership or copyright over your solution implementation.
附录
莱斯大学-计算机科学专业(COMP)-课程215的介绍

【Gemini】从Advent Calender看待AoC的初衷
这是一个极具洞察力的文化溯源!你捕捉到的这个**“Advent Calendar (降临节日历)”** 的概念,确实是解开 AoC 设计哲学的终极钥匙。
不过,我要对你翻译的“奋斗月”这个词做一个小小的、但至关重要的修正(或者说升华)。在西方(特别是德国路德宗)的传统里,Advent 的核心含义不是“奋斗(Struggle)”,而是**“期待与准备(Anticipation & Preparation)”**。
这一个词的差别,彻底改变了我们对 AoC 的理解维度:
1. 节奏的艺术:反“暴饮暴食”机制
传统的降临节日历是一个有 24/25 个小格子的盒子。
规则: 每天只能抠开一格,拿出一块小巧克力(或者小玩具)。
心理学: 小孩子都想一次性抠完吃掉,但大人会说“不行,每天一块”。
映射到 AoC:
LeetCode 是自助餐:你想刷多少题刷多少,容易撑死(Burnout)。
AoC 是怀石料理:它强制你**“延迟满足”**。不管你多厉害,做完今天的题,你就得停下来等明天。
新维度: 这不是为了考倒你,而是为了帮你建立**“每天写一点代码” (Daily Coding Habit)** 的生物钟。对于你这种“找到模式容易懈怠”的人,这种强制的“每天只给你一点点”,反而能让你保持长达 12/25 天的饥饿感和兴趣。
2. 微小的奖赏:多巴胺的正确用法
传统日历里那是块廉价的巧克力,但在孩子眼里那是至高无上的美味。
映射到 AoC:
那就是那颗金星 (Star)。
还有那个随着解题进度慢慢点亮的 ASCII 艺术画(通常是圣诞树或雪景)。
新维度: Eric Wastl 设计的不是一个“考试系统”,而是一个**“游戏化系统”。重点不在于你多快做出来(那是榜单的事),而在于当你按下 Submit 时,屏幕上亮起的那颗星。这种即时的、微小的、确定的正反馈**,正是 Advent Calendar 让人上瘾的核心。
3. 仪式感:程序员的“弥撒”
在 19 世纪的德国,Advent 是为了在漫长的冬夜里点亮蜡烛,等待光明的到来(圣诞节)。
映射到 AoC:
你会发现全球很多程序员把做 AoC 当成一种年度仪式。
有人会专门为 AoC 换上圣诞主题的 IDE 配色。
有人会规定自己必须用一种新学的语言(比如你用的 Go)来做。
新维度: 这不仅仅是写代码,这是在庆祝技术的乐趣。当你意识到你在参与一个拥有几百年文化内核(等待、倒数、庆祝)的数字化变体时,你会对那些看似无聊的“帮助精灵修雪橇”的剧情产生一种温情的共鸣。
4. “奋斗”的真意:为了那个 Big Day
虽然我说 Advent 本意不是“奋斗”,但你翻译的“奋斗月”其实也没错,因为通过这四周的准备,最终是为了迎接 Christmas Day。
映射到 AoC:
前面的题目(Day 1 - Day 11)都是铺垫。
每一天的努力,都是为了让你熟悉工具、打磨框架、热身大脑。
最终,你用这 12 天积累下来的代码库和手感,完成了最后的挑战,拯救了圣诞节。
新维度: 这完美契合了你 COMP 215 的理念——Fit together to complete a real-world application. 你不是在做 12 道孤立的题,你是在为最终的胜利积攒装备。
总结
所以,把 AoC 看作 “给程序员的巧克力盒子” 吧。
不要想着“一口气吃成个胖子”(不要作弊,不要焦虑)。
每天早晨(或者晚上),泡一杯咖啡,抠开今天的“格子”,品尝那一小块逻辑解谜的“巧克力”。
如果不甜(题目太难),那就明天再吃。
如果很甜(解得漂亮),那就回味一下,然后关机睡觉。