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