令和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) 試験対策として試作問題にあった最小交換硬貨枚数の問題と、一番簡単なバブルソートを書いてみる。 »
「パソコン・インターネット」カテゴリの記事
- RF Weekly Digest (Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ) 2025/10/27-2025/11/3(2025.11.04)
- Google AI StudioのBuild(アプリを作る機能)で高周波・RFニュースを1週間分まとめるアプリを作った(最終版) 私がいつも調査しているサイト67個を全部入れて調べてもらうようにした。これでとりあえず完成かな。QorvoとSkyworksの合併も拾ってくれた。(2025.10.30)
- Google AI StudioのBuild(アプリを作る機能)にVibe CodingのためのSupercharge your apps with AIというのがついた。そこで高周波・RFニュースを1週間分まとめるアプリを作った(続き)調べたものの画像を入れて、というとできないのでそれっぽい画像を生成する機能が付いた。(2025.10.29)
- Google AI StudioのBuild(アプリを作る機能)にVibe CodingのためのSupercharge your apps with AIというのがついた。そこで高周波・RFニュースを集めて要約するアプリRF Tech Summarizerを作った。見かけも0から作った前と違って結構かっこよくできている。(2025.10.28)
- RF Weekly Digest (Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ) 2025/10/20-2025/10/26(2025.10.26)
「学問・資格」カテゴリの記事
- 高周波・RFニュース 2025年11月7日 IEEE Microwave Magazineで5Gから6Gへのインフラの論文、GSMAがJapan Digital Nationレポート発行、MolexがEMIシールド付き4列B2Bコネクタ発表、Rohde&SchwarzのMobile Test Summit登録開始、ZTEがPre6G GigaMIMO発表(2025.11.07)
- 高周波・RFニュース 2025年11月6日 QualcommのWi-Fi 8解説記事続き、SEMCOと住友化学がグラスコア基板の合弁会社設立、KeysightとMediaTekがPre-6Gのセンシング・通信で協業、KYOCERA AVXがイリジウム用CAPアンテナ発表(2025.11.06)
- 高周波・RFニュース 2025年11月5日 NokiaとR&SがAI-powered 6Gレシーバーで協業、ESA, Eutelsat, Airbus, MediaTekらが5G-Advanced NTNを実証、Seeed StudioのモジュールのNordicのSoC採用、MathWorksのRF・アンテナ設計解説(2025.11.05)
- RF Weekly Digest (Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ) 2025/10/27-2025/11/3(2025.11.04)
- Google AI StudioのBuild(アプリを作る機能)で高周波・RFニュースを1週間分まとめるアプリを作った(最終版) 私がいつも調査しているサイト67個を全部入れて調べてもらうようにした。これでとりあえず完成かな。QorvoとSkyworksの合併も拾ってくれた。(2025.10.30)
「日記・コラム・つぶやき」カテゴリの記事
- 高周波・RFニュース 2025年11月7日 IEEE Microwave Magazineで5Gから6Gへのインフラの論文、GSMAがJapan Digital Nationレポート発行、MolexがEMIシールド付き4列B2Bコネクタ発表、Rohde&SchwarzのMobile Test Summit登録開始、ZTEがPre6G GigaMIMO発表(2025.11.07)
- 高周波・RFニュース 2025年11月6日 QualcommのWi-Fi 8解説記事続き、SEMCOと住友化学がグラスコア基板の合弁会社設立、KeysightとMediaTekがPre-6Gのセンシング・通信で協業、KYOCERA AVXがイリジウム用CAPアンテナ発表(2025.11.06)
- 高周波・RFニュース 2025年11月5日 NokiaとR&SがAI-powered 6Gレシーバーで協業、ESA, Eutelsat, Airbus, MediaTekらが5G-Advanced NTNを実証、Seeed StudioのモジュールのNordicのSoC採用、MathWorksのRF・アンテナ設計解説(2025.11.05)
- RF Weekly Digest (Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ) 2025/10/27-2025/11/3(2025.11.04)
- Google AI StudioのBuild(アプリを作る機能)で高周波・RFニュースを1週間分まとめるアプリを作った(最終版) 私がいつも調査しているサイト67個を全部入れて調べてもらうようにした。これでとりあえず完成かな。QorvoとSkyworksの合併も拾ってくれた。(2025.10.30)
« 高周波・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) 試験対策として試作問題にあった最小交換硬貨枚数の問題と、一番簡単なバブルソートを書いてみる。 »


コメント