#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
int position[2];
char character_direction;
} character_t;
char * sanitize_input(char string[]);
character_t * get_new_position(char * string, character_t *character);
int main() {
character_t *character = (character_t*)malloc(sizeof(character_t));
character->position[0] = 0;
character->position[1] = 0;
character->character_direction = 'N';
FILE* f = fopen("input.txt", "r");
while(!feof(f)) {
char input[10];
fscanf(f, "%s", input);
char * string = sanitize_input(input);
get_new_position(string, character);
}
printf("Position: [%i, %i]\n", character->position[0], character->position[1]);
printf("Blocks away: %i\n", abs(character->position[0]) + abs(character->position[1]));
return 0;
}
char * sanitize_input(char string[]) {
for(int i = 0; i < strlen(string); i++) {
if(string[i] == ',' || string[i] == ' ') {
string[i] = '\0';
}
}
return string;
}
character_t * get_new_position(char * string, character_t *character) {
int * character_position = character->position;
char character_direction = character->character_direction;
char new_direction;
int steps;
sscanf(string, "%c%i", &new_direction, &steps);
if(character_direction == 'N') {
if(new_direction == 'R') {
character_direction = 'E';
character_position[0] += steps;
} else if(new_direction == 'L') {
character_direction = 'W';
character_position[0] -= steps;
}
} else if(character_direction == 'W') {
if(new_direction == 'R') {
character_direction = 'N';
character_position[1] += steps;
} else if(new_direction == 'L') {
character_direction = 'S';
character_position[1] -= steps;
}
} else if(character_direction == 'S') {
if(new_direction == 'R') {
character_direction = 'W';
character_position[0] -= steps;
} else if(new_direction == 'L') {
character_direction = 'E';
character_position[0] += steps;
}
} else if(character_direction == 'E') {
if(new_direction == 'R') {
character_direction = 'S';
character_position[1] -= steps;
} else if(new_direction == 'L') {
character_direction = 'N';
character_position[1] += steps;
}
}
character->character_direction = character_direction;
character->position[0] = character_position[0];
character->position[1] = character_position[1];
return character;
}
Comments