adds solutions for problems 38 and 39
parent
3c91e1fb8f
commit
22af3e98b1
|
@ -0,0 +1,22 @@
|
||||||
|
def pandigital?(n)
|
||||||
|
n.to_s.split('').map(&:to_i).sort == [1,2,3,4,5,6,7,8,9]
|
||||||
|
end
|
||||||
|
|
||||||
|
def largest_pandigital_composition_up_to(n)
|
||||||
|
largest_pandigital = 1
|
||||||
|
|
||||||
|
(2..n).each do |i|
|
||||||
|
digit_list = []
|
||||||
|
multiplier = 1
|
||||||
|
until digit_list.length >= 9
|
||||||
|
digit_list += (i * multiplier).to_s.split('').map(&:to_i)
|
||||||
|
multiplier += 1
|
||||||
|
end
|
||||||
|
number = digit_list.join('').to_i
|
||||||
|
if pandigital?(number)
|
||||||
|
largest_pandigital = number if number > largest_pandigital
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
largest_pandigital
|
||||||
|
end
|
|
@ -0,0 +1,31 @@
|
||||||
|
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
|
Loading…
Reference in New Issue