【共通テスト 2025】情報Ⅰ のコードをRPGで書くと

## 共通テストで情報Ⅰが新たに
2025年の共通テストから新たに「情報Ⅰ」が追加されて、興味がてら会社のみんなでやってみました。
勝手に想像していたのは、暗記問題やプログラミングだったのですが、意外や暗記問題などは少なく、文章や資料の読解に重きをおいたり、難しくない数学よりな内容に思えました。
初めての試みですし、業務フロー的な問題は情報っぽくて私は好きでした。なかなか楽しかったです:grin:

その中で、問題３では少しプログラミング的な要素があり（ネストから見るにPythonベースでしょうか？）とても簡単なプログラムですが、ネタでRPGを使って記述しました。

- [毎日新聞さん 共通テスト 2025 速報](https://mainichi.jp/exam/kyotsu-2025)
- [共通テスト 令和7](https://www.dnc.ac.jp/kyotsu/shiken_jouhou/r7/)

## RPGで書くと
共テでは `Akibi = [5,3,カ]` と記載されている初期化処理は、昔のRPGだと以下の様な記述となりましたが
※ カは問題の答えです

```RPGLE:昔のRPG
Akibi(1) = 5 ;
Akibi(2) = 3 ;
Akibi(3) = カ ;
```

この様な記述は現在では `%LIST` 組み込み関数を使う事ができますのでそちらを使います。

- [RPG Cafe: Fall 2020: New BIFs,%LIST ](https://www.ibm.com/support/pages/rpg-cafe-fall-2020-new-bifs-foreach-opcode)

- [RPG 版 - 情報Ⅰ 問３－２（キ）](https://github.com/ushiday/qiita-rpgle/blob/main/QRPGSRC/Q25KT01R.RPGLE)
-  [RPG 版 - 情報Ⅰ 問３－２（ケ～シ）](https://github.com/ushiday/qiita-rpgle/blob/main/QRPGSRC/Q25KT11R.RPGLE)

```RPGLE:問３－２（キ）Q25KT01
～～～中略～～～
//   D*-********************************************************************
//   D*-* 変数等宣言                                                    **
//   D*-********************************************************************
DCL-C  buinsu        CONST(3)                        ;       // 部員の合計人数
DCL-S  Akibi         PACKED(003 : 00  ) DIM(buinsu ) ;       // 部員の空き日（配列
DCL-S  tantou        PACKED(003 : 00  )              ;       // 担当の部員コード
DCL-S  buin          PACKED(003 : 00  )              ;       // 部員コード（ループ用
//   C*-********************************************************************
//   C*-* メインルーチン                                                **
//   C*-********************************************************************

//空き日の初期化
Akibi    = %LIST(5 :3 :4)                     ;

tantou   = 1                                  ;

//部員変数を２～部員の合計人数まで１ずつ増やしながら繰り返す
for buin = 2 to buinsu                        ;
  //もし現在部員の空き日が担当部員より前なら担当部員を現在部員とする
  if Akibi(buin) < Akibi(tantou)                ;
    tantou = buin                                 ;
  endif                                         ;
endfor                                        ;

//次の担当部員を表示する
DSPLY ('次の工芸品担当は部員' + %CHAR(tantou) + 'です。')       ;

*INLR       = *ON                             ;
RETURN                                        ;

```

```RPGLE:問３－２（ケ～シ）Q25KT11
～～～中略～～～
//   D*-********************************************************************
//   D*-* 変数等宣言                                                    **
//   D*-********************************************************************
DCL-C  buinsu        CONST(3)                        ;       // 部員の合計人数
DCL-S  Akibi         PACKED(003 : 00  ) DIM(buinsu ) ;       // 部員の空き日（配列
DCL-S  tantou        PACKED(003 : 00  )              ;       // 担当の部員コード
DCL-S  buin          PACKED(003 : 00  )              ;       // 部員コード（ループ用
//
DCL-C  kougeihinsu   CONST(9)                        ;       // 工芸品の数
DCL-S  Nissu         PACKED(003 : 00  ) DIM(kougeihinsu) ;   // 工芸品の制作日数（配列
DCL-S  kougeihin     PACKED(003 : 00  )              ;       // 工芸品コード（ループ用
//   C*-********************************************************************
//   C*-* メインルーチン                                                **
//   C*-********************************************************************

//制作日数の初期化
Nissu    = %LIST(4 :1 :3 :1 :3 :4 :2 :4 :3 )  ;

//空き日の初期化
Akibi    = %LIST(1 :1 :1)                     ;

//工芸品を１～工芸品数まで１ずつ増やしながら繰り返す
for kougeihin = 1 to kougeihinsu              ;

  tantou = 1                                    ;

  //部員変数を２～部員の合計人数まで１ずつ増やしながら繰り返す
  for buin = 2 to buinsu                        ;
    //もし現在部員の空き日が担当部員より前なら担当部員を現在部員とする
    if Akibi(buin) < Akibi(tantou)                ;
      tantou = buin                                 ;
    endif                                         ;
  endfor                                        ;

  //工芸品の担当部員を表示する
  DSPLY ('工芸品' + %CHAR(kougeihin)
         + '…部員'   + %CHAR(tantou   ) + ':'
         + %CHAR(Akibi(tantou)) + '日目～'
         + %CHAR(Akibi(tantou) + Nissu(kougeihin) -1 ) + '日目'
         ) ;

  //担当の空き日を設定する
  Akibi(tantou) = Akibi(tantou) + Nissu(kougeihin)  ;

endfor                                        ;

*INLR       = *ON                             ;
RETURN                                        ;

```

### 結果
こんな感じで出力されます (^^)

![スクリーンショット 2025-01-21 192511.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100029/f36cfa3e-6074-5e6d-a2ba-769536ddb937.png)

学生さんが情報に興味を持ってくれると良いですね！:grin: