Files
adventofcode25/day1/day1p2.c
2025-12-09 22:43:42 +01:00

97 lines
1.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
Dial from 099, 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;
}
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;
}