ICFPC2026参加記:AIを使い倒して総合優勝しました!
こんにちは、Digital Experts でソフトウェアエンジニアをしている仲吉です! チーム「DIgital Experts」で ICFPC(ICFP Programming Contest) というプログラミングコンテストに参加し、Lightning Round と総合の両方で1位を獲得することができました!メンバーは弊社と丸紅の社員8名、そしてインターン生7名の計15名です。コンテストはオンライン開催ですが、私たちは一丸となって取り組むために温泉のある宿泊施設に集まりました。 Digital Experts として初めて参加した昨年は全体で11位に終わり(参加記)、情報共有の意識付けや、シミュレータなどの環境整備が足りないといった反省点が多く残りました。今年はその課題を個人の頑張りではなく仕組みで解決しようと考え、AIが自律的に情報を共有し、解を作って試せる環境を整えたうえで、誰がどの環境整備に取り組むのかもチーム内で連絡するようにしました。昨年と比べてAIの性能が大きく上がっていたこともあり、この仕組みでAIを効果的に活用できたことが優勝につながったと考えています。 本記事では、AIハーネスの構築や人間とAIの役割分担などを含め、コンテストにどのように取り組んだのかをより具体的にご紹介します! ICFPCとは ICFPC(ICFP Programming Contest)は、関数型プログラミングの国際会議 ICFP に合わせて開催されるプログラミングコンテストです。 競技時間は72時間あり、最初の24時間の成績で競う Lightning Round も設けられています。 今年は日本時間で7月24日(金)21時から7月27日(月)21時までの開催でした。 順位表には凍結期間があり、Lightning Round と本戦のそれぞれ終了2時間前から、公式順位表に新しい提出の結果が反映されなくなります。 Lightning Round の凍結は終了2時間後に解除されますが、本戦の最終結果は後日の発表まで分かりません。 そのため、凍結中は他のチームがどこまで改善しているかを見られないまま、最後まで改善を続けることになります。 関数型プログラミングの会議に関連する大会ですが、使うプログラミング言語は自由です。 チームの人数にも上限がなく、今年の公式ルールでは AI エージェントを含むツールの利用も認められています。 毎年少し変わった問題が出題され、アルゴリズムを考えるだけでなく、仕様を理解したり、実験用のツールを作ったりする必要があります。 途中で新しい問題やルールが追加されることもあるため、作った解やツールを使いながら、新しい問題にも対応していきます。単に Lightning Round で勝つための考察や作業だけをしていると、新しい問題に太刀打ちできなくなることもありえます。 コンテストで勝つために必要なことをちゃんと洗い出してからチームで分担して進めると効果的なのも、このコンテストのおもしろいところです! 問題概要 今年のテーマは、Littleman という2次元のプログラミング言語でした。 文字を格子状に並べた盤面に「小人」を置くと、小人が盤面を歩きながら、その場所の命令を実行します。 1ステップは tick と呼ばれ、複数の小人が同時に動きます。 小人は両手とリュック合計3つの整数を持てます。 盤面には壁で囲まれた部屋があり、部屋同士はパイプでつながっています。 パイプを使うと数値を送受信でき、各部屋にいる小人同士はパイプを使って通信を行います。 計算の手順を考えるだけでなく、小人がどこを通るか、どの部屋にデータを送るかまでプログラムとして設計する必要があります。また、パイプをキューのように扱ったりと工夫できる部分もたくさんあります。 下の画像は公式シミュレータで Triangle の解を実行した様子で、赤い「@」が小人です。 小人は下段の左端から右へ進み、入力された数を $n$ として $n^2 + n$ を計算します。 右端で上に曲がり、今度は上段を左へ進みながら2で割り、s 命令で答えを出力パイプへ送ります。 つまり、このプログラムは $n(n+1)/2$ を直接計算しています。 ...