You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
# typed: false
|
|
|
|
wire_paths = ARGF.read.lines.map {|l|
|
|
|
|
l.split(?,).map {|i| [i[0], i[1..-1].to_i] }
|
|
|
|
}
|
|
|
|
|
|
|
|
wire_points = wire_paths.map {|path|
|
|
|
|
path.each.with_object([[0, 0]]) {|(dir, length), points|
|
|
|
|
x, y = points.last
|
|
|
|
length.times {|i|
|
|
|
|
points << case dir
|
|
|
|
when ?R then [x+i+1, y]
|
|
|
|
when ?U then [x, y+i+1]
|
|
|
|
when ?L then [x-i-1, y]
|
|
|
|
when ?D then [x, y-i-1]
|
|
|
|
end
|
|
|
|
}
|
|
|
|
}.map.with_index.to_h
|
|
|
|
}
|
|
|
|
|
|
|
|
intersections = wire_points[0].select {|k, _| wire_points[1].has_key?(k) }
|
|
|
|
intersections.delete([0, 0])
|
|
|
|
|
|
|
|
# distances = intersections.map {|(x, y), _| x.abs + y.abs }
|
|
|
|
distances = intersections.map {|p, d| d + wire_points[1].fetch(p) }
|
|
|
|
puts distances.min
|