Advertisement
Guest User

Untitled

a guest
Dec 12th, 2020
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 1.19 KB | None | 0 0
  1. class Ship
  2.   def initialize(orders = [])
  3.     @orders = orders
  4.     @heading = 90
  5.     @position = { x: 0, y: 0 }
  6.     @waypoint = { x: 10, y: 1 }
  7.   end
  8.  
  9.   def follow_orders
  10.     @orders.each do |order|
  11.       send(order.scan(/\D/).join, order.scan(/\d*/).join.to_i)
  12.     end
  13.   end
  14.  
  15.   def load_orders(filename)
  16.     @orders = File.readlines(filename, chomp: true)
  17.   end
  18.  
  19.   def manhattan_distance
  20.     @position[:x].abs + @position[:y].abs
  21.   end
  22.  
  23.   private
  24.  
  25.   def N(distance)
  26.     @waypoint[:y] += distance
  27.   end
  28.  
  29.   def S(distance)
  30.     @waypoint[:y] -= distance
  31.   end
  32.  
  33.   def E(distance)
  34.     @waypoint[:x] += distance
  35.   end
  36.  
  37.   def W(distance)
  38.     @waypoint[:x] -= distance
  39.   end
  40.  
  41.   def L(degrees)
  42.     (degrees / 90).times do
  43.       @waypoint = { x: (0 - @waypoint[:y]), y: @waypoint[:x]}
  44.     end
  45.   end
  46.  
  47.   def R(degrees)
  48.     (degrees / 90).times do
  49.       @waypoint = { x: @waypoint[:y], y: (0 - @waypoint[:x])}
  50.     end
  51.   end
  52.  
  53.   def F(distance)
  54.     @position[:x] += (@waypoint[:x] * distance)
  55.     @position[:y] += (@waypoint[:y] * distance)
  56.   end
  57. end
  58.  
  59. ship = Ship.new
  60. ship.load_orders('input')
  61. ship.follow_orders
  62.  
  63. puts "Manhattan Distance: #{ship.manhattan_distance}"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement