はじめに
この記事は 共通テスト手順記述標準言語 (DNCL) Advent Calendar 2025 の15日目の記事です。
DNCLを使って1次元配列の座標圧縮をします。
座標圧縮とは、配列の値を小さい順に連続する整数に置き換える操作です。
例えば {50, 10, 20, 50, 10} は {2, 0, 1, 2, 0} に変換されます。
詳しくは下の記事をご覧ください。
座標圧縮
関数 ソート(c,n)を
| iを0からn-2まで1ずつ増やしながら
| | jを 0から n - 2 - iまで1ずつ増やしながら
| | | もし c[j] > c[j+1]ならば
| | | | temp ← c[j]
| | | | c[j] ← c[j+1]
| | | | c[j+1] ← temp
| | | を実行する
| | を繰り返す
| を繰り返す
と定義する
関数 重複削除(c,n)を
| d ← c[0]
| d_size ← 1
| iを1から n - 1 まで1ずつ増やしながら
| | もしc[i] != d[d_size - 1]ならば
| | | d[d_size] ← c[i]
| | | d_size を 1増やす
| | を実行する
| を繰り返す
| d, d_size を返す
と定義する
moto ← {50, 10, 20, 50, 10}
n ← 5
ans ← {0, 0, 0, 0, 0}
c ← ソート(moto, n)
d, d_size ← 重複削除(c, n)
iを0から n - 1 まで1ずつ増やしながら
| jを0から d_size - 1 まで1ずつ増やしながら
| | もし moto[i] = d[j]ならば
| | | ans[i] ← j
| | を実行する
| を繰り返す
を繰り返す
ansを表示する