Sha256: 2da799caf3b31e4a7c63d48319000c8276991e7962554b1ca2e60f6e10337966

Contents?: true

Size: 1.16 KB

Versions: 396

Compression:

Stored size: 1.16 KB

Contents

class Simulator
  def instructions(text)
    text.split('').map { |char| command(char) }
  end

  def place(robot, position)
    robot.at(position[:x], position[:y])
    robot.orient(position[:direction])
  end

  def evaluate(robot, text)
    instructions(text).each do |command|
      robot.send(command)
    end
  end

  private

  def command(char)
    {
      'R' => :turn_right,
      'L' => :turn_left,
      'A' => :advance
    }[char]
  end
end

class Robot
  attr_accessor :x, :y, :bearing

  def at(x, y)
    self.x = x
    self.y = y
  end

  def coordinates
    [x, y]
  end

  def orient(direction)
    fail ArgumentError unless cardinal_directions.include?(direction)
    self.bearing = direction
  end

  def advance
    if bearing == :north
      self.y += 1
    elsif bearing == :south
      self.y -= 1
    elsif bearing == :west
      self.x -= 1
    else
      self.x += 1
    end
  end

  def turn_right
    turn(:+)
  end

  def turn_left
    turn(:-)
  end

  private

  def turn(sign)
    i = cardinal_directions.index(bearing)
    self.bearing = cardinal_directions[i.send(sign, 1) % 4]
  end

  def cardinal_directions
    [:north, :east, :south, :west]
  end
end

Version data entries

396 entries across 396 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/ruby/exercises/robot-simulator/.meta/solutions/robot_simulator.rb
trackler-2.2.1.179 tracks/ruby/exercises/robot-simulator/.meta/solutions/robot_simulator.rb
trackler-2.2.1.178 tracks/ruby/exercises/robot-simulator/.meta/solutions/robot_simulator.rb
trackler-2.2.1.177 tracks/ruby/exercises/robot-simulator/.meta/solutions/robot_simulator.rb
trackler-2.2.1.176 tracks/ruby/exercises/robot-simulator/.meta/solutions/robot_simulator.rb
trackler-2.2.1.175 tracks/ruby/exercises/robot-simulator/.meta/solutions/robot_simulator.rb
trackler-2.2.1.174 tracks/ruby/exercises/robot-simulator/.meta/solutions/robot_simulator.rb
trackler-2.2.1.173 tracks/ruby/exercises/robot-simulator/.meta/solutions/robot_simulator.rb
trackler-2.2.1.172 tracks/ruby/exercises/robot-simulator/.meta/solutions/robot_simulator.rb
trackler-2.2.1.171 tracks/ruby/exercises/robot-simulator/.meta/solutions/robot_simulator.rb
trackler-2.2.1.170 tracks/ruby/exercises/robot-simulator/.meta/solutions/robot_simulator.rb
trackler-2.2.1.169 tracks/ruby/exercises/robot-simulator/.meta/solutions/robot_simulator.rb
trackler-2.2.1.167 tracks/ruby/exercises/robot-simulator/.meta/solutions/robot_simulator.rb
trackler-2.2.1.166 tracks/ruby/exercises/robot-simulator/.meta/solutions/robot_simulator.rb
trackler-2.2.1.165 tracks/ruby/exercises/robot-simulator/.meta/solutions/robot_simulator.rb
trackler-2.2.1.164 tracks/ruby/exercises/robot-simulator/.meta/solutions/robot_simulator.rb
trackler-2.2.1.163 tracks/ruby/exercises/robot-simulator/.meta/solutions/robot_simulator.rb
trackler-2.2.1.162 tracks/ruby/exercises/robot-simulator/.meta/solutions/robot_simulator.rb
trackler-2.2.1.161 tracks/ruby/exercises/robot-simulator/.meta/solutions/robot_simulator.rb
trackler-2.2.1.160 tracks/ruby/exercises/robot-simulator/.meta/solutions/robot_simulator.rb