前提条件
- QuizKnockの動画を見て、動画内容の様なプログラムを作りたくなったのでChatGPTに作って貰う。
ChatGPTへの依頼
以下は、Rubyプログラムの要件定義をまとめたものとなり、この要件に従いプログラムを作成して。
ゲームの要件定義
ゲームの目的:
このゲームの目的は、プレイヤーが与えられた数字を全て使って、目標数字を作成する数式を見つけることです。
ルール:
- プレイヤーが提供する入力は、"使う数字"(4個~6個、順不同、カンマ区切り、全て利用)と "求める数字"(1個)です。
- プログラムは、"求める数字"を作成するための可能な数式を1つ提示します。
- 数式は、四則演算(演算記号と括弧)を使用して構築されます。
- 四則演算は、括弧内の計算、乗算/除算、加算/減算の順序に従います。同じ優先順位の演算子は左から順に処理されます。
- 数式が出来ない場合は「階なし」と出力します。
サンプル入力と出力の例:
-
入力: "2,5,5,9"、"13"
出力:答えの数式:(9-5)*2+5=13
-
入力: "4,8,8,9"、"23"
出力:答えの数式:(8-4)*8-9=23
-
入力: "5,6,7,9"、"19"
出力:答えの数式:6*9-5*7=19
以上がゲームの要件定義です。この要件に基づいて、Rubyプログラムを開発し、与えられた数字と目標数字に基づいて数式を生成し、解を見つけるロジックを実装してください。
結論
- なかなかと難しくまだ出来ていない。
def find_equation(numbers, target)
# 数字の組み合わせを試すための再帰関数
def find_solution(numbers, target)
if numbers.length == 1
return numbers[0] == target ? numbers[0].to_s : nil
end
(0...numbers.length).each do |i|
num = numbers[i]
remaining = numbers[0...i] + numbers[i+1..-1]
# 加算の場合
add_solution = find_solution(remaining, target - num)
return "(#{add_solution}+#{num})" if add_solution
# 減算の場合
sub_solution = find_solution(remaining, target + num)
return "(#{num}-#{sub_solution})" if sub_solution
# 乗算の場合
if target % num == 0
mul_solution = find_solution(remaining, target / num)
return "(#{mul_solution}*#{num})" if mul_solution
end
# 除算の場合
div_solution = find_solution(remaining, target * num)
return "(#{num}/#{div_solution})" if div_solution
end
return nil
end
solution = find_solution(numbers, target)
if solution
solution = solution.gsub(/[\[\]\"\\]/, '') # 不要なエスケープ文字を削除
return "答えの数式:#{solution}=#{target}"
else
return "階なし"
end
end
# 4文字から6文字の数字を入力するように制限
input_numbers = []
until input_numbers.length >= 4 && input_numbers.length <= 6
puts "4文字から6文字の数字をカンマ区切りで入力してください(例: 2,5,5,9,1,3):"
input_numbers = gets.chomp.split(',').map(&:to_i)
end
puts "求める数字を入力してください(例: 13):"
target_number = gets.chomp.to_i
# ゲームをプレイ
result = find_equation(input_numbers, target_number)
puts result
4文字から6文字の数字をカンマ区切りで入力してください:
2,5,5,9
求める数字を入力してください:
13
答えの数式:(((5-9)*2)+5)=13
→(9-5)*2+5だと正解。
4文字から6文字の数字をカンマ区切りで入力し
てください:
3,5,8,9
求める数字を入力してください:
24
答えの数式:(3-((5-8)*9))=24
→(8-5)*9-3だと正解。
4文字から6文字の数字をカンマ区切りで入力し
てください:
1,3,5,7
求める数字を入力してください:
19
答えの数式:(1-((3-7)*5))=19
→(7-3)*5-1だと正解。