Skip to content

Instantly share code, notes, and snippets.

@carlwiedemann
Last active December 4, 2023 14:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save carlwiedemann/41ed08d6316d25d3e315a094aca0b1ff to your computer and use it in GitHub Desktop.
Save carlwiedemann/41ed08d6316d25d3e315a094aca0b1ff to your computer and use it in GitHub Desktop.
Advent of Code 2023 day003.rb
require_relative "main"
module Day003
INPUT = File.read('INPUT.txt')
grid = INPUT.to_grid
##########
# Part 1 #
##########
symbol_locations = []
number_locations = []
grid.each do |v, value|
if value != "."
target = value.is_09? ? number_locations : symbol_locations
target.push(v)
end
end
groups = []
number_locations.each do |v|
if groups.last&.last == v.left
groups.last.push(v)
else
groups.push([v])
end
end
valid_groups = groups.filter do |group|
group.reduce(false) do |memo, v|
memo || grid.eight(v).any? { symbol_locations.include?(_1) }
end
end
answer1 = valid_groups.reduce(0) do |memo, group|
memo + grid.get_values(group).join.to_i
end
pp answer1
##########
# Part 2 #
##########
answer2 = symbol_locations.reduce(0) do |memo, v_s|
if grid.get_value(v_s) == '*'
adjacent_groups = groups.filter do |group|
group.reduce(false) do |memo, v|
memo || v.eight.include?(v_s)
end
end
if adjacent_groups.count == 2
memo += adjacent_groups.map do |group|
grid.get_values(group).join.to_i
end.arith_prod
end
end
memo
end
pp answer2
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment