Вот что я делаю:
(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
взаимозаменяемы в формулах, поэтому есть два совпадения, и, таким образом, puts
выводится дважды. Чтобы исправить это, я добавил a >= b
, и теперь он выводится только один раз. Но если a == b
выводит дважды. Я знаю, что в примере, который я использую, a и b всегда будут разными, но мне это кажется плохим дизайном.
Два вопроса:
Есть ли в Ruby лучший шаблон для взятия массива и сравнения его с самим собой?
Как я могу избежать двойного вывода всегда. Я мог бы установить переменную, которая, если бы она была изменена до начала следующего цикла, разорвалась бы. Это правильный способ сделать это?