2025年共通テスト情報Ⅰ第3問コード

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から始まるとの注釈があったので、実装する時は読み替える必要があります。


分類:

記載日

投稿者: