これが私がしていることです:
(1..999).each do |a|
(1..999).each do |b|
if Math.sqrt(a**2 + b**2) % 1 == 0 && a + b + Math.sqrt(a**2 + b**2) == 1000 && a >= b
puts a * b * Math.sqrt(a**2 + b**2)
end
end
end
何が起こっているのかというと、a
とb
は数式で交換可能であるため、2つの一致があり、2puts
回出力されます。これを修正するために追加a >= b
しましたが、出力されるのは1回だけです。ただし、a == b
2回出力すると。私が使用している例では、aとbが常に異なることは知っていますが、これは私には悪い設計のように思えます。
2つの質問:
配列を取得してそれ自体と比較するためのより良いパターンがRubyにありますか?
常に2回出力されないようにするにはどうすればよいですか。次のループの開始前に変更すると発生する変数を設定できます。それはこれを行うための適切な方法ですか?