#include #include #include #include #include int dial_translate(int pos, int offset) { int final = pos + offset; int fpos = final; if (final < 0) {fpos = 100 + final;} if (final >= 100) {fpos = final - 100;} return fpos % 100; } int main() { int pos = 50; int count = 0; int fd = open("./day1.input", O_RDONLY); struct stat stat; fstat(fd, &stat); char charbuf[stat.st_size]; read(fd, charbuf, stat.st_size); printf("Size: %d\n", stat.st_size); int p; for (p = 0; p < (sizeof(charbuf) - sizeof(char)); p++) { char cur = charbuf[p]; int direction; if (cur == 'L') {direction = -1;} else if (cur == 'R') {direction = 1;} p++; int i = 0; char numline[100] = {0}; while (charbuf[p] != '\n') { numline[i] = charbuf[p]; i++; p++; } int offset = atoi(numline) * direction; printf("Offset: %d\n", offset); pos = dial_translate(pos, offset); if (pos == 0) { count++; } printf("Dial at: %d\n", pos); } printf("Password: %d\n", count); return 0; }