3
1

MATLABプログラミングコンテスト必勝法

Last updated at Posted at 2024-05-31

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分ですべての問題を確認し,自分の知識内で短時間で解けそうな問題だけ解答しました.

1000000855 (1).jpg

問題を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の資格などと同じく,自分のスキルのアピールに使えます.

image.png

最後に,Codyの問題をたくさん解きましょう.
Codyの採点形式は,コンテストと同じです.
また,文章が日本語と英語の違いがありますが,コンテストと同一の問題も掲載されています.

例えば,過去に出題されたフィナボッチ数列に関する問題は,問題12と同じです.
この問題に取り組み,黄金比と$\sqrt{5}$を利用するやり方を知っていれば,for文,再帰関数,行列演算のやり方しか分からない人より,コンテストで高得点が期待できます.

黄金比と$\sqrt{5}$
function f = fib(n)
    f = round(1.61803^n / 2.236);
end
for文
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千超の問題が掲載されています.
各自で自由に問題を作成・掲載できるため,その内容は増え続けています.
たくさん問題を解けば,それだけコンテスト優勝に近づくと思います.

image.png
記事執筆時の自分は,ランク929,問題解答数142,スコア2117,バッジ数16でした.

まとめ

コンテストで優勝するには,Codyの問題をたくさん解いて練習するのがbest.
コンテスト当日は,早い時間から参加し,コンテストの問題をたくさん解くのがbest.

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1