github.com/cycloss/advent-of-code@v0.0.0-20221210145555-15039b95faa6/2020/day5/day5.c (about)

     1  
     2  
     3  #include <hashTable.h>
     4  #include <stdio.h>
     5  #include <stdlib.h>
     6  #include <utilities.h>
     7  
     8  void intPrinter(void* p) {
     9      printf("%d\n", *(int*)p);
    10  }
    11  
    12  int main() {
    13      timer(START);
    14      FILE* in = fopen("day5.txt", "r");
    15      hashTable* ht = createHashTable(intHash, intComp);
    16      int max = 0;
    17      for (char buff[12]; fgets(buff, 12, in);) {
    18          int low = 0, high = 127;
    19          for (int i = 0; i < 7; i++) {
    20              if (buff[i] == 'F') {
    21                  high = (high - 1 - low) / 2 + low;
    22              } else {
    23                  low = (high + 1 - low) / 2 + low;
    24              }
    25          }
    26          int l = 0, r = 7;
    27          for (int i = 7; i < 10; i++) {
    28              if (buff[i] == 'L') {
    29                  r = (r - 1 - l) / 2 + l;
    30              } else {
    31                  l = (r + 1 - l) / 2 + l;
    32              }
    33          }
    34          int* id = malloc(sizeof(int));
    35          *id = low * 8 + l;
    36          max = *id > max ? *id : max;
    37          addTableItem(ht, id);
    38      }
    39      printf("Max ID: %d\n", max);
    40  
    41      for (int i = 0, i2 = 1, i3 = 2; i < 1021; i++, i2++, i3++) {
    42          bool first = tableContains(ht, &i), second = tableContains(ht, &i2), third = tableContains(ht, &i3);
    43          if (first && !second && third) {
    44              printf("My seat ID: %d\n", i2);
    45              break;
    46          }
    47      }
    48      freeTable(ht, true);
    49      fclose(in);
    50      timer(STOP);
    51  }