4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MATLAB EXPO 2025 Japanに参加しました.
そのイベント中に開催されたMATLABプログラミングコンテストに参加し,今年も優勝しました.
250529155542790.JPG
(こちらは途中で撮った写真です.最終スコアの写真をちゃんと撮っていませんでした)

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

これを記念して,この記事ではMATLABの競技テクニックを3つ紹介します.

1. 行ベクトルと列ベクトルを利用しよう

MATLABは,線型代数学の行ベクトルと列ベクトルが標準で搭載されています.

  • 行ベクトル:数を横に並べたもの. $(1,2,3)$など.
    1:9 ⇒ $(1,2,\dots,9)$の行ベクトルが作成される.

  • 行ベクトル:数を縦に並べたもの. $\left(~\begin{matrix}1\cr2\cr3\end{matrix}~\right)$など.
    (1:9)' ⇒ $(1,2,\dots,9)^T$ ⇒ $\left(~\begin{matrix}1\cr2\cr\vdots\cr9\end{matrix}~\right)$の列ベクトルが作成される.

以上を踏まえると,以下の2問がスマートに解けます.

問1: 自然数$n$が与えられる.$n\times n$の九九表(掛け算の表)を出力せよ.
  表の左上は$1\times 1$の結果,表の右下は$n\times n$の結果とせよ.

問2: 鉛筆は1本30円,消しゴムは1個50円,ノート1冊100円で売られている.
  $x=($鉛筆の本数,消しゴムの数,ノートの数$)$ が入力として与えられた時,
  その合計金額を求めよ.

2. 論理インデックスを利用しよう

MATLABは,logical配列を論理インデックスとして利用できます.
これにより,論理インデックスが1(true)の配列要素を取得できます.

前提条件:      x = 1:5 ⇒ x = [1 2 3 4 5]
logical配列の作成:  x > 2  ⇒ [0 0 1 1 1]
論理インデックス利用:x(x > 2)[3 4 5]

以上を踏まえると,以下の2問がスマートに解けます.

問3: 整数の行列Aが与えられる.A内の正の値をすべて出力せよ.

問4: 整数の行列Aが与えられる.A内で0を除いた値の合計を出力せよ.

3. 変換を活用しよう

MATLABは,num2strstr2num (str2double)で 数値 ⇔ 文字列 の変換ができます.
また,'1234'-'0'[1 2 3 4]のように,文字列から0を引くことで,各文字が対応する数値のベクトルを得られます.(文字もASCIIコードとして扱われるため)

以上を踏まえると,以下の2問がスマートに解けます.

問5: 6桁の自然数$x$が与えられる.各桁の和を出力せよ.

問6: 6桁の自然数$x$が与えられる.$x$を並び替えて出来る最大の値を出力せよ.

4. 解答例

問1: (1:n)'*(1:n) 
問2: [30 50 100]*x' 
問3: A(A>0) 
問4: sum(A(A~=0)) 
問5: sum(num2str(x)-'0') 
問6: str2num(sort(num2str(x),'descend'))str2num(flip(sort(num2str(x)))) など

終わりに

この記事では,MATLAB Codyとプログラミングコンテストで役に立つ競技テクニックを3つ紹介しました.

記事執筆時の自分は,ランク41,問題解答数1630,スコア20816,バッジ数58でした.

image.png
1年前と比較して,かなり成長していますね.
この勢いで,まずは日本人1位を目指して頑張ります.

4
0
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
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?