MATLAB EXPO 2024 Japanに参加しました.
そのイベント中に開催されたMATLABプログラミングコンテストに初参加し,優勝しました.
この記事では,MATLABプログラミングコンテストに関するお話と,その必勝法を紹介します.
MATLAB EXPO,MATLABとプログラミングコンテスト
MATLAB EXPOは,MathWorks Japanが主催し,東京お台場で毎年開催されるイベントです.
2024年は,5月30日に開催されました.
去年,ポスター発表者として参加したときの記事が参考になるかと思います.
MATLABは,プログラミング言語の1つです.
数値計算に強いプログラミング言語として有名で,多くの大学・政府・企業で活用されています.
MATLABは非常に人気の高いプログラミング言語ですが,他の言語と異なり,多くのケースで利用にお金がかかります.
そのため,多くのプログラミングコンテストでMATLABが利用できません.
一方,MATLABプログラミングコンテストは,MATLAB言語しか利用できません.
MATLABを得意とするユーザーが本領を発揮できる場が,MATLABプログラミングコンテストになります.
MATLABプログラミングコンテスト
MATLABプログラミングコンテスト(以下,コンテスト)は,MATLAB EXPO内で開催されます.
コンテスト開始時間は不明(10時?)ですが,終了時間は16時15分でした.
コンテストは,自分のPCではなく,会場に設置されたPCから参加します.
途中出場,途中退場可能ですが,休憩や中断は,できないと思ったほうが良いです.
設置してあるPCの数が少ないので,時間によっては参加が難しいかもしれません.
問題やコンテストの雰囲気は,2022年,2023年のMathWorks社員さんの記事が大変参考になります.
優勝者の行動
優勝者(自分)は,10時前に会場入りし,3件の基調講演を聴講しました.
そして,会場の展示を見て回った後,12時から14時半まで150分間コンテストに取り組みました.
立ったまま休憩なしで集中して取り組めるのは,これくらいの時間が限界だと思います.
150分ですべての問題を確認し,自分の知識内で短時間で解けそうな問題だけ解答しました.
問題を20問くらい解答したと思います.
最終的には2位と100点以上の差をつけて,206点を取って優勝しました.
ちなみに,去年の優勝者は290点,一昨年の優勝者は210点でした.
コンテスト必勝法
コンテストで優勝するには,コンテスト当日の行動が大事になります.
まず,コンテスト参加は,早ければ早いほど良いです.
そして,他の人も解けそうな簡単な問題から取り組み,最も短いコードを早く提出することが大切になります.これは,以下のルールがあるためです.
- 各問題ごとに、コンテスト参加者の中で最も短いコードで正答した人には、追加で5倍のポイントが付与されます(同じ短さだった場合は早い人優先)
問題に正解したときの点数Easy 1点,Medium 2点,Hard 4点に対して,5倍のボーナス点はとても大きいです.
早い者勝ちのボーナス点を多く獲得することが,コンテストに勝つために大事になります.
コンテストで優勝するためには,MATLABプログラミング知識も当然必要です.
自分の勉強法(コンテスト練習法)もここで公開します.
コンテスト練習法
まず,MathWorksアカウントを作成し,MATLABを実行できる環境を用意します.
MATLAB Onlineも悪くないですが,最新のMATLABデスクトップアプリをインストールして手元で実行できるようにしておくのがお勧めです.
次に,自己学習形式のオンラインコースで勉強をします.
自分は現在16コース修了していますが,コンテストの練習としては,MATLAB入門とMATLAB基礎に取り組むのが良いと思います.
MATLAB基礎は,Certified MATLAB Associate試験の勉強としても役に立ちます.
MATLAB基礎の修了,Certified MATLAB Associate試験の合格で,credlyのバッジを獲得できます.
AWSの資格などと同じく,自分のスキルのアピールに使えます.
最後に,Codyの問題をたくさん解きましょう.
Codyの採点形式は,コンテストと同じです.
また,文章が日本語と英語の違いがありますが,コンテストと同一の問題も掲載されています.
例えば,過去に出題されたフィナボッチ数列に関する問題は,問題12と同じです.
この問題に取り組み,黄金比と$\sqrt{5}$を利用するやり方を知っていれば,for文,再帰関数,行列演算のやり方しか分からない人より,コンテストで高得点が期待できます.
function f = fib(n)
f = round(1.61803^n / 2.236);
end
function f = fib(n)
f = [1 1];
for i = 3 : n
f(i) = f(i-2) + f(i-1);
end
f = f(n)
end
function f = fib(n)
if n <= 2
f = 1;
else
f = fib(n-2) + fib(n-1);
end
end
function f = fib(n)
f = [1 1; 1 0]^n;
f = f(2);
end
Codyには5千超の問題が掲載されています.
各自で自由に問題を作成・掲載できるため,その内容は増え続けています.
たくさん問題を解けば,それだけコンテスト優勝に近づくと思います.
記事執筆時の自分は,ランク929,問題解答数142,スコア2117,バッジ数16でした.
まとめ
コンテストで優勝するには,Codyの問題をたくさん解いて練習するのがbest.
コンテスト当日は,早い時間から参加し,コンテストの問題をたくさん解くのがbest.