/* Dial from 0–99, start at 50. You get lines like L68 or R5: L = move left (subtract) R = move right (add) Wrap around with modulo 100. After each move, check if the dial is on 0. The password = how many times you land on 0 during the whole sequence. */ #include #include int main(int argc, char* argv[]) { printf("Advent Of Code Day 1 part 2\n\n"); // remove argc so gcc wont cry (void)argc; // base vars int start = 50; int pos = start; int counter = 0; // read the input file char* inpf = NULL; inpf = argv[1]; if (inpf == NULL) inpf = "input.txt"; FILE* ptr = fopen(inpf, "r"); if(ptr == NULL) { printf("error: no such file %s\n", inpf); return 1; } printf("first position: %d\n", pos); // process instructions char line[9]; // 8 chars + eol while(fscanf(ptr, "%9s", line) == 1) { char drc = line[0]; int num = atoi(&line[1]); printf("%c %d\n", drc, num); //if (drc == 'R') pos += num; //if (drc == 'L') pos -= num; if (drc == 'R') { for(int i = 0; i < num; i++) { if (pos + 1 < 100) { pos += 1; } else { pos += 1; pos -= 100; //printf("overflow -=100\n"); } if (pos == 0) counter++; } } if (drc == 'L') { for (int i = 0; i < num; i++) { if (pos - 1 >= 0) { pos -= 1; } else { pos -= 1; pos += 100; } if (pos == 0) counter++; } } while (pos > 99) { //pos -= 100; for (int i = 0; i < 100; i++) { if (pos == 0) counter++; pos -= 1; } } while (pos < 0){ //pos += 100; for (int i = 0; i < 100; i++) { if (pos == 0) counter++; pos += 1; } } //if (pos == 0) counter++; printf("current position: %d\n", pos); printf("counter is: %d\n", counter); } //printf("current position: %d\n", pos); printf("\npassword is: %d\n", counter); return 0; }