« 高周波・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) 試験対策として試作問題にあった最小交換硬貨枚数の問題と、一番簡単なバブルソートを書いてみる。 »

2024年11月19日 (火)

令和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には書き直せそう。

やってみた。

ダウンロード - dncl2python.py

※バグがあったので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) 試験対策として試作問題にあった最小交換硬貨枚数の問題と、一番簡単なバブルソートを書いてみる。 »

パソコン・インターネット」カテゴリの記事

学問・資格」カテゴリの記事

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« 高周波・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) 試験対策として試作問題にあった最小交換硬貨枚数の問題と、一番簡単なバブルソートを書いてみる。 »

最近の記事

最近のコメント

2024年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
フォト
無料ブログはココログ