Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'set'
- path_1, path_2 = nil, nil
- File.open('input.txt') do |file|
- path_1 = file.gets
- path_2 = file.gets
- end
- def set_grid_path(path, coords_cross=nil)
- grid = {}
- coords_cross_steps = {}
- x, y = 0, 0
- steps_total = 0
- path.split(',') do |action|
- direction = action[0]
- length = action.split('')[1..].join('').to_i
- increment_x, increment_y = 0, 0
- case direction
- when 'R'
- increment_x = 1
- when 'L'
- increment_x = -1
- when 'U'
- increment_y = -1
- when 'D'
- increment_y = +1
- end
- length.times do
- x += increment_x
- y += increment_y
- position = "#{y},#{x}"
- grid[position] = true
- steps_total += 1
- if coords_cross && coords_cross.include?(position)
- coords_cross_steps[position] = steps_total
- end
- end
- end
- [grid, coords_cross_steps]
- end
- grid_1 = set_grid_path(path_1)[0]
- grid_2 = set_grid_path(path_2)[0]
- coords_1 = grid_1.keys.to_set
- coords_2 = grid_2.keys.to_set
- coords_cross = coords_1 & coords_2
- puts coords_cross.map{|coord| (coord.split(',')[0].to_i).abs + (coord.split(',')[1].to_i).abs}.min
- coords_cross_steps_1 = set_grid_path(path_1, coords_cross)[1]
- coords_cross_steps_2 = set_grid_path(path_2, coords_cross)[1]
- puts coords_cross_steps_1.map{ |coords, steps| steps + coords_cross_steps_2[coords]}.min
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement