adds solutions for problems 38 and 39

master
Evan Hemsley 2014-11-14 02:13:22 -08:00
parent 3c91e1fb8f
commit 22af3e98b1
2 changed files with 53 additions and 0 deletions

22
euler038.rb Normal file
View File

@ -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

31
euler039.rb Normal file
View File

@ -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