2018-12-02 21:30:30 -08:00
|
|
|
require "./common.cr"
|
|
|
|
|
2018-12-02 21:40:18 -08:00
|
|
|
lines = File.read("day3_input").split("\n")
|
2018-12-02 21:30:30 -08:00
|
|
|
lines.pop
|
|
|
|
|
|
|
|
REGEX = /#([0-9]+) @ ([0-9]+),([0-9]+): ([0-9]+)x([0-9]+)/
|
|
|
|
|
|
|
|
claims = {} of Int32 => Rectangle
|
|
|
|
lines.each do |line|
|
|
|
|
match = line.match(REGEX).not_nil!
|
|
|
|
claim = match[1].to_i32
|
|
|
|
x = match[2].to_i32
|
|
|
|
y = match[3].to_i32
|
|
|
|
width = match[4].to_i32
|
|
|
|
height = match[5].to_i32
|
|
|
|
claims[claim] = Rectangle.new(x, y, width, height)
|
|
|
|
end
|
|
|
|
|
|
|
|
claimed_coords = {} of Tuple(Int32, Int32) => Int32
|
|
|
|
claims.values.each do |claim|
|
|
|
|
claim.each_coord do |x, y|
|
|
|
|
coord = {x, y}
|
|
|
|
claimed_coords[coord] = (claimed_coords[coord]? || 0) + 1
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
puts "Overlapping: #{claimed_coords.values.count &.>(1)}"
|
|
|
|
|
|
|
|
claims.each do |k, v|
|
|
|
|
count_overlapped = 0
|
|
|
|
v.each_coord do |x, y|
|
|
|
|
count_overlapped += 1 if claimed_coords[{x, y}] > 1
|
|
|
|
end
|
|
|
|
if count_overlapped == 0
|
|
|
|
puts "No overlaps: #{k}"
|
|
|
|
exit
|
|
|
|
end
|
|
|
|
end
|