2025-01-19

共通テスト用プログラム表記」を使った共通テストの新教科「情報」のプログラムの問題を実際に動かして試せるDNCL3Wirth(ヴィルト)を使って検証してみましょう!JavaScriptの実装も参考までにご紹介します。

第3問で出題された、それぞれ制作日数が決まっている9つの工芸品。工芸部の部員でどう分担するかをプログラムで求める問題。

配列Akibiを用意する。この配列の添字(1から始まる。)は部員の番号であり...
(共通テスト 情報 第3問 問2より)
共通テスト用プログラム表記」には、「※特に説明がない場合,配列の要素を指定する添字は0から始まる」とあり、今回は指定があるので、下記の各部員の空き日を表す配列の初期値設定も1から順に代入されることになる点に注意。 Akibi = [5, 3, 4] DNCL3Wirthでは配列の添字は0からと定義しているので、先頭にダミーとして0を指定します。 Akibi = [0, 5, 3, 4] まずは、空き日が一番小さい部員を選ぶプログラム。部員1を仮定して、部員2から部員数分比較しながら、もし小さかったら担当を更新します。


「RUN on Wirth Playground」
DNCL3版
空き日(Akibi)の数を変更して、実行結果の変化を見てみましょう。誤答を設定してみるとどう違うかが分かります。

DNCL3/Wirthは日本語変数にも対応しているので、下記のように表現可能です。

「RUN on Wirth Playground」
DNCL3版

次に、工芸品毎に担当者を決めるプログラム。先頭の工芸品から担当者を決めて、その開始日、終了日を表示していきます。


「RUN on Wirth Playground」
DNCL3版

変数を日本語にしたものがこちら。

「RUN on Wirth Playground」
DNCL3版
工芸品を先頭から決めていく場合、特定の部員に仕事が偏ってしまうことも出てきます。うまく収めるにはどうしたらいいでしょう?

考えて楽しい、実装できてうれしい、使ってもらってうれしいのがプログラミング!

参考までにJavaScriptでも実装してみます。工芸品や部員を要素を持つデータとして使うのが一般的です。ノベルフレームワーク「egadv.js」 を使って、無駄にステキな背景で表示するアプリとしてみました。


「RUN on ES-Jam」

空いてるメンバーを取得する getFreeMember 機能を使ったメインループがこちら。 for (const item of items) { const owner = getFreeMember(members); await show(item.name + "..." + owner.name + ":" + owner.freeday + "日目〜" + (owner.freeday + item.days - 1) + "日目"); owner.freeday = owner.freeday + item.days; } 空き日(freeday)が一番小さいメンバーを返す機能は、JavaScriptの配列にある reduce 機能を使って、短く記述することも可能です。 const getFreeMember = (members) => { return members.reduce((pre, cur) => cur.freeday < pre.freeday ? cur : pre); }; 効率よく記述するため実利用されるプログラミング言語の仕様は大きくなりがちです。特定の言語に依存しないシンプルな学習用のプログラミング言語として、DNCL3/Wirth(ヴィルト)を育てていきませんか?

links
- オープンソースの新プログラミング言語、共通テスト用プログラム表記「DNCL3」を実装と共に提案
- Pascalリスペクトの教育用構造化プログラミング言語「Wirth」

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS