ChatGPTにコードを提案させてみる。
※取り敢えず提案させてみただけなのでコードが正確か実行可能かは検証しない。
※課題は1万桁×100頁の書籍「π」をイメージ、頁内に限定した探索と考える。
《 User 》
課題は、
円周率100万桁以内にて、与えられた任意の数列を探索し、
見つけた位置が何番目かを返すpythonコードを提案すること。
手順1. 円周率を100万桁計算しpi.binバイナリファイルに出力。
手順2. pi.binを読み込みながら1万桁毎、バイナリに変換された入力数列を探索する。
《 AI 》
以下に課題のまとめを示します。
【課題】
円周率100万桁以内にて与えられた任意の数列を探索し、見つけた位置が何番目かを返すPythonコードを提案すること。
【手順】
1. mpmathライブラリを使用して100万桁の円周率を計算し、バイト列に変換した後、pi.binというファイル名でバイナリ形式で保存する。
2. pi.binファイルを読み込みながら、1万桁毎にバイト列に変換した入力数列を探索する。
【最適解のPythonコード】
import mpmath
# mpmathで100万桁の円周率を計算
mpmath.mp.dps = 1000000
pi = str(mpmath.pi)
# バイナリファイルに出力
with open('pi.bin', 'wb') as f:
f.write(pi.encode('utf-8'))
# 探索する数列を入力
search_sequence = input("探索する数列を入力してください: ")
# pi.binファイルをバイナリ形式で読み込みながら探索
with open('pi.bin', 'rb') as f:
pi = f.read()
search_sequence_bytes = bytes(search_sequence, 'utf-8')
position = -1
for i in range(0, len(pi), 10000):
if search_sequence_bytes in pi[i:i+10000]:
position = i + pi[i:i+10000].index(search_sequence_bytes)
break
# 結果を出力
if position == -1:
print("数列が見つかりませんでした。")
else:
print("数列が見つかった位置は、", position, "番目です。")
上記のコードでは、mpmathライブラリを使用して100万桁の円周率を計算し、バイト列に変換した後、pi.binというファイル名でバイナリ形式で保存しています。そして、pi.binファイルを読み込みながら、1万桁毎にバイト列に変換した入力数列を探索しています。このコードは、効率的で簡潔な解決策であると考えられます。