AdventOfCode-2019/day3.cr

44 lines
915 B
Crystal

def parse(s)
s.split(",").map { |ss| { ss[0], ss[1..].to_i32 } }
end
def run_line(l)
poses = Set({Int32,Int32}).new
step_map = {} of {Int32,Int32} => Int32
x, y, steps = 0, 0, 0
l.each do |cmd|
dir, len = cmd
dx, dy = 0, 0
case dir
when 'U'
dy = 1
when 'D'
dy = -1
when 'L'
dx = -1
when 'R'
dx = 1
end
len.times do |i|
x += dx
y += dy
steps += 1
poses << {x,y}
step_map[{x,y}] ||= steps
end
end
return {poses, step_map}
end
lines = File.read("day3.txt").lines.map(&.chomp)
# wire1 = parse("R8,U5,L5,D3")
# wire2 = parse("U7,R6,D4,L4")
# puts run_line(wire1)
# puts run_line(wire2)
wire1 = parse(lines[0])
wire2 = parse(lines[1])
poses1, steps1 = run_line(wire1)
poses2, steps2 = run_line(wire2)
puts (poses1 & poses2).min_of { |p| p[0] + p[1] }
puts (poses1 & poses2).min_of { |p| steps1[p] + steps2[p] }