#include #include #define POINTLIMIT 500000 int main(void) { signed int lines[2][POINTLIMIT][3]; unsigned int bufpos = 0, pp = 0, linep[2]; short line = 0, bufls = 0, res; char numbuf[16], dir, c; fprintf(stderr,"\e[1;31mParsing input...\n"); while ((c=getchar())!=EOF) { if (c >= 'A' && c <= 'Z') { dir = c; } else if (c == ',' || c == '\n') { numbuf[bufpos] = '\0'; for (int i = 0; i1) { start = pp-1; } lines[line][pp][0] = lines[line][start][0]; lines[line][pp][1] = lines[line][start][1]; lines[line][pp][2] = 0; int va,val; switch (dir) { case 'U': va = 1, val=1; break; case 'R': va = 0, val=1; break; case 'D': va = 1, val=-1; break; case 'L': va = 0, val=-1; break; } lines[line][pp][va] = lines[line][start][va]+val; pp++; } if (c == '\n') { linep[line]=pp-1; line++; pp = 0; } bufpos = 0, bufls = 0; } else if (c >= '0' && c <= '9') { numbuf[bufpos++] = c; bufls = 1; } else { return 1; } } fprintf(stderr,"Finding closest match...\n"); int num[3] = {0}; for (int x=0, m=0; x num[1] + num[2]) { num[0] = num[1] + num[2]; } fprintf(stderr,"\e[0mFound %i|%i and %i|%i!\n\e[1;31mFound %i match(es)...\r", lines[0][x][0], lines[0][x][1], lines[1][y][0], lines[1][y][1], ++m); } } res = num[0]; } fprintf(stderr,"\nBingo:\n"); printf("%i\n", res); return 0; }