見出し画像

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万桁毎にバイト列に変換した入力数列を探索しています。このコードは、効率的で簡潔な解決策であると考えられます。


この記事が気に入ったらサポートをしてみませんか?