令和7年度大学入学共通テスト「情報」に出てくる日本語プログラム言語をPythonに直して実行するDNCL2Pythonを作った(1)。日本語プログラム言語はほぼPythonなので、reモジュールを使って正規表現で置換しているだけ。defとappendは仕様に付け加えておいた。
令和7年から共通テストに情報が付け加わわるということで、どんな問題になるかが公開されている。
令和7年度試験の問題作成の方向性、試作問題等
なるほど。プログラム言語はほとんどPythonだが日本語に直されている。例に上がっていたのはこんな感じ。
Data=[3,18,29,33,48,52,62,77,89,97] kazu=要素数(Data) 表示する("0~99の数字を入力してください") atai=【外部からの入力】 hidari=0 , migi=kazu-1 owari=0 hidari <= migi and owari==0 の間繰り返す: | aida=(hidari+migi)÷2 | もしData[aida]==atai ならば: | | 表示する(atai,"は",aida,"番目にありました") | | owari=1 | そうでなくもしData[aida]<atai ならば: | | hidari=aida+1 | そうでなければ: ⎿ ⎿ migi=aida-1 もしowari==0 ならば: ⎿ 表示する(atai,"は見つかりませんでした") 表示する("添字"," ","要素") iを0からkazu-1まで1ずつ増やしながら繰り返す: ⎿ 表示する(i," ",Data[i]) |
ほぼPythonなのだが微妙に違う(rangeとか一行に複数文書くとか)。
でもこれならPythonのreモジュールで正規表現を使って置き換えていったらPythonには書き直せそう。
やってみた。
※この例題は配列の添え字が0始まりのものでプログラムもそれで作った。本番は1から始まるように仕様変更されたので下を使ってください。
これを使えば上のプログラムは、
Data=[3,18,29,33,48,52,62,77,89,97]
kazu=len(Data)
print("0~99の数字を入力してください")
atai=int(input())
hidari = 0
migi = kazu-1
owari=0
while hidari <= migi and owari==0 :
aida=(hidari+migi)//2
if Data[aida]==atai :
print(atai,"は",aida,"番目にありました")
owari=1
elif Data[aida]<atai :
hidari=aida+1
else :
migi=aida-1
if owari==0 :
print(atai,"は見つかりませんでした")
print("添字"," ","要素")
for i in range(0, kazu-1+1 , 1):
print(i," ",Data[i])
|
のように変換される。保存と同時にexecを使って実行している。※もともとコメント#演算子//は商の整数値を返す、がついていたがreturnに変換されてしまう(コメント処理してない…)ので削除
DCNL2Pythonのコードはこちら。
# DNCL2Python.py
# 令和7年度大学入試共通テスト
# 情報で使われる日本語プログラム言語を
# Pythonに変換し実行する。
# 2024/11/19 ver.1.2
import re
import unicodedata
import tkinter as tk
import tkinter.filedialog as filedialog
#ファイルダイアログでプログラムが書かれているテキストファイル(.txt)を選択し開く
tk.Tk().withdraw()
filepath = filedialog.askopenfilename(filetypes=[("テキストファイル", "*.txt")])
with open(filepath, "r") as f:
dcnl = f.read()
#乱数が使われる場合はimport
rd = re.findall(r'乱数', dcnl)
if rd != []:
dcnl = 'import random\n\n' + dcnl
#制御範囲を表す|と⎿をインデント(空白4つ)に変換
dcnl.replace(' ', ' ')
dcnl = re.sub(r' *| *| *⎿ *',' ', dcnl)
#半角に直せるものは直しておく
dcnl = unicodedata.normalize('NFKC', dcnl)
#単純に置換だけでいけるものは置換
dcnl = re.sub(r'そうでなくもし', 'elif ', dcnl)
dcnl = re.sub(r'もし', 'if ', dcnl)
dcnl = re.sub(r'ならば', '', dcnl)
dcnl = re.sub(r'そうでなければ', 'else ', dcnl)
dcnl = re.sub(r'表示する', 'print', dcnl)
dcnl = re.sub(r'【外部からの入力】', 'int(input())', dcnl)
dcnl = re.sub(r'要素数', 'len', dcnl)
dcnl = re.sub(r'整数\(', r'int(', dcnl)
dcnl = re.sub(r'乱数\(', r'random.random(', dcnl)
dcnl = re.sub(r'÷', '//', dcnl)
dcnl = re.sub(r'関数', 'def', dcnl)
dcnl = re.sub(r'を定義する', '', dcnl)
#一行に代入文が書かれている場合2行に分ける。
dcnl = re.sub(r'(.+)=(.+),( *)(.+)=(.+)',r'\1=\2\n\4=\5', dcnl)
#whileは語順を変えないといけない
dcnl = re.sub(r'( *)(.+)の間繰り返す', r'\1while \2', dcnl)
#forも語順を変えないといけない
dcnl = re.sub(r'( *)(.+)を(.+)から(.+)まで(.+)ずつ増やしながら繰り返す', r'\1for \2 in range(\3, \4+1, \5)', dcnl)
dcnl = re.sub(r'( *)(.+)を(.+)から(.+)まで(.+)ずつ減らしながら繰り返す', r'\1for \2 in reversed(range(\4, \3+1, \5))', dcnl)
#returnも語順を変えないといけない
dcnl = re.sub(r'( *)(.+)を返す', r'\1return \2', dcnl)
#appendも
dcnl = re.sub(r'に(.+)を付け加える', r'.append(\1)', dcnl)
#.txtを.pyに変えて保存
with open(filepath.replace('.txt', '.py'), 'w') as f:
f.write(dcnl + '\n')
#Pythonのコードとして実行
exec(dcnl)
|
これを使ってちょっといろいろ想定問題を作ってみよう(続く?)
« 高周波・RFニュース 2024年11月18日 Microwave JournalはRF-MEMS FEM、Ericsson ConsumerLabの5G differentiated connectivityレポート,iFixitがPS5 Proを分解、Nordicの新nRF64Lシリーズ、u-bloxのtri-radioモジュール、Quectelの3in1アンテナ、GSAの5G年次レビュー | トップページ | 令和7年度大学入学共通テスト「情報」に出てくる日本語プログラム言語をPythonに直して実行するDNCL2Pythonを作った(2) 試験対策として試作問題にあった最小交換硬貨枚数の問題と、一番簡単なバブルソートを書いてみる。 »
「パソコン・インターネット」カテゴリの記事
- Google ColabのJulia言語でDifferentialEquationsパッケージを使ってピタゴラスの三体問題を35段14次ルンゲクッタFeagen法で計算し、Colab上でGIFアニメにしてみた。dtminを小さくしないと途中で止まってしまうことにハマった…(2025.03.27)
- Google ColabのJulia言語でDifferentialEquationsパッケージを使って35段14次ルンゲクッタFeagen法(BigFloat使用)、オイラー法、4段4次のルンゲクッタ法、Tsit5、Dormand&Princeの8次(全部Float64)でローレンツ方程式をアダプティブは切って固定刻み幅で計算して比較。(2025.03.26)
「学問・資格」カテゴリの記事
- 高周波・RFニュース 2025年3月28日 Next G Allianceが6Gに向けたコンポーネント技術を策定、Ericssonのパッシブアンテナで5G効率化、u-bloxがソフトバンクと協業で日本にPointPerfect GNSS補正を拡大、中国以外の国は6Gに無関心になってきたという記事(2025.03.28)
- パンサー尾形さんのNHK 笑わない数学スペシャル ホッジ予想を見てメモ。オイラー数、デカルト座標、ポアンカレのベッチ数、ネーターのコホモロジー、たくさん見つかるコホモロジー、グロタンディークのモチーフ、そしてドリーニュさんのインタビューという構成でした。(2025.03.27)
- 高周波・RFニュース 2025年3月27日 Qualcommが3GPP 6Gワークショップで議論された内容を紹介、Broadcomが00G/lane DSP PHYチップ発表、DreiとEricssonが5GのWバンド(92~115 GHz )テスト中、Siversが高性能レーザでWINセミコンダクタと提携、Semtechの50G PON(2025.03.27)
- Google ColabのJulia言語でDifferentialEquationsパッケージを使ってピタゴラスの三体問題を35段14次ルンゲクッタFeagen法で計算し、Colab上でGIFアニメにしてみた。dtminを小さくしないと途中で止まってしまうことにハマった…(2025.03.27)
- 高周波・RFニュース 2025年3月26日 ルネサスが車載Bluetooth Soc発表、QorvoがUltra-Wideband(UWB)レーダについて解説、VNPTがQualcommの XGS-PONとWi-Fi 7ソリューション採用、SpirentのAIインフラのテストレポート(2025.03.26)
「日記・コラム・つぶやき」カテゴリの記事
- 高周波・RFニュース 2025年3月28日 Next G Allianceが6Gに向けたコンポーネント技術を策定、Ericssonのパッシブアンテナで5G効率化、u-bloxがソフトバンクと協業で日本にPointPerfect GNSS補正を拡大、中国以外の国は6Gに無関心になってきたという記事(2025.03.28)
- パンサー尾形さんのNHK 笑わない数学スペシャル ホッジ予想を見てメモ。オイラー数、デカルト座標、ポアンカレのベッチ数、ネーターのコホモロジー、たくさん見つかるコホモロジー、グロタンディークのモチーフ、そしてドリーニュさんのインタビューという構成でした。(2025.03.27)
- 高周波・RFニュース 2025年3月27日 Qualcommが3GPP 6Gワークショップで議論された内容を紹介、Broadcomが00G/lane DSP PHYチップ発表、DreiとEricssonが5GのWバンド(92~115 GHz )テスト中、Siversが高性能レーザでWINセミコンダクタと提携、Semtechの50G PON(2025.03.27)
- Google ColabのJulia言語でDifferentialEquationsパッケージを使ってピタゴラスの三体問題を35段14次ルンゲクッタFeagen法で計算し、Colab上でGIFアニメにしてみた。dtminを小さくしないと途中で止まってしまうことにハマった…(2025.03.27)
- 高周波・RFニュース 2025年3月26日 ルネサスが車載Bluetooth Soc発表、QorvoがUltra-Wideband(UWB)レーダについて解説、VNPTがQualcommの XGS-PONとWi-Fi 7ソリューション採用、SpirentのAIインフラのテストレポート(2025.03.26)
« 高周波・RFニュース 2024年11月18日 Microwave JournalはRF-MEMS FEM、Ericsson ConsumerLabの5G differentiated connectivityレポート,iFixitがPS5 Proを分解、Nordicの新nRF64Lシリーズ、u-bloxのtri-radioモジュール、Quectelの3in1アンテナ、GSAの5G年次レビュー | トップページ | 令和7年度大学入学共通テスト「情報」に出てくる日本語プログラム言語をPythonに直して実行するDNCL2Pythonを作った(2) 試験対策として試作問題にあった最小交換硬貨枚数の問題と、一番簡単なバブルソートを書いてみる。 »
コメント