I had an easy time with this one, which makes me feel a lot better about all the ones I had problems with!
No fancy-pants recursion or math short-cuts here, just a straight forward logic problem. The only “trick” here is to realize that since a <e; b < c, we only need to check values of a and b up to 499.
I’m sure you could whittle that number down by crunching the numbers, but it’s good enough for me!
Problem 39
For which value of p 1000, is the number of solutions maximised?
counts = {}
counts.default = 0
(1..499).each do |a|
(a..499).each do |b|
break if a + b > 500
c = Math.sqrt(a**2 + b**2)
next unless c.denominator == 1
counts[a + b + c] += 1
end
end
sorted = counts.sort { |a, b| a[1] <=> b[1] }
puts sorted.last[0]