令和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には書き直せそう。
やってみた。
※バグがあったので11/19 9:13に再アップロード
これを使えば上のプログラムは、
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) 試験対策として試作問題にあった最小交換硬貨枚数の問題と、一番簡単なバブルソートを書いてみる。 »
「パソコン・インターネット」カテゴリの記事
- 高周波回路シミュレータQucsStudioがuSimmicsに名称変更し、バージョンも4.8.3から5.8にアップデートされた。Qucsと区別するためだそうだ。また、Pythonの高周波用ライブラリscikit-rfもv1.5.0にバージョンアップされていた(2024.12.04)
- MATLAB Onlineで高周波基板設計用のRF PCB Toolboxを使ってみる。Coupled line バンドパスフィルタやratraceカプラが設計できる。モーメント法(MoM)や有限要素法(FEM)でちゃんと計算してくれているようだ。(2024.12.06)
- MATLAB Onlineで高周波用のRF Toolboxを使ってみる。Touchstoneファイルの読み込み、dB表示グラフ、スミスチャートなど簡単にできるし、フィルタ合成やIEEE P370 De-embedding(ZC-2xThru)も使える(MATLABで書かれたものがオリジナル)。(2024.12.05)
- MATLAB OnlineのSimulinkでローレンツ方程式をode8で計算してみる。Interface 2025年1月号でMATLAB Onlineの半年ライセンスがついてきたので。Simulinkを使うのは初めてだったが、わかりやすいSimulink入門コースを修了したのですぐできた。(2024.12.04)
- Interface2025年1月号はMATLABで1ニューロンから手作り 数学&図解でディープ・ラーニング。初歩からAlexNetの転移学習、CNNまで話題が豊富で、なんとMatlab Onlineの半年ライセンスがついてくる。Simulinkや各種toolboxも使える。早速MATLAB入門オンラインコース修了した。(2024.12.03)
「学問・資格」カテゴリの記事
- 高周波・RFニュース2024年12月9日 iFixitがDJI Neo分解、TechInsightsがApple Pencil Pro分解、QualcommのNeurIPS 2024でのAI技術発表、IntelのIEDM 2024での発表、 Nokiaの7GHz帯の6G、Analog DevicesのPhased Array Antennaのホワイトペーパー、ZDTが史上二番目の売上高(2024.12.09)
- 高周波・RFニュース 2024年12月6日 NGMNが無線パフォーマンス評価フレームワーク発行、5GAAがC-V2Xのロードマップ発行、Marvellの3nm 1.6Tbps PAM4インターコネクト、Nokiaの2.4Tbps光伝送、Silicon Labsの低消費電力モジュール、Xiaomi 14T Pro分解動画(2024.12.06)
- 高周波回路シミュレータQucsStudioがuSimmicsに名称変更し、バージョンも4.8.3から5.8にアップデートされた。Qucsと区別するためだそうだ。また、Pythonの高周波用ライブラリscikit-rfもv1.5.0にバージョンアップされていた(2024.12.04)
- 日経サイエンス2025年1月号の特集 和算再発見の佐藤賢一さんの記事「算聖 関孝和の実像」に出てきた矢高に対する円弧の2乗の近似式をカシオの高精度計算サイトkeisan.casio.jpの自作式として作った。ものすごい精度であることがよくわかる。(2024.12.03)
- MATLAB Onlineで高周波基板設計用のRF PCB Toolboxを使ってみる。Coupled line バンドパスフィルタやratraceカプラが設計できる。モーメント法(MoM)や有限要素法(FEM)でちゃんと計算してくれているようだ。(2024.12.06)
「日記・コラム・つぶやき」カテゴリの記事
- 高周波・RFニュース2024年12月9日 iFixitがDJI Neo分解、TechInsightsがApple Pencil Pro分解、QualcommのNeurIPS 2024でのAI技術発表、IntelのIEDM 2024での発表、 Nokiaの7GHz帯の6G、Analog DevicesのPhased Array Antennaのホワイトペーパー、ZDTが史上二番目の売上高(2024.12.09)
- 高周波・RFニュース 2024年12月6日 NGMNが無線パフォーマンス評価フレームワーク発行、5GAAがC-V2Xのロードマップ発行、Marvellの3nm 1.6Tbps PAM4インターコネクト、Nokiaの2.4Tbps光伝送、Silicon Labsの低消費電力モジュール、Xiaomi 14T Pro分解動画(2024.12.06)
- 高周波回路シミュレータQucsStudioがuSimmicsに名称変更し、バージョンも4.8.3から5.8にアップデートされた。Qucsと区別するためだそうだ。また、Pythonの高周波用ライブラリscikit-rfもv1.5.0にバージョンアップされていた(2024.12.04)
- 日経サイエンス2025年1月号の特集 和算再発見の佐藤賢一さんの記事「算聖 関孝和の実像」に出てきた矢高に対する円弧の2乗の近似式をカシオの高精度計算サイトkeisan.casio.jpの自作式として作った。ものすごい精度であることがよくわかる。(2024.12.03)
- MATLAB Onlineで高周波基板設計用のRF PCB Toolboxを使ってみる。Coupled line バンドパスフィルタやratraceカプラが設計できる。モーメント法(MoM)や有限要素法(FEM)でちゃんと計算してくれているようだ。(2024.12.06)
« 高周波・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) 試験対策として試作問題にあった最小交換硬貨枚数の問題と、一番簡単なバブルソートを書いてみる。 »
コメント