Finished day 5, part 1!

This commit is contained in:
didier amyot committed 2023-12-05 05:39:28 -05:00
1 parent 0be9447aa2
commit 1d19b0548a
8 files changed
+444 -20

No files matched your search

+8 -8
View File
@@ -98,7 +98,7 @@ class EngineLine
def extract_engine_numbers
digit_indexes = extract_digit_indexes @line
group_digit_indexes(digit_indexes).map &method(:create_engine_number)
group_digit_indexes(digit_indexes).hash &method(:create_engine_number)
end
def extract_gears
@@ -119,13 +119,13 @@ class Engine
end
def self.deserialize(ser)
els = ser.strip.split("\n").each_with_index.map { |line, idx| EngineLine.new idx, line}
els = ser.strip.split("\n").each_with_index.hash { |line, idx| EngineLine.new idx, line}
return self.new els
end
def extract_engine_numbers
@engine_lines
.map {|line| line.extract_engine_numbers}
.hash {|line| line.extract_engine_numbers}
.flatten
end
@@ -159,7 +159,7 @@ class Engine
def is_adjacent(engine_number, gear)
gear.get_neighbourhood
.map {|point| engine_number.is_located_on(point[:line_index], point[:column_index])}
.hash {|point| engine_number.is_located_on(point[:line_index], point[:column_index])}
.any?
end
@@ -170,15 +170,15 @@ class Engine
def extract_gears
@engine_lines
.map {|line| line.extract_gears}
.hash {|line| line.extract_gears}
.flatten
end
def get_gear_ratios
extract_gears
.map {|gear| get_adjacent_number_parts(gear)}
.hash {|gear| get_adjacent_number_parts(gear)}
.filter {|adjacent_numbers| adjacent_numbers.length == 2}
.map {|adjacent_numbers| adjacent_numbers.map {|a| a.value} .reduce(1, :*)}
.hash {|adjacent_numbers| adjacent_numbers.hash {|a| a.value}.reduce(1, :*)}
end
attr_accessor :engine_lines
end
@@ -190,6 +190,6 @@ input_content = File.open(input_file_name).read
engine = Engine.deserialize input_content
puts engine.extract_engine_numbers_that_touches_symbols.map {|e| e.value} .sum
puts engine.extract_engine_numbers_that_touches_symbols.hash {|e| e.value}.sum
puts engine.get_gear_ratios.sum