Advertisement
Guest User

Untitled

a guest
Dec 7th, 2019
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 1.36 KB | None | 0 0
  1. require 'set'
  2.  
  3. path_1, path_2 = nil, nil
  4. File.open('input.txt') do |file|
  5.   path_1 = file.gets
  6.   path_2 = file.gets
  7. end
  8.  
  9. def set_grid_path(path, coords_cross=nil)
  10.   grid = {}
  11.   coords_cross_steps = {}
  12.   x, y = 0, 0
  13.   steps_total = 0
  14.   path.split(',') do |action|
  15.     direction = action[0]
  16.     length = action.split('')[1..].join('').to_i
  17.  
  18.     increment_x, increment_y = 0, 0
  19.     case direction
  20.     when 'R'
  21.       increment_x = 1
  22.     when 'L'
  23.       increment_x = -1
  24.     when 'U'
  25.       increment_y = -1
  26.     when 'D'
  27.       increment_y = +1
  28.     end
  29.  
  30.     length.times do
  31.       x += increment_x
  32.       y += increment_y
  33.       position = "#{y},#{x}"
  34.       grid[position] = true
  35.       steps_total += 1
  36.       if coords_cross && coords_cross.include?(position)
  37.         coords_cross_steps[position] = steps_total
  38.       end
  39.     end
  40.   end
  41.   [grid, coords_cross_steps]
  42. end
  43.  
  44. grid_1 = set_grid_path(path_1)[0]
  45. grid_2 = set_grid_path(path_2)[0]
  46.  
  47. coords_1 = grid_1.keys.to_set
  48. coords_2 = grid_2.keys.to_set
  49. coords_cross = coords_1 & coords_2
  50. puts coords_cross.map{|coord| (coord.split(',')[0].to_i).abs + (coord.split(',')[1].to_i).abs}.min
  51.  
  52. coords_cross_steps_1 = set_grid_path(path_1, coords_cross)[1]
  53. coords_cross_steps_2 = set_grid_path(path_2, coords_cross)[1]
  54.  
  55. 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