Sha256: 7c480e53ef900b565612fb509be4001cf3f2f3af7aa93abba3a1e88251553995

Contents?: true

Size: 1.5 KB

Versions: 132

Compression:

Stored size: 1.5 KB

Contents

#include <string.h>
#include "robot_simulator.h"

robot_grid_status_t robot_init(void)
{
   return (robot_init_with_position
           (DEFAULT_BEARING, DEFAULT_X_COORDINATE, DEFAULT_Y_COORDINATE));
}

robot_grid_status_t robot_init_with_position(int bearing, int x, int y)
{
   robot_grid_status_t robot = { bearing, {x, y} };

   if ((bearing < HEADING_NORTH) || (bearing >= HEADING_MAX)) {
      robot.bearing = DEFAULT_BEARING;
   }
   return robot;
}

void robot_turn_right(robot_grid_status_t * robot)
{
   robot->bearing = (robot->bearing + 1) % HEADING_MAX;
}

void robot_turn_left(robot_grid_status_t * robot)
{
   robot->bearing = ((robot->bearing - 1) + HEADING_MAX) % HEADING_MAX;
}

void robot_advance(robot_grid_status_t * robot)
{
   switch (robot->bearing) {
   case HEADING_NORTH:
      robot->grid.y_position++;
      break;

   case HEADING_EAST:
      robot->grid.x_position++;
      break;

   case HEADING_SOUTH:
      robot->grid.y_position--;
      break;

   case HEADING_WEST:
      robot->grid.x_position--;
      break;

   default:
      break;
   }
}

void robot_simulator(robot_grid_status_t * robot, const char *commands)
{
   for (unsigned long index = 0; index < strlen(commands); index++) {
      switch (commands[index]) {
      case COMMAND_LEFT:
         robot_turn_left(robot);
         break;

      case COMMAND_RIGHT:
         robot_turn_right(robot);
         break;

      case COMMAND_ADVANCE:
         robot_advance(robot);
         break;

      default:
         break;
      }
   }
}

Version data entries

132 entries across 132 versions & 1 rubygems

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