昨今、AIのベンチマークとして数学オリンピックの難問を解いたや著名な論文サイトに掲載されたなどがある
その1つとして競技プログラミングでの難解問題を解けるかという指標があった
コーディングにおいてただ実装するだけでなく、最適なアルゴリズムを計画して実装できるのはとても重要な指標となる
競技プログラミングとは、出題された問題に対して、最適なプログラムを作成して提出するというもの
何問解けたか、より難しい問題を解けたか、他の人より早く提出出来たかという点で競い合う
著名なサイトとしては今回のコンテストの主催者のAtCoderやCodeforcesなどがある
世界大会ではIOI(国際情報オリンピック)、ICPCなどが開催されている
AtCoder World Tour Finalsについて
AtCoderにおいて1年間のコンテスト成績が優秀だった上位12名を選出し、最難関コンテストが開催される
参加者はもちろんとても優秀で、IOIでの金メダル・1位の人も多く参加している
そんな世界大会がちょうど昨日今日開催されていたので急遽紹介記事を書いている
AIの参戦
2025年にはOpenAIがAWTFヒューリスティック部門に初参加した
今年もヒューリスティック部門に参加し、アルゴリズム部門にも初参加する
アルゴリズム部門とは、問題に対して明確な正解が定まっておりその解法を導き出し実装する速度を競う
ヒューリスティック部門とは、問題に対して明確な正解が定まっておらず、様々な解法でより高いスコアを出すことを競う
2025年の所感
この時は人間が1位、AIが2位を取って話題となった
コンテスト時間が10時間と短く、もっと長ければ人間が有利になるだろうという見解
回答もAIは妥当なアイディアで調整が優秀だった
人間の方が奇抜なアイディアがあった
2026年の所感
AIが圧倒的に強くなった
去年から初速は早かったが、今年は常にトップを走っていた
ヒューリスティック部門は無難に優秀な回答を出し、人間1位に4倍のスコアを出し圧倒的大差で勝利
下位モデルの5.6+Codexでも人間1位と並んだ
ヒューリスティック部門ではAIの使用が許可されており、昨今話題のClaude Fable 5を使っていた参加者もいたが及ばなかったようだ
アルゴリズム部門は
OpenAIが6時間かけて全問正解
全員解けていなかったC,D,Eを完答(その後人間1位がDを正解)
3時間などの長時間をかけて思考することでちゃんと改善していくことが判明した
アルゴリズム部門の得点解説
今回は
A:900点、B:900点、C:1500点、D:2500点、E:2500点
という配分だった
私はpaizaのスキルチェックでSランクを獲得できたが、AtCoderでは300点を取れる程度だ
競技プログラミングもといAtCoderにおける各スコアの解説を米田(E869120)さんが行っているので引用
100点: プログラミングの基礎を一通り学べば解ける。
200点: 数十行にわたる、ある程度複雑なプログラムを書く必要がある。
300点: 単純な方法ではプログラムの計算・実行に時間がかかり、不正解になってしまう。それを乗り越えるには、アルゴリズムというものを知り、使いこなす必要がある。
400点: そのアルゴリズムを複雑に組み合わせて解く必要がある。加えて、発想やひらめきが必要になってくる。
500点: 情報系の東大生や、優秀な IT エンジニアでも解けない難問。そこから先は、競技プログラミングに特化した練習をする必要がある。
600点: 日本全体を見渡しても、時間内に解ける人材は 100 人程度。
700点: 競技プログラミングのためだけに数千から一万時間の練習を重ね、概ね世界トップ 100 に達すると赤コーダーという称号が取れる。その赤コーダーでも解けないことがある。
800-900点: 赤コーダーでも時間内に解けるか半々。
1000点: その赤コーダーでも時間内に解けることは少ない。
1500点: 論文レベルの問題。プロの研究者が数ヶ月かけて考えるレベルの難易度。
1800点: 基本的に、AtCoder でそれ以上の難易度の問題は出題されない。
2000点: 場合によっては、アルゴリズムのトップ国際会議に採択される論文と同程度の難易度。
OpenAIはそれらの問題を完答した
本当に世界最高峰の頭脳だと言えるだろう
ヒューリスティック部門の問題解説
簡単に要約すると、光量1の光が照射されるので、光を半分に分光したり遮断することで外に出す光量を指定された値にする
また複数ターンがあり、それぞれ違う光量が求められるのでその盤面から光量を調整する
しかし操作できる回数も指定されるのでなるべく近い値になるようにする
N×Nマスの盤面があり、それぞれに物体を設置できる
吸収ブロック: 光線が吸収ブロックに入った場合、その光線は消滅する。
反射板: 光線が反射板に入った場合、光線は 90 度向きを変えて反射される。
分光板: 光線が分光板に入った場合、鮮明度が正なら、光線は直進する光線と、分光板と同じ向きの反射板で反射された場合と同じ方向へ進む光線の 2 本に分かれる。分かれた後の 2 本の光線の強さは、それぞれ入射した光線の半分である
出力: 光線がグリッドの外へ出た場合、その光線は出力されたものとみなす。グリッドのどの辺から外へ出てもよい。1 回の発射において、グリッドの外へ出たすべての光線の強さの合計を出力値とする

実線は反射板、破線は分光板、黒マスは吸収ブロックを表す。
上部から入射した光は、半分がそのままグリッドの外へ出力され、残りの半分が右下のループに入る。 ループに入った光は、その半分が吸収され、1/4 がグリッドの外へ出力され、残りの 1/4 が再びループに入る。 これを繰り返すことで、最終的に出力値は約2/3となる。

ヒューリスティック部門の回答解説
2進数判定
2進数判定はとても親しみやすいだろう
分光板を一直線に置いて光を通す
そうすることで1個目は0.5、2個目は0.25の光が出力される
一方向を吸収ブロック、もう一方を出力とする
分光板の向きを変えることで+0.5するか、+0.25するか…を調節できる
直観的で分かりやすい解法
弱点としては操作回数が多いためそこまで精度を高められない
bit反転
2進数判定を応用して操作回数を減らす
1列に並んでいる分光板は、前から照射しても後ろから照射しても同じ性質を持っている
そのためその2パターンにおいてどちらがより操作回数を少なく良いスコアを出せるかを検討することで得点を高められる
それらを3面用意すれば6方向から照射できるためより良いスコアが出せる確率が上がる
3進数判定
問題解説の画像にある通りの構造を連続して作ると3進数判定を行うことができる
カオス調整
光を大量に分散させて光量の少ない光を大量のマスに出す方式
こちらは調整次第で少ない手で絶妙なスコアを出せる可能性があるが、外れ値の場合ペナルティが大きい
物体を設置するだけで移動・除去する手間を無くせばさらに手数を下げることができる
このように1手で様々な値を取れる方式の方が様々な調整が行える
以上、AWTFの紹介でした
投稿者プロフィール
最新の投稿
【AI】2026年7月9日AWTF2026の紹介
【React】2026年4月20日Reactの学習と今後の学習方法について
【AI】2025年12月26日RAG改良手法の学習
Python2025年12月25日StreamlitでRAGを作ってみた




























