Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct {
- int position[2];
- char character_direction;
- } character_t;
- character_t * get_new_position(char * string, character_t *character);
- int main() {
- // Create a basic character that starts at [0, 0], facing north
- character_t *character = (character_t*)malloc(sizeof(character_t));
- character->position[0] = 0;
- character->position[1] = 0;
- character->character_direction = 'N';
- // Grab our puzzle input and parse it
- FILE* f = fopen("input.txt", "r");
- while(!feof(f)) {
- char input[15];
- fscanf(f, "%s", input);
- get_new_position(input, character);
- }
- // The number of blocks away should be equal to the absolute difference between [x_1, y_1] and [x_0, y_0]
- // Since we start at [0, 0] and measure how many blocks we move from there the answer is simply the
- // absolute value of the sum of blocks moved in the x and y direction from our origin.
- int difference = abs(character->position[0] + character->position[1]);
- printf("Position: [%i, %i]\n", character->position[0], character->position[1]);
- printf("Blocks away: %i\n", difference);
- return 0;
- }
- character_t * get_new_position(char * string, character_t *character) {
- int * character_position = character->position;
- char character_direction = character->character_direction;
- char turn_direction;
- int steps;
- sscanf(string, "%c%i", &turn_direction, &steps);
- if(character_direction == 'N') {
- if(turn_direction == 'R') {
- character_direction = 'E';
- character_position[0] += steps;
- } else if(turn_direction == 'L') {
- character_direction = 'W';
- character_position[0] -= steps;
- }
- } else if(character_direction == 'S') {
- if(turn_direction == 'R') {
- character_direction = 'W';
- character_position[0] -= steps;
- } else if(turn_direction == 'L') {
- character_direction = 'E';
- character_position[0] += steps;
- }
- } else if(character_direction == 'E') {
- if(turn_direction == 'R') {
- character_direction = 'S';
- character_position[1] -= steps;
- } else if(turn_direction == 'L') {
- character_direction = 'N';
- character_position[1] += steps;
- }
- } else if(character_direction == 'W') {
- if(turn_direction == 'R') {
- character_direction = 'N';
- character_position[1] += steps;
- } else if(turn_direction == 'L') {
- character_direction = 'S';
- character_position[1] -= steps;
- }
- }
- // Update the character to reflect the changes made
- character->character_direction = character_direction;
- character->position[0] = character_position[0];
- character->position[1] = character_position[1];
- return character;
- }
Advertisement
Add Comment
Please, Sign In to add comment