- 12월 프로그래밍 퍼즐 이벤트인 Advent of Code는 실력과 언어 선택의 장벽을 낮춰, 연습·교육·경쟁 등 다양한 목적으로 참여할 수 있게 설계됨
- 컴퓨터과학 배경이나 고성능 장비가 없어도 되며, 모든 문제에는 10년 된 하드웨어에서 최대 15초 안에 끝나는 해법이 있음
- 풀이가 막히면 예제 확인, 직접 만든 테스트 케이스, 입력 검증, 친구나 subreddit 힌트 순서로 문제를 좁혀가면 됨
- 2024년 FAQ에는 이벤트 길이 변경, global leaderboard 제거, private leaderboard 규칙, AI 사용, 복제·재배포 제한 같은 운영 정책이 정리돼 있음
- 속도 경쟁은 선택 사항이며, 참가자는 자신에게 유용한 방식으로 퍼즐을 풀고 학습하는 데 집중할 수 있음
Advent of Code의 성격과 참여 조건
- Advent of Code는 작은 프로그래밍 퍼즐로 구성된 Advent calendar 형식의 이벤트임
- 퍼즐은 다양한 실력 수준을 대상으로 하며, 원하는 프로그래밍 언어로 풀 수 있음
- 면접 준비, 회사 교육, 대학 과제, 연습 문제, 속도 경쟁, 참가자 간 도전 등에 활용됨
- 컴퓨터과학 배경은 필수가 아니며, 약간의 프로그래밍 지식과 문제 해결 능력만 있어도 참여할 수 있음
- 고성능 컴퓨터도 필요 없고, 모든 문제에는 10년 된 하드웨어에서 최대 15초 안에 끝나는 해법이 있음
막혔을 때의 풀이 절차
- 풀이가 막히면 먼저 퍼즐에 포함된 예제로 프로그램을 검증해야 함
- 예제 결과가 맞지 않으면 문제 설명을 다시 읽고, 오해한 부분이나 예상과 다른 프로그램 동작을 확인함
- 예제는 맞지만 정답이 틀리면, 손으로 답을 확인할 수 있는 테스트 케이스를 직접 만들어 프로그램에 적용함
- 전체 퍼즐 입력을 빠짐없이 사용했는지도 확인해야 함
- 계속 막히면 친구에게 도움을 요청하거나 나중에 다시 풀 수 있으며, subreddit에서 힌트를 받을 수도 있음
사이트 사용과 인증
- 코드 블록은 JavaScript가 활성화되어 있으면 트리플 클릭으로 전체 선택할 수 있음
- 인증은 OAuth를 사용해 외부 서비스에서 신원을 확인함
- 로그인할 때 자격 증명은 Advent of Code가 아니라 해당 외부 서비스에만 제공됨
- 외부 서비스는 Advent of Code 서버에 사용자가 본인임을 알려줌
- 일반적으로 이미 공개된 정보 외에는 추가 정보가 드러나지 않음
- Advent of Code는 인증 서비스의 고유 ID, 이름, URL, 이미지를 기억함
- 사이트 글자가 읽기 어렵다면 고대비 대체 스타일시트를 사용할 수 있음
- Firefox는 View → Page Style → High Contrast를 기본 지원함
난이도, 공개 시간, 이벤트 길이
- 퍼즐의 난이도와 주제는 이벤트마다 달라짐
- 일반적으로 시간이 지날수록 퍼즐은 더 어려워지지만, 개인의 기술 조합에 따라 체감 난이도는 크게 달라질 수 있음
- 퍼즐은 EST/UTC-5 자정에 공개됨
- 그 시간이 운영자가 안정적으로 문제 없이 동작하는지 확인할 수 있는 시간이기 때문임
- 자정에 참여하지 못해도 문제가 없고, 지역 내 경쟁은 private leaderboards를 사용할 수 있음
- 이벤트 일수는 변경됨
- Advent of Code 운영에는 매년 많은 자유 시간이 필요하고, 퍼즐 제작이 그중 대부분을 차지함
- 10년 동안 일정을 유지한 뒤 변화가 필요해짐
- 퍼즐은 날짜 번호가 맞도록 12월 1일에 시작하며, 매일 공개되고 12월 중순에 끝남
리더보드와 속도 경쟁
- global leaderboard는 제거됨
- 운영자, 인프라, 많은 사용자에게 가장 큰 스트레스 요인 중 하나였음
- 일부 참가자는 경쟁을 지나치게 심각하게 받아들였고, DDoS 공격 같은 행동도 있었음
- 많은 사용자가 자신의 시간이 비교 대상보다 느리다는 이유로 자신을 더 나쁜 프로그래머라고 잘못 결론 내림
- 2015년에 재미있는 기능으로 시작했지만 10년 동안 점점 커지는 문제가 되었음
- private leaderboard의 읽기 전용 보기는 공유할 수 있음
- 이 기능이나 데이터를 사용해 새로운 global leaderboard를 만들면 안 됨
- 빠른 풀이 시간은 선택 사항임
- 빠르게 풀려면 퍼즐 풀이 외에도 여러 추가 기술과 많은 연습이 필요함
- speed-solve 코드는 코드 리뷰를 통과할 코드와 전혀 다르게 보일 때가 많음
- 자신에게 유용한 목표에 맞춰 접근 방식을 고르고 속도 경쟁을 완전히 무시해도 괜찮음
AI 사용과 private leaderboard 규칙
- private leaderboard에 속해 있다면 운영자에게 기대 규칙을 확인해야 함
- 규칙이 맞지 않으면 다른 private leaderboard를 찾거나 직접 만들 수 있음
- private leaderboard 규칙에는 최대 실행 시간, 허용 언어, 퍼즐을 처음 열 수 있는 시간, 사용할 수 있는 도구, 작업 중 우스꽝스러운 모자를 써야 하는지 여부까지 포함될 수 있음
- Advent of Code 퍼즐을 풀 때 AI 사용은 권장되지 않음
- 대신 친구를 헬스장에 보내면 자신이 강해질 수 있느냐는 비유가 사용됨
- 퍼즐은 사람이 풀 때 흥미롭도록 설계되며, AI가 풀 수 있는지 여부는 고려하지 않음
- AI 프롬프트 연습이 목적이라면 그 목적에 맞게 설계된 다른 연습이 더 적합할 수 있음
퍼즐 아이디어, 버그, 복제 정책
- 퍼즐 아이디어는 보내지 말아야 함
- 저작권과 attribution 같은 법적 문제 때문에 아이디어를 받지 않음
- 실수로 일부를 사용할 가능성을 피하려고 퍼즐 아이디어처럼 보이는 이메일도 읽지 않음
- 퍼즐 버그를 발견했다고 생각하면 먼저 subreddit에서 확인해야 함
- 퍼즐 공개 후 한 시간이 지나면 이미 많은 사람이 풀었기 때문에 그 이후에는 버그 가능성이 매우 낮음
- Advent of Code는 무료로 사용할 수 있지만 복제는 자유롭지 않음
- 코드 저장소에 퍼즐 본문이나 자신의 입력 같은 Advent of Code 일부를 포함하지 말아야 함
- 웹사이트를 만들 때 Advent of Code처럼 보이게 하거나 비슷한 이름을 붙이지 말아야 함
법적 고지와 허용 범위
- Advent of Code는 미국 등록 상표임
- Advent of Code의 디자인 요소, 문구, 스타일, 개념은 Advent of Code의 단독 재산이며, 명시적 서면 동의 없이 복제하거나 사용할 수 없음
- 저작권 표기는 2015-2025 Advent of Code이며 모든 권리를 보유함
- 토론, 수업, 소스 코드, 인쇄물 등에서 Advent of Code 퍼즐에 링크하거나 참조할 수 있으며, 상업적 맥락에서도 가능함
- Advent of Code는 사용자의 풀이 구현에 대한 소유권이나 저작권을 주장하지 않음