2024年3月24日、半導体製造装置メーカーであるディスコの東京本社にて、同社とディスカバリー・ジャパンが共同開催するプログラミングコンテスト「DISCO Presents ディスカバリーチャンネル コードコンテスト2024」(DDCC 2024)の本戦が行われた。

  • ディスコ主催のプログラミングコンテスト「DDCC 2024」が開催された

    ディスコ主催のプログラミングコンテスト「DDCC 2024」がディスコ本社にて開催された

プログラミングを競う大会でありながら、作成したプログラムを装置へと実装し、その制御の正確性によって順位が決定される「装置実装問題」を最大の特徴とする同大会では、データだけでなく“実物の動き”を観ながら対応する能力が求められる。半導体製造装置を生業とするディスコが、なぜこうしたプログラミングコンテストを実施するのか。そこには、同社が求めるエンジニアへの想いが込められていた。

29名が1台の装置を舞台にプログラミングで勝負

季節外れの寒空となった3月24日、東京都大田区のディスコ本社には、朝から続々と本戦出場者が到着していた。138名の申し込みがあった予選参加者の中から、新卒枠(25卒/26卒)から20名、一般枠(社会人&学生)から10名が予選を通過。1名の欠席者を除く29名が本選に参加した。

  • 29名の参加者が会場に集まった

    ディスコ本社にはプログラミングコンテストで好成績を収める29名の猛者たちが集まっていた

DDCC 2024で戦いの舞台となったのは、7つの穴と4つの障害物が並んだステージが設置された1台の装置。ステージ端からボールを射出し、狙った穴へとボールを入れることでスコアを獲得でき、その合計点によって勝負が決される。

同装置は、3点の高さの変化によるステージの傾き、ボールを送り出す射出地点の角度、そしてステージ上の障害物の角度が調整可能。これらのパラメータを操作してボールを狙った穴へと届けることが求められ、ステージの傾きや穴の難易度によって獲得できる得点が変わる。

  • DDCC 2024で出題された装置

    DDCC 2024で出題された装置。画面上部の機構からボールが射出され、ステージ上の穴に入ると得点になる

なお今大会は、ソフトウェア内の装置でプログラムを動作させた際の得点を競う“シミュレータ問題”(60分)、実際の装置を動かすためのプログラムを書き上げる“実機問題”(30分)、提出したプログラムが実際の装置でどのような挙動となるか確認し、プログラムへと修正を反映させる2回の“トライアル”(各90分)で構成される。また、シミュレータ問題の成績が高い参加者から順にトライアルを行えるため、実機での挙動を反映させる時間が長く、比較的有利になる。

午前はシミュレータ上での最適解を探る

大会は、シミュレータ問題から幕を開けた。参加者はまず、PC上で出題された課題に着手。60分をかけ、シミュレータ上でより多くの得点が獲得できるプログラムを黙々と構築していく。

  • プログラミングに取り組む参加者たち

    参加者たちは黙々とプログラミングに取り組んでいた

ディスコの担当者によれば、DDCCの参加者は非常にレベルが高く、決勝大会の30人に残る実力ともなると、ディスコ社内のトップエンジニアに勝るとも劣らないプログラミング能力を備えているという。実際に多くのプログラミングコンテストで顔を合わせている面々も少なくないようで、60分のシミュレータ問題を解き終えた参加者たちの中には、休憩中に会話を交わしている姿も見られた。

  • 会話を交わす参加者も

    休憩中には会話を交わす参加者も多くいた

続く実機問題では、シミュレータ上での挙動を参考にしながら、次に迎えるトライアルで実機を動かすためのプログラムを構築していく。シミュレータでは、実際の装置ならではのわずかなブレや抵抗(摩擦・空気抵抗)はおろか、ステージ上の障害物の大きさなども考慮されていないとのこと。それらのさまざまな変数を考慮した上で、実機でのハイスコアを目指す必要がある。こうした物理的な変化への対応力が問われるのが、DDCCの特徴である。

30分をかけ1回目のトライアルのためのプログラムを提出した参加者たち。終了後は会場中央に設置された問題の装置に興味を示す人も多く、穴の形状や障害物のサイズなどを観察しながら談笑する光景もあった。

  • 装置の摩擦や穴の形状が気になるようだ

    トライアルを前にして、装置の摩擦や穴の形状が気になるようだった

トライアルではシミュレーションと実機の誤差が明らかに

昼食休憩をはさんで、1回目のトライアルが開始した。シミュレータ問題の成績上位者、つまり“物理条件が影響しなければ”高い得点を獲得できる順番で、実際の装置にプログラムを反映した際の挙動を確認していく。

実機での挙動を見ていると、参加者たちが苦戦している様子がうかがえた。ボールの射出地点から近い穴にはボールが入るのだが、少し遠くなるだけでまるで狙い通りにいかなくなるのである。狙う距離が遠くなるほど、摩擦などの抵抗は大きくなりシミュレーションとの誤差は広がる。また、障害物に弾かれてステージ上に滞留したボールに射出された別のボールが当たってしまうなど、シミュレーションでは想定が難しい課題が表出していた。

  • ステージ上にボールが滞留するなどの課題も

    ステージ上にボールが滞留するなど、実機を動かした場合ならではの課題も表出していた

だがトライアルの中には、1つの穴を狙う中でもステージの傾け方や射出の角度を複数試し、最適な形を探っているように見られる参加者もいた。その中からハイスコアにつながる選択肢を見つけ出し、限られた時間でプログラムへと反映できるのか。実機の挙動を見てソフトウェア側で修正するという、ディスコのような機械メーカーのソフトエンジニアに不可欠な能力が問われるのである。

また今大会の難しさは、トライアルが2回しか行えないこと。1度目のトライアルで見えた課題をプログラムへと反映し、2度目の試行でその結果を見ることはできるが、それ以降は実機の動きを見ながら試すことができない。2度の装置の挙動を見たうえで、論理的に導いた最適解に加え、ある程度の“勘”が求められることも、DDCCの特徴だ。

2回のトライアルを終えた参加者たちは、入力したプログラムと装置の挙動とを照らし合わせながら、最後の仕上げに入る。制限時間の終盤には手を休ませている人もいれば、時間いっぱいまでキーボードを叩く姿も。果たしてどういった結果になるのか、その行方はファイナルへと委ねられた。

  • トライアルの映像と見比べながらの試行錯誤

    トライアルの映像と見比べながら、最適なプログラムを構成するため試行錯誤が続けられた