aoc_omni/ruby/2016/3/problem.rb

49 lines
1.2 KiB
Ruby
Raw Normal View History

2025-08-07 06:20:08 -04:00
class PotentialTriangle
attr_reader :sides
def initialize(line)
@sides = line.split.map(&:to_i)
end
%w[a b c].each_with_index do |side, index|
define_method("side_#{side}") do
sides[index]
end
end
def valid?
side_a_valid? && side_b_valid? && side_c_valid?
end
def side_a_valid?
side_a < side_b + side_c
end
def side_b_valid?
side_b < side_a + side_c
end
def side_c_valid?
side_c < side_b + side_a
end
end
input = STDIN.read.chomp
potential_triangle_lines = input.split("\n")
potential_triangles = potential_triangle_lines.map { |line| PotentialTriangle.new line }
valid_triangles = potential_triangles.count(&:valid?)
puts "Part 1: #{valid_triangles}"
grouped_triangle_lines = potential_triangle_lines.join(" ").split.each_with_index.each_with_object([[], [], []]) do |item_index, groups|
item, index = item_index
groups[index % 3] << item
groups
end
sideways_triangle_lines = grouped_triangle_lines.flatten.each_slice(3).to_a.map { |tri| tri.join " " }
sideways_triangles = sideways_triangle_lines.map { |line| PotentialTriangle.new line }
valid_sideways_triangles = sideways_triangles.count(&:valid?)
puts "Part 2: #{valid_sideways_triangles}"