今年も MATLAB EXPO に参加してきました.
例年通りプログラミングコンテストにも参加し,3連覇を成し遂げました.
この記事では,雑感と解けなかった1問の類題を考察します.
雑感
今年は会場がいつもの グランドニッコー東京 台場 から ザ・プリンスパークタワー東京 に変わった点も含め,いくつかの点が大きく変更になった印象です.
ペーパーレスが進んで紙の案内やMATLAB特製クリアファイルを頂けなかったのは残念ですが,昼食が全員に用意されていた点はかなり好印象です.
カツサンド美味しかったです.
![]() |
![]() |
|---|
プログラミングコンテスト会場を含む展示会場のオープンが11:30からということを知らなかったので,その点はもっと大々的にお知らせ頂きたかったです.
ただ,コンテスト時間が11:30~16:00までと短くなったのは良い対応だと思います.
コンテスト用PCがなかなか空かなかったこともあり,今年の自分のコンテスト参加時間は3時間くらいです.
コンテストは待ちが発生するくらいの人気コンテンツとなっているので,来年はもっとPCを用意頂けるとありがたいなと思いました.
コンテストは,難易度が高い問題が少し減った印象です.
得点も計算が変わり,より短い文字数で問題を解くことが重要になった印象です.
関数の入出力変数名が固定となりましたが,この点は公平性の観点から良い変化だと思いました.
コンテスト類題:任意文字列のソート
コンテストで自分が解けなかった問題の類題をここで解いてみます.
s="智智礼義仁義信義義智"のような,五常(仁、義、礼、智、信)を利用した任意の文字列が与えられる.
任意の入力sに対して,五常の順番で並び替えた結果を出力する関数を作成せよ.
出力例:"仁義義義義礼智智智信"
コンテストでは,自分は文字列を数値に変換して解こうと思ったのですが,良い感じの数値に変換できませんでした.
char("仁義礼智信")-'0' % '仁義礼智信'-'0'の方が良い
ans =
20113 32633 30988 26186 20401
また,コンテストではソート基準となる文字が多かったため,別の問題を解くことを優先し,for文で無理矢理対処するコードは書きませんでした.
自宅でゆっくり考えたとき,出てきたベスト解は以下になります.
function out = sort_gojo(s)
g='仁義礼智信';
out=repelem(g,arrayfun(@(c)count(s,c),g)); % 1st best
% [~,i]=ismember(char(s),g); out=g(sort(i)); % 2nd best
end
char,ismember,sortを利用する方法もありますが,
count,arrayfun,repelemを利用する方法の方が短いと思います.
意外と文字列ソート問題に適した組み込み関数が見つからず,工夫が必要という結論になりました.
コンテストでは,これ以外にも文字列を扱う問題があり,どれも苦戦しました.
数値計算だけではなく,文字列処理もしっかり覚えないと駄目ですね.
終わりに
何はともあれ,MATLABプログラミングコンテストを3連覇することができて,とても嬉しいです.
計算方法が変わってあまり参考になりませんが,得点も 206 (24年) → 305 (25年) → 368 (26年) と増加し,昨年を上回る点数が取れて良かったです.
ちなみに,MATLAB プログラミングコンテストと深い関わりがあるCodyですが,
去年よりランクを3つ落とし,44 / 176,196位でした.
1年で86問しか解いていませんでした.ダメダメですね.
機会を見つけて,MATLABに触れるように,積極的に動いてきたいと思います.
MATLABプログラミングコンテスト2025の記事
MATLABプログラミングコンテスト2024の記事



