Sha256: 7b8c09f18a2579e9bcca0823ff6b1e8c5ce29ed3e47e64ed9438b96339092fe0

Contents?: true

Size: 1.16 KB

Versions: 396

Compression:

Stored size: 1.16 KB

Contents

import Bearing.Bearing

case class Robot(bearing: Bearing, coordinates: (Int, Int)) {
  val x = coordinates._1
  val y = coordinates._2

  def advance(): Robot = bearing match {
    case Bearing.North => Robot(bearing, (x, y + 1))
    case Bearing.South => Robot(bearing, (x, y - 1))
    case Bearing.East => Robot(bearing, (x + 1, y))
    case Bearing.West => Robot(bearing, (x - 1, y))
  }

  def turnRight(): Robot =
    if (bearing.id == Bearing.maxId - 1) Robot(Bearing(0), (x, y))
    else Robot(Bearing(bearing.id + 1), (x, y))

  def turnLeft(): Robot =
    if (bearing.id == 0) Robot(Bearing(Bearing.maxId - 1), (x, y))
    else Robot(Bearing(bearing.id - 1), (x, y))

  def simulate(instructions: String): Robot =  instructions.foldLeft(this){
    case (acc, instruction) => instruction match {
      case 'A' => acc.advance()
      case 'L' => acc.turnLeft()
      case 'R' => acc.turnRight()
      case _ => throw new IllegalArgumentException("Invalid instruction - " + instruction)
    }}
}

object Bearing extends Enumeration {
  type Bearing = Value

  val North = Value(0, "North")
  val East = Value(1, "East")
  val South = Value(2, "South")
  val West = Value(3, "West")
}

Version data entries

396 entries across 396 versions & 1 rubygems

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