70 lines
1.3 KiB
C
70 lines
1.3 KiB
C
/*
|
||
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 <stdio.h>
|
||
#include <stdlib.h>
|
||
|
||
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;
|
||
}
|
||
|
||
// 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') {
|
||
for(int i = 0; i < num; i++) {
|
||
if (pos + 1 < 100) {
|
||
pos += 1;
|
||
} else {
|
||
pos += 1;
|
||
pos -= 100;
|
||
}
|
||
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++;
|
||
}
|
||
}
|
||
}
|
||
|
||
printf("\npassword is: %d\n", counter);
|
||
return 0;
|
||
}
|