euler/ruby/euler039.rb

32 lines
696 B
Ruby

def is_right_triangle?(a, b, c)
a ** 2 + b ** 2 == c ** 2
end
def generate_triangle_sides(perimeter)
triangles = []
(1..perimeter).each do |i|
(i..perimeter-i).each do |j|
triangles << [i, j, perimeter-i-j]
end
end
triangles
end
def integer_right_triangle_solutions(perimeter)
triangles = generate_triangle_sides(perimeter)
triangles.select { |x| is_right_triangle?(x[0], x[1], x[2]) }
end
def p_with_max_solution_count_up_to(n)
max_solution_count = 0
p = 2
(3..n).each do |i|
solution_count = integer_right_triangle_solutions(i).count
if solution_count > max_solution_count
max_solution_count = solution_count
p = i
end
end
p
end