■はじめに

 本ページでは、大学入試共通テスト「情報」におけるプログラミング言語(大学入学共通テスト手順記述標準言語:DNCL)をもとに、授業で活用できるPythonおよびJavaScriptによる実装例を紹介しています。これらの事例は、共通テストの出題形式を理解するとともに、生徒がアルゴリズムの考え方やプログラムの動作を具体的に体験できるよう工夫したものです。

 ※大学入学共通テスト手順記述標準言語(DNCL)は、著作権法第35条(教育目的の複製)に基づき、独立法人大学入試センターの許諾を得て掲載しています。

■授業での活用例

  • 大学入試共通テスト問題の解法を、実際にプログラムで検証する演習として。
  • DNCLとPython/JavaScriptの対応関係を比較する教材として。
  • 生徒が自らアルゴリズムを改良・発展させる探究活動の出発点として。

     ※今後も、共通テストで求められる論理的思考力・プログラミング的思考を育成する教材として、事例を追加していく予定です。授業実践の一助としてご活用ください。

    ①サンプル問題(令和3年3月公表) 第2問 問1 P8

    大学入学共通テスト手順記述標準言語(DNCL)

    (01) Tomei = ["A党", "B党", "C党", "D党"]
    (02) Tokuhyo = [1200, 660, 1440, 180]
    (03) sousuu = 0
    (04) giseki = 6
    (05) m を 0 から 3 まで 1 ずつ増やしながら繰り返す:
    (06)  ⎿ sousuu = sousuu + Tokuhyo[m]
    (07) kizyunsuu = sousuu / giseki
    (08) 表示する("基準得票数:", kizyunsuu )
    (09) 表示する("比例配分")
    (10) m を 0 から 3 まで 1 ずつ増やしながら繰り返す:
    (11)  ⎿ 表示する(Tomei[m], ":", Tokuhyo[m] / kizyunsuu)
    

    出典:独立行政法人大学入試センター「大学入学共通テスト 情報 サンプル問題(令和3年3月公表)」〔独立行政法人大学入試センターの許諾を得て掲載〕

    比例代表選挙の議席数

     この問題は、得票数に基づく比例代表制の議席配分を題材にしたプログラムであり、情報科の授業で扱う「アルゴリズム」「繰り返し処理」「配列操作」「数値の丸め処理」などの要素が盛り込まれている。

    内容の概要

      • 政党ごとの得票数(配列)をもとに、議席数を比例配分する。

      • 配分の際に小数点が生じるため、「切り捨て」「四捨五入」「切り上げ」などの処理が議論される。

      • 実際の議席数と計算結果のズレをどう調整するかが課題となる。

    ②サンプル問題(令和3年3月公表) 第3問 問3 P11

    大学入学共通テスト手順記述標準言語(DNCL)

    (01) Tomei = ["A党", "B党", "C党", "D党"]
    (02) Tokuhyo = [1200, 660, 1440, 180]
    (03) Tosen = [0, 0, 0, 0]
    (04) tosenkei = 0
    (05) giseki = 6
    (06) m を 0 から 3 まで 1 ずつ増やしながら繰り返す:
    (07)  ⎿ Hikaku[m] = Tokuhyo[m]
    (08) tosenkei < giseki の間繰り返す:
    (09)  | max = 0
    (10)  | i を 0 から 3 まで 1 ずつ増やしながら繰り返す:
    (11)  |  | もし max < Hikaku[i] ならば:
    (12)  |  |  | max = Hikaku[i]
    (13)  |  ⎿  ⎿ maxi = i
    (14)  | Tosen[maxi] = Tosen[maxi] + 1
    (15)  | tosenkei = tosenkei + 1
    (16)  ⎿ Hikaku[maxi] = 切り捨て(Tokuhyo[maxi] / tosenkei)
    (17) k を 0 から 3 まで 1 ずつ増やしながら繰り返す:
    (18)  ⎿ 表示する(Tomei[k], ":", Tosen[k], "名")
    

    出典:独立行政法人大学入試センター「大学入学共通テスト 情報 サンプル問題(令和3年3月公表)」〔独立行政法人大学入試センターの許諾を得て掲載〕

    比例代表選挙の議席数

     この問題は、最大値探索と比例配分による議席決定アルゴリズムを題材にしたプログラムで、情報科で扱う「繰り返し処理」「条件分岐」「配列操作」「関数の活用」などが含まれている。

    内容の概要

      • 各政党の得票数に応じて、議席を順次割り当てる。

      • 最大得票の政党に議席を与え、得票数を更新(割り算+切り捨て)して次の議席配分に備える。

      • 議席数が決まるまで繰り返す。

      • 候補者数の制約も後半で導入され、現実的な制約条件への対応が求められる。

    ③サンプル問題(令和3年3月公表) 第3問 問3 P12

    大学入学共通テスト手順記述標準言語(DNCL)

    (01) Tomei = ["A党", "B党", "C党", "D党"]
    (02) Tokuhyo = [1200, 660, 1440, 180]
    (03) Koho = [5, 4, 2, 3]
    (04) Tosen = [0, 0, 0, 0]
    (05) tosenkei = 0
    (06) giseki = 6
    (07) m を 0 から 3 まで 1 ずつ増やしながら繰り返す:
    (08)  ⎿ Hikaku[m] = Tokuhyo[m]
    (09) tosenkei < giseki の間繰り返す:
    (10)  | max = 0
    (11)  | i を 0 から 3 まで 1 ずつ増やしながら繰り返す:
    (12)  |  | もし max < Hikaku[i] and Koho[i] >= Tosen[i] + 1 ならば:
    (13)  |  |  | max = Hikaku[i]
    (14)  |  ⎿  ⎿ maxi = i
    (15)  | Tosen[maxi] = Tosen[maxi] + 1
    (16)  | tosenkei = tosenkei + 1
    (17)  ⎿ Hikaku[maxi] = 切り捨て(Tokuhyo[maxi] / tosenkei)
    (18) k を 0 から 3 まで 1 ずつ増やしながら繰り返す:
    (19)  ⎿ 表示する(Tomei[k], ":", Tosen[k], "名")
    

    出典:独立行政法人大学入試センター「大学入学共通テスト 情報 サンプル問題(令和3年3月公表)」〔独立行政法人大学入試センターの許諾を得て掲載〕

    比例代表選挙の議席数

     この問題では、前半で構築した議席配分アルゴリズムに対して、以下のような現実的な制約と課題が追加されている。

    内容の概要

      • 各政党の候補者数を格納した配列 Koho を導入。

      • 議席配分時に、候補者数が足りない場合はその政党に議席を与えられない。その場合、次に得票数が多い政党に議席を繰り上げて配分する。

      • 得票数が同じ政党が複数ある場合、添字順で議席が割り当てられる。

    ④試作問題(令和3年3月公表)※令和4年12月23日一部修正 第3問 問2 P22

    大学入学共通テスト手順記述標準言語(DNCL)

    (1) Kouka = [1,5,10,50,100]
    (2) kingaku = 46
    (3) maisu = 0, nokori = kingaku
    (4) i を 4 から 0 まで 1 ずつ減らしながら繰り返す:
    (5)  | maisu = maisu + nokori ÷ Kouka[i]
    (6)  ⎿ nokori = nokori % Kouka[i]
    (7) 表示する(maisu)
    

    出典:独立行政法人大学入試センター「大学入学共通テスト 情報 試作問題(令和3年3月公表)※令和4年12月23日一部修正」〔独立行政法人大学入試センターの許諾を得て掲載〕

    最小交換硬貨枚数

     この問題は、硬貨の組み合わせによって目標金額を達成する最小枚数の計算をテーマにしたアルゴリズム問題です。情報科で扱う「繰り返し処理」「配列操作」「整数演算」などの要素が含まれている。

    内容の概要

      • 目標金額(例:46円)を、与えられた硬貨の種類(1円, 5円, 10円, 50円, 100円)で支払う。

      • 最小枚数で支払うために、高額硬貨から順に使うという方法を採用している。

      • 各硬貨の枚数を計算し、残りの金額を更新していき、最終的に必要な硬貨の合計枚数を表示する。

    ⑤試作問題(令和3年3月公表)※令和4年12月23日一部修正 第3問 問2 P24

    大学入学共通テスト手順記述標準言語(DNCL)

    (1) kakaku = 46
    (2) min_maisu = 100
    (3) tsuri を 0 から 99 まで 1 ずつ増やしながら繰り返す:
    (4)  | shiharai = kakaku + tsuri
    (5)  | maisu = 枚数(shiharai) + 枚数(tsuri)
    (6)  | もし maisu < min_maisu ならば:
    (7)  ⎿  ⎿ min_maisu = maisu
    (8) 表示する(min_maisu)
    

    出典:独立行政法人大学入試センター「大学入学共通テスト 情報 試作問題(令和3年3月公表)※令和4年12月23日一部修正」〔独立行政法人大学入試センターの許諾を得て掲載〕

    最小交換硬貨枚数

     この問題は、支払い金額と釣り銭の組み合わせによって最小の硬貨枚数を求めるという、現実的かつアルゴリズム的な課題を扱っている。上記④と比べ、支払い金額と釣り銭の両方を考慮するという点で、より複雑な構造となっている。

    内容の概要

      • 目標金額(例:46円)に対して、支払い金額(例:50円)と釣り銭(例:4円)を組み合わせて、硬貨の枚数が最小になるようにする。

      • 支払い金額と釣り銭の両方に対して、それぞれ必要な硬貨枚数を計算し、その合計が最小になるような釣り銭の金額を探索する。

      • ループで釣り銭の候補を0円から99円まで試し、最小枚数を更新していく。

    ⑥R7_大学入試共通テスト(本試験) 第3問 問2

    大学入学共通テスト手順記述標準言語(DNCL)

    (01) Akibi = [5, 3, 4]
    (02) buinsu = 3
    (03) tantou = 1
    (04) buin を 2 から buinsu まで 1 ずつ増やしながら繰り返す:
    (05)  | もし Akibi[buin] < Akibi[tantou] ならば:
    (06)  ⎿  ⎿ tantou = buin
    (07) 表示する("次の工芸品の担当は部員", tantou, "です。")
    

    出典:独立行政法人大学入試センター「大学入学共通テスト 情報 本試験(令和7年度)」〔独立行政法人大学入試センターの許諾を得て掲載〕

    工芸品を製作する担当の割当て

     この問題は、工芸品の担当部員を決定するアルゴリズムを題材にしており、情報科で扱う「配列操作」「繰り返し処理」「条件分岐」「変数の更新」などの基本的なプログラミング要素が含まれています。

    内容の概要

      • 配列 Akibi に各部員が担当した工芸品の数が格納されている。

      • 変数 tantou に、次の工芸品を担当する部員番号を代入する。

      • 担当回数が最も少ない部員を選ぶため、Akibi の値を比較して更新する。

      • 部員数は変数 buinsu によって管理され、柔軟に対応可能である。