- Advent of Codeは、さまざまなレベルのプログラマー向けのプログラミングパズル・アドベントカレンダーで、どの言語でも解答可能
- 参加者は面接準備、企業研修、大学の課題、練習問題、スピード競争など、さまざまな目的で活用可能
- コンピュータサイエンス専攻でなくても参加でき、10年前のコンピュータでも15秒以内に実行可能な問題で構成されている
- サイトはOAuth認証、ハイコントラストモード、プライベートリーダーボード、コードブロック選択機能などをサポート
- 全世界リーダーボードはストレスと不正行為の問題により廃止され、参加者中心の楽しい問題解決体験が重視されている
Advent of Code の概要
- Advent of CodeはEric Wastlが作成した年次プログラミングパズルイベントで、毎年12月1日から始まるオンラインのアドベントカレンダー形式でパズルを提供
- 参加者は毎日新しい問題を解き、言語の制約なく自由に取り組める
- 問題は面接対策、教育、練習、競争、相互チャレンジなど、さまざまな用途で活用される
- 参加にコンピュータサイエンスの専攻知識は不要で、基本的なプログラミングと問題解決能力があれば十分
- すべての問題は10年前のハードウェアでも15秒以内に実行完了できる
参加と支援の方法
- Advent of Codeを支援するには、Bluesky、Twitter、Mastodonなどで共有するか、**AoC++**を通じて直接支援可能
- 問題を解いていて行き詰まった場合は、サンプル入力の確認、テストケースの作成、友人に助けを求める、subredditでヒントを求めるといった方法が推奨される
一般的なヒント (General Tips)
- サンプル入力と出力が一致しない場合は、問題文を読み直し、コードの動作を確認する必要がある
- サンプルを通過しても答えが間違っている場合は、手動で検証可能なテストケースを作成して確認
- それでも解決が難しい場合は、少し休んでから再挑戦したり、コミュニティに質問したりできる
よくある質問 (FAQ)
- コードブロック選択: JavaScriptが有効な状態でトリプルクリックすると全文選択が可能
- 認証方式: OAuthを使用してReddit、GitHubなどの外部サービスでログインし、認証情報は該当サービスにのみ送信される
- Advent of CodeはユーザーのID、名前、URL、画像のみを保存
- 難易度の変化: イベント期間中に徐々に難しくなり、個人の技術レベルによって体感難易度は異なる
- パズル公開時刻: 米国東部標準時 (UTC-5) の深夜0時に公開される。これは運営者が管理しやすい時間帯であるため
- 競争を望む場合は、プライベートリーダーボードを通じて地域ごとに競うことができる
- 可読性の問題: ハイコントラストモードをサポートし、Firefoxではデフォルトで有効化可能
- パズル提案の禁止: 著作権上の問題により、外部からパズルのアイデアは受け付けない
- バグ報告: パズル公開から1時間以上経っていれば、すでに多くのユーザーが解いているため、バグの可能性は低い
- 問題が発生した場合は、まずsubredditで確認することが推奨される
- スピード競争かどうか: 素早い解答を目指すなら追加の練習と技術が必要だが、自分の目標に合った方法で参加することが重要
- イベント日数の変更: 10年間スケジュールを維持した後、運営者の時間的負担の軽減のため、月半ばで終了する形に変更
- グローバルリーダーボードの廃止: 過度な競争やDDoS攻撃、ユーザーストレスなどの問題により、10年後に廃止
- 代わりに読み取り専用のプライベートリーダーボード共有機能を提供
- AIの利用: パズルは人間の思考力向上を目的としているため、AIの利用は推奨されない
- 「代わりに運動をさせても本人は強くならない」という比喩で説明されている
- コンテンツ複製の禁止: Advent of Codeは無料で利用できるが、パズル本文や入力データの複製は禁止
クレジット (Credits)
- パズル、コード、デザイン: Eric Wastl
- ベータテスト: Ben Lucek, JP Burke, Aneurysm9, Andrew Skalski
- コミュニティマネージャー: Danielle Lucek, Aneurysm9
- 参加者: すべてのユーザー
法的告知 (Legal)
- Advent of Codeは米国登録商標であり、デザイン・文言・スタイル・コンセプトはすべて独占的資産
- パズルへのリンクや引用は自由に可能であり、商業的文脈でも許可される
- Advent of Codeは参加者の解答コードに対する著作権を主張しない
2件のコメント
去年も少し参加していましたが……本当に1年はあっという間ですね(涙)
Hacker Newsの意見
コンピュータサイエンスの背景がなくても参加できるという話を聞くたびに、実際には趣味プログラマーにとってはがっかりさせられることもあると感じる
「かなり先まで行ける」というのが1〜2問の簡単な問題を解く程度ならその通りだが、それ以上は簡単ではない
Advent of Codeは毎年12月のハイライトだ
グローバルリーダーボードがなくなったのは残念だが、理解はできる。今年は12日間だけなのも負担が減ってよい
「勝とう」とするのではなく、単純に問題解決の楽しさを味わうことを勧めたい
私は Advent of Code が本当に大好きだ
今年が12日間だけなのはむしろ歓迎だ。年末は現実の予定が多くて、去年は半分くらいしかできなかった
参加者たちに大きな感謝を伝えたい
今年初めて Advent of Code をやってみたが、本当に面白かった
Project Euler に似ているが、数学よりもプログラミング寄りだ
第1段階は簡単だが、第2段階は最適化されたアプローチを求められるので興味深い
パブリックリーダーボードをなくしたのは合理的だ
LLMの問題を抜きにしても、特定のアメリカの時間帯以外では競争が不可能だった
その代わり、世界全体でタイムゾーン別の解答率のような統計が見られたら面白そうだ
YouTubeでリアルタイムのコーディング動画を見る楽しさもあった
Advent of Code を毎年楽しみに待っている
リーダーボードにストレスを感じることなく、新しい言語を学んだり技術を磨く機会にしている
普段は自分でプロジェクトをブートストラップしたり DFS を実装したりすることはないので、こういうイベントはよい練習になる
だから普段はテスト作成やドキュメント化のような仕事でバランスを取っている
毎年、以前の問題を少しずつ改善しながら効率性と可読性を高める練習をしている
今年も Advent of Code が開催されてうれしい
FAQを読んでいて、入力データを公開してはいけないというルールがよく理解できなかった
パズル本文は分かるが、入力まで非公開でなければならないのは惜しい。それでも無料で楽しんでいる以上、尊重する
言語アンケート: Python と C++ が主に使われているが、非主流言語の中にも AoC によく合うものがある
どの言語がよいか共有してみようという提案だ
冗談だが、たまに Game Boy 向けの ASM で解いてみることもある。実際には Clojure や Python を使う
今年はバイトコードコンパイラを作っている。リーダーボードでは Go を使うが、コンパイル速度のおかげで 2022年 Day19 で1位になった
たとえば、無限リストを生成して条件を満たすまで走査するような形で解いている
each_cons,permutation,primeのようなメソッドが AoC に役立つあらかじめ 2D グリッドやパーサーユーティリティを用意しておくと、ずっと効率的だ
今年はアセンブリ(fasm) で挑戦してみるつもりだ
面白いかもしれないし苦しいかもしれないが、とにかく学ぶための過程だ
去年のAI自動化ブームの後でリーダーボードがなくなったようだ
残念だが避けられない判断に見える
どうせ競争は難しかったのだから、グローバルリーダーボードにはあまり意味がなかった