【OpenAI】ChatGPTでAtCoderどこまで解けるかテストしてみた

プログラミング
スポンサーリンク

スポンサーリンク

初めに

どーも、学生エンジニアのゆうき(@engieerblog_Yu)です。

今回は最近話題のChatGPTで、AtCoderの問題が解けてしまうのかということについて検証してみました。

今回の実験で得られた答えは、実際にAtCoderに提出はしていませんので、皆さんも決して提出はしないでくださいね。

以下の完全版noteで、ChatGPTのおすすめChrom拡張機能5つと収益化方法について解説しています。

完全版note

A問題

(1,2,…,N) を並び替えた数列 P と整数 X が与えられます。 数列 P の i 番目の項の値は Pi です。 Pk=X を満たす k を出力してください。

https://atcoder.jp/contests/より

以下がChatGPTでのpython出力です。

N, X = map(int, input().split())
P = list(map(int, input().split()))

for i in range(N):
    if P[i] == X:
        print(i+1)
        break

実際にコードを動かしてみたところ、正解でした。

これは期待を超える結果です。

B問題

英大文字および数字からなる2文字の文字列がN 個与えられます。i 個目の文字列はSiです。 以下の3つの条件をすべて満たすか判定してください。

・すべての文字列に対して、1 文字目は H , D , C , S のどれかである。

・すべての文字列に対して、2 文字目は A , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , T , J , Q , K のどれかである。

・すべての文字列は相異なる。つまり、i≠jならば Si≠Sjである。

https://atcoder.jp/contests/より

以下がChatGPTのpython出力です。

def checkConditions(stringList,N): 
	#flag to indicate whether all strings are valid or not 
	valid = True
	for i in range(0,N): 
		#check if the first character of each string is H, D, C, S 
		if(stringList[i][0] not in ("H", "D", "C", "S")): 
			valid = False
			break
			
		#check if the second character of each string is A, 2, 3, 4, 5, 6, 7, 8, 9, T, J, Q, K 
		elif(stringList[i][1] not in ("A", "2", "3", "4", "5", "6", "7", "8", "9", "T", "J", "Q", "K")): 
			valid = False
			break
			
		# check if all strings are distinct 
		for j in range(i+1,N): 
			if(stringList[i] == stringList[j]): 
				valid = False
				break
		
	return valid 

# Driver Program 
N = 4
stringList = ["H2","D7","CQ","S9"] 

if(checkConditions(stringList, N)): 
	print ("All strings satisfy the given conditions")
else: 
	print ("One or more strings do not satisfy given conditions") 

# This code is contributed by Rituraj Jain

なぜか最後にJainさんが出てきました(笑)

しかし関数部分は正しく書けていて、関数に適切な値を渡すところを変えるところを修正するだけです。

なんとChatGPTで、AtCoderの問題のB問題も解けてしまいました。

C問題

\(10^9\) 階建てのビルがあり、N 本のはしごがかかっています。
ビルの1 階にいる高橋君ははしごを繰り返し使って(0 回でもよい)できるだけ高い階へ上りたいと考えています。
はしごには1 からN までの番号がついており、はしごi は Ai 階とBi 階を結んでいます。はしご iを利用するとAi 階からBi 階へ、または Bi​ 階から Ai 階へ双方向に移動することができますが、それ以外の階の間の移動は行うことはできません。
また、高橋君は同じ階での移動は自由に行うことができますが、はしご以外の方法で他の階へ移動することはできません。
高橋君は最高で何階へ上ることができますか?

https://atcoder.jp/contests/より

以下がChatGPTの出力です。

N = int(input())
A = [int(input()) for _ in range(N)]
B = [int(input()) for _ in range(N)]

floors = [0] * 10
for i in range(N):
    floors[A[i]-1] = max(floors[A[i]-1], B[i]) # 指定された階数以上の階が可能な場合は階を更新
print(max(floors))

なんとこちらの問題も正しく解けていました。

正確には、少し制約を満たしていない部分がありましたが、問題設定をうまくやれば完璧に解いてくれそうです。

もしかすると何年後にはエンジニアはいらなくなってしまうかもしれません、、、。

終わりに

今回は最近話題のChatGPTを用いて、AtCoderの問題を解いてみました。

D問題以降の問題については解いていませんが、AIに渡す入力をうまくやれば、もしかすると解けてしまうかもしれません。

これからはプログラムが書ける人より、「AIを理解していてうまく使える人」の方が重宝されるのかもしれません。

今後もOpenAI社には注目ですね。

完全版noteはこちらからどうぞ。

完全版note

ゆうき
ゆうき

最後まで読んでいただきありがとうございました。

コメント

タイトルとURLをコピーしました