Index: aoc2015.c ================================================================== --- aoc2015.c +++ aoc2015.c @@ -1,11 +1,52 @@ +#include #include #include #include #include #include "aocdailies.h" #include "aocutils.h" + +static void gridchange(bool *grid, int v, + unsigned r1, unsigned c1, unsigned r2, unsigned c2) { + unsigned firstrow = (r1 < r2) ? r1 : r2; + unsigned lastrow = (r1 < r2) ? r2 : r1; + unsigned firstcol = (c1 < c2) ? c1 : c2; + unsigned lastcol = (c1 < c2) ? c2 : c1; + for (unsigned row = firstrow; row <= lastrow; row++) { + for (unsigned col = firstcol; col <= lastcol; col++) { + grid[1000*row + col] = (v < 0) ? !grid[1000*row + col] : !!v; + } + } +} + +void aoc201506(char *data, size_t len) { + (void)len; // unused argument + bool *grid_ptr = calloc(1000 * 1000, 1); + char *line = strtok(data, "\n"); + while (line) { + unsigned x1, x2, y1, y2; + char *err = line; + while (!isdigit((unsigned char)*err)) err++; + y1 = strtoul(err, &err, 10); err++; + x1 = strtoul(err, &err, 10); while (!isdigit((unsigned char)*err)) err++; + y2 = strtoul(err, &err, 10); err++; + x2 = strtoul(err, &err, 10); + if (line[6] == 'n') gridchange(grid_ptr, 1, y1, x1, y2, x2); + if (line[6] == 'f') gridchange(grid_ptr, 0, y1, x1, y2, x2); + if (line[6] == ' ') gridchange(grid_ptr, -1, y1, x1, y2, x2); + line = strtok(NULL, "\n"); + } + unsigned lit = 0; + for (unsigned row = 0; row < 1000; row++) { + for (unsigned col = 0; col < 1000; col++) { + lit += grid_ptr[1000*row + col]; + } + } + free(grid_ptr); + printf("After following the instructions, there are %u lights lit.\n", lit); +} void aoc201505(char *data, size_t len) { (void)len; // unused argument unsigned nice = 0, nice2 = 0; char *line = strtok(data, "\n"), *curr; Index: aocdailies.c ================================================================== --- aocdailies.c +++ aocdailies.c @@ -35,12 +35,12 @@ case 201511: p = aoc201511; break; case 201510: p = aoc201510; break; case 201509: p = aoc201509; break; case 201508: p = aoc201508; break; case 201507: p = aoc201507; break; - case 201506: p = aoc201506; break; #endif + case 201506: p = aoc201506; break; case 201505: p = aoc201505; break; case 201504: p = aoc201504; break; case 201503: p = aoc201503; break; case 201502: p = aoc201502; break; case 201501: p = aoc201501; break; Index: aocdailies.h ================================================================== --- aocdailies.h +++ aocdailies.h @@ -34,12 +34,12 @@ aocfunc aoc201511; aocfunc aoc201510; aocfunc aoc201509; aocfunc aoc201508; aocfunc aoc201507; -aocfunc aoc201506; #endif +aocfunc aoc201506; aocfunc aoc201505; aocfunc aoc201504; aocfunc aoc201503; aocfunc aoc201502; aocfunc aoc201501;