32 lines
696 B
Ruby
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
|