Moortiii

day_1_1 (Simplified)

Nov 3rd, 2017
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.92 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct {
  5.     int position[2];
  6.     char character_direction;
  7. } character_t;
  8.  
  9. character_t * get_new_position(char * string, character_t *character);
  10.  
  11. int main() {
  12.  
  13.     // Create a basic character that starts at [0, 0], facing north
  14.     character_t *character = (character_t*)malloc(sizeof(character_t));
  15.     character->position[0] = 0;
  16.     character->position[1] = 0;
  17.     character->character_direction = 'N';
  18.  
  19.     // Grab our puzzle input and parse it
  20.     FILE* f = fopen("input.txt", "r");
  21.     while(!feof(f)) {
  22.         char input[15];
  23.         fscanf(f, "%s", input);
  24.         get_new_position(input, character);
  25.     }
  26.  
  27.     // The number of blocks away should be equal to the absolute difference between [x_1, y_1] and [x_0, y_0]
  28.     // Since we start at [0, 0] and measure how many blocks we move from there the answer is simply the
  29.     // absolute value of the sum of blocks moved in the x and y direction from our origin.
  30.     int difference = abs(character->position[0] + character->position[1]);
  31.     printf("Position: [%i, %i]\n", character->position[0], character->position[1]);
  32.     printf("Blocks away: %i\n", difference);
  33.     return 0;
  34. }
  35.  
  36. character_t * get_new_position(char * string, character_t *character) {
  37.     int * character_position = character->position;
  38.     char character_direction = character->character_direction;
  39.     char turn_direction;
  40.     int steps;
  41.     sscanf(string, "%c%i", &turn_direction, &steps);
  42.  
  43.     if(character_direction == 'N') {
  44.         if(turn_direction == 'R') {
  45.             character_direction = 'E';
  46.             character_position[0] += steps;
  47.         } else if(turn_direction == 'L') {
  48.             character_direction = 'W';
  49.             character_position[0] -= steps;
  50.         }
  51.     } else if(character_direction == 'S') {
  52.         if(turn_direction == 'R') {
  53.             character_direction = 'W';
  54.             character_position[0] -= steps;
  55.         } else if(turn_direction == 'L') {
  56.             character_direction = 'E';
  57.             character_position[0] += steps;
  58.         }
  59.     } else if(character_direction == 'E') {
  60.         if(turn_direction == 'R') {
  61.             character_direction = 'S';
  62.             character_position[1] -= steps;
  63.         } else if(turn_direction == 'L') {
  64.             character_direction = 'N';
  65.             character_position[1] += steps;
  66.         }
  67.     } else if(character_direction == 'W') {
  68.         if(turn_direction == 'R') {
  69.             character_direction = 'N';
  70.             character_position[1] += steps;
  71.         } else if(turn_direction == 'L') {
  72.             character_direction = 'S';
  73.             character_position[1] -= steps;
  74.         }
  75.     }
  76.  
  77.     // Update the character to reflect the changes made
  78.     character->character_direction = character_direction;
  79.     character->position[0] = character_position[0];
  80.     character->position[1] = character_position[1];
  81.     return character;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment