Sha256: 20c73c5c467f56a06c66260d60ae2390a42d3165cd940213af14b6505c8ac76c

Contents?: true

Size: 1.2 KB

Versions: 188

Compression:

Stored size: 1.2 KB

Contents

fun Orientation.turnLeft()  = Orientation.values()[Math.floorMod(ordinal - 1, Orientation.values().size)]
fun Orientation.turnRight() = Orientation.values()[Math.floorMod(ordinal + 1, Orientation.values().size)]

class Robot(var gridPosition: GridPosition = GridPosition(0, 0), var orientation: Orientation = Orientation.NORTH) {

    fun advance() {
        gridPosition = when (orientation) {
            Orientation.NORTH -> gridPosition.copy(y = gridPosition.y + 1)
            Orientation.EAST  -> gridPosition.copy(x = gridPosition.x + 1)
            Orientation.SOUTH -> gridPosition.copy(y = gridPosition.y - 1)
            Orientation.WEST  -> gridPosition.copy(x = gridPosition.x - 1)
        }
    }

    fun turnLeft() {
        orientation = orientation.turnLeft()
    }

    fun turnRight() {
        orientation = orientation.turnRight()
    }

    fun simulate(instructions: String) {
        for (instruction in instructions) {
            when (instruction) {
                'A' -> advance()
                'R' -> turnRight()
                'L' -> turnLeft()
                else -> throw IllegalArgumentException(String.format("Invalid instruction: '%s'", instruction))
            }
        }
    }

}

Version data entries

188 entries across 188 versions & 1 rubygems

Version Path
trackler-2.2.1.78 tracks/kotlin/exercises/robot-simulator/.meta/src/reference/kotlin/Robot.kt
trackler-2.2.1.77 tracks/kotlin/exercises/robot-simulator/.meta/src/reference/kotlin/Robot.kt
trackler-2.2.1.76 tracks/kotlin/exercises/robot-simulator/.meta/src/reference/kotlin/Robot.kt
trackler-2.2.1.75 tracks/kotlin/exercises/robot-simulator/.meta/src/reference/kotlin/Robot.kt
trackler-2.2.1.74 tracks/kotlin/exercises/robot-simulator/.meta/src/reference/kotlin/Robot.kt
trackler-2.2.1.73 tracks/kotlin/exercises/robot-simulator/.meta/src/reference/kotlin/Robot.kt
trackler-2.2.1.72 tracks/kotlin/exercises/robot-simulator/.meta/src/reference/kotlin/Robot.kt
trackler-2.2.1.71 tracks/kotlin/exercises/robot-simulator/.meta/src/reference/kotlin/Robot.kt
trackler-2.2.1.70 tracks/kotlin/exercises/robot-simulator/.meta/src/reference/kotlin/Robot.kt
trackler-2.2.1.69 tracks/kotlin/exercises/robot-simulator/.meta/src/reference/kotlin/Robot.kt
trackler-2.2.1.68 tracks/kotlin/exercises/robot-simulator/.meta/src/reference/kotlin/Robot.kt
trackler-2.2.1.67 tracks/kotlin/exercises/robot-simulator/.meta/src/reference/kotlin/Robot.kt
trackler-2.2.1.66 tracks/kotlin/exercises/robot-simulator/.meta/src/reference/kotlin/Robot.kt
trackler-2.2.1.65 tracks/kotlin/exercises/robot-simulator/.meta/src/reference/kotlin/Robot.kt
trackler-2.2.1.64 tracks/kotlin/exercises/robot-simulator/.meta/src/reference/kotlin/Robot.kt
trackler-2.2.1.63 tracks/kotlin/exercises/robot-simulator/.meta/src/reference/kotlin/Robot.kt
trackler-2.2.1.62 tracks/kotlin/exercises/robot-simulator/.meta/src/reference/kotlin/Robot.kt
trackler-2.2.1.61 tracks/kotlin/exercises/robot-simulator/.meta/src/reference/kotlin/Robot.kt
trackler-2.2.1.60 tracks/kotlin/exercises/robot-simulator/.meta/src/reference/kotlin/Robot.kt
trackler-2.2.1.59 tracks/kotlin/exercises/robot-simulator/.meta/src/reference/kotlin/Robot.kt