Moortiii

day_1_1

Nov 3rd, 2017
396
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.73 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct {
  6.     int position[2];
  7.     char character_direction;
  8. } character_t;
  9.  
  10. char * sanitize_input(char string[]);
  11. character_t * get_new_position(char * string, character_t *character);
  12.  
  13. int main() {
  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.     FILE* f = fopen("input.txt", "r");
  19.     while(!feof(f)) {
  20.         char input[10];
  21.         fscanf(f, "%s", input);
  22.         char * string = sanitize_input(input);
  23.         get_new_position(string, character);
  24.     }
  25.  
  26.     printf("Position: [%i, %i]\n", character->position[0], character->position[1]);
  27.     printf("Blocks away: %i\n", abs(character->position[0]) + abs(character->position[1]));
  28.     return 0;
  29. }
  30.  
  31. char * sanitize_input(char string[]) {
  32.     for(int i = 0; i < strlen(string); i++) {
  33.         if(string[i] == ',' || string[i] == ' ') {
  34.             string[i] = '\0';
  35.         }
  36.     }
  37.     return string;
  38. }
  39.  
  40. character_t * get_new_position(char * string, character_t *character) {
  41.     int * character_position = character->position;
  42.     char character_direction = character->character_direction;
  43.     char new_direction;
  44.     int steps;
  45.     sscanf(string, "%c%i", &new_direction, &steps);
  46.  
  47.     if(character_direction == 'N') {
  48.         if(new_direction == 'R') {
  49.             character_direction = 'E';
  50.             character_position[0] += steps;
  51.         } else if(new_direction == 'L') {
  52.             character_direction = 'W';
  53.             character_position[0] -= steps;
  54.         }
  55.     } else if(character_direction == 'W') {
  56.         if(new_direction == 'R') {
  57.             character_direction = 'N';
  58.             character_position[1] += steps;
  59.         } else if(new_direction == 'L') {
  60.             character_direction = 'S';
  61.             character_position[1] -= steps;
  62.         }
  63.     } else if(character_direction == 'S') {
  64.         if(new_direction == 'R') {
  65.             character_direction = 'W';
  66.             character_position[0] -= steps;
  67.         } else if(new_direction == 'L') {
  68.             character_direction = 'E';
  69.             character_position[0] += steps;
  70.         }
  71.     } else if(character_direction == 'E') {
  72.         if(new_direction == 'R') {
  73.             character_direction = 'S';
  74.             character_position[1] -= steps;
  75.         } else if(new_direction == 'L') {
  76.             character_direction = 'N';
  77.             character_position[1] += steps;
  78.         }
  79.     }
  80.     character->character_direction = character_direction;
  81.     character->position[0] = character_position[0];
  82.     character->position[1] = character_position[1];
  83.     return character;
  84. }
Advertisement
Add Comment
Please, Sign In to add comment