2025年度(令和7年度)大学入学共通テストが行われました。今回から「情報Ⅰ」という新しい科目が追加になりました。
問題自体は本来ならば試験実施団体からDLできるようにすべきですが、なぜか解答しかなく、問題は下記予備校および提携の新聞社公式サイトからDL可能です。
河合塾→産経 https://www.sankei.com/article/20250116-MPM3FIGFKVBYTIS7QUO4USPWDE/ 文字が濃くて見やすい
代ゼミ→読売新聞 https://www.yomiuri.co.jp/nyushi/kyotsu/ 文字薄い
朝日新聞 https://www.asahi.com/edu/kyotsu-exam/shiken2025/day2.html
毎日新聞 https://mainichi.jp/exam/kyotsu-2025 余計な余白が少なく見やすい 解答も同梱
47NEWS https://www.47news.jp/culture/education/kyotsu-exam/2025
さて、件の「情報Ⅰ」は必ずしもコンピュータの問題ばかりではなく、国語や数学の力を問う問題もありました。つまり、予備知識がなくても解けるということです。その他は、コンピュータやネットワークの一般知識や、プログラミング的な発想(アルゴリズム)問う問題もありました。プログラミングそのものとしては、特定の言語によらない疑似言語の問題でした。イメージとしてはPythonが近いです。問題と解答は上記からDLできるので、問題文や模範解答の重複記述は避け、実行可能な実際のプログラミング言語に書き起こしたソースコードを書いてみます。
Pythonの場合(教科書的には半角スペース4個で字下げらしい)
nissuu = [4, 1, 3, 1, 3, 4, 2, 4, 3]
kougeihinsuu = 9
akibi = [1, 1, 1]
buinsuu = 3
for kougeihin in range(kougeihinsuu):
tantou = 0
for buin in range(1, buinsuu):
if akibi[buin] < akibi[tantou]:
tantou = buin
print(
"工芸品", kougeihin + 1, "…" ,
"部員", tantou + 1 , ":",
akibi[tantou], "日目~",
akibi[tantou] + nissuu[kougeihin] - 1, "日目"
)
akibi[tantou] += nissuu[kougeihin]
【実行結果】
工芸品 1 … 部員 1 : 1 日目~ 4 日目
工芸品 2 … 部員 2 : 1 日目~ 1 日目
工芸品 3 … 部員 3 : 1 日目~ 3 日目
工芸品 4 … 部員 2 : 2 日目~ 2 日目
工芸品 5 … 部員 2 : 3 日目~ 5 日目
工芸品 6 … 部員 3 : 4 日目~ 7 日目
工芸品 7 … 部員 1 : 5 日目~ 6 日目
工芸品 8 … 部員 2 : 6 日目~ 9 日目
工芸品 9 … 部員 1 : 7 日目~ 9 日目
C言語の場合(実行結果は同じため省略)
#include<stdio.h>
int main(){
int nissuu[] = {4, 1, 3, 1, 3, 4, 2, 4, 3};
int kougeihinsuu = 9;
int akibi[] = {1, 1, 1};
int buinsuu = 3;
int kougeihin;
int tantou;
int buin;
for(kougeihin = 0; kougeihin < kougeihinsuu; kougeihin++){
tantou = 0;
for(buin = 1; buin < buinsuu; buin++){
if(akibi[buin] < akibi[tantou]){
tantou = buin;
}
}
printf(
"工芸品%d: 部員%d: %d日目~%d日目\n",
kougeihin + 1,
tantou + 1,
akibi[tantou],
akibi[tantou] + nissuu[kougeihin] - 1
);
akibi[tantou] += nissuu[kougeihin];
}
return 0;
}
Javaの場合(java –enable-preview ファイル名 でコンパイルすら不要)
void main(String[] args){
int nissuu[] = {4, 1, 3, 1, 3, 4, 2, 4, 3};
int kougeihinsuu = 9;
int akibi[] = {1, 1, 1};
int buinsuu = 3;
int kougeihin;
int tantou;
int buin;
for(kougeihin = 0; kougeihin < kougeihinsuu; kougeihin++){
tantou = 0;
for(buin = 1; buin < buinsuu; buin++){
if(akibi[buin] < akibi[tantou]){
tantou = buin;
}
}
System.out.println(
"工芸品" + (kougeihin + 1) + "…" +
"部員" + (tantou + 1) + ":" +
akibi[tantou] + "日目~" +
(akibi[tantou] + nissuu[kougeihin] - 1) + "日目"
);
akibi[tantou] += nissuu[kougeihin];
}
}
JavaScriptの場合(別途HTMLも準備する必要がある)
function keisan(){
const nissuu = [4, 1, 3, 1, 3, 4, 2, 4, 3];
const kougeihinsuu = 9;
let akibi = [1, 1, 1];
const buinsuu = 3;
let moji = document.getElementById("moji");
for(let kougeihin = 0; kougeihin < kougeihinsuu; kougeihin++){
let tantou = 0;
for(let buin = 1; buin < buinsuu; buin++){
if(akibi[buin] < akibi[tantou]){
tantou = buin;
}
}
moji.insertAdjacentHTML(
"beforebegin",
"工芸品" + (kougeihin + 1) + ": " +
"部員" + (tantou + 1) + ": " +
akibi[tantou] + "日目~" +
(akibi[tantou] + nissuu[kougeihin] - 1) + "日目<br>"
);
akibi[tantou] += nissuu[kougeihin]
}
}
結果的にはどれも仕様通り最終行に「工芸品 9 … 部員 1 : 7 日目~ 9 日目」が出力されました。途中の出力があっているかは不明でしたが、X(旧Twitter)で別な言語で同じような検証をしている同業の方がいて、途中の出力が全く同じであったことからコード自体は正しいものと思われます。
また、多くのプログラミング言語では仕様上配列の添え字は0から始まります。大学入学共通テストでは配列の添え字が1から始まるとの注釈があったので、実装する時は読み替える必要があります。