Index: aoc2015.c ================================================================== --- aoc2015.c +++ aoc2015.c @@ -1,10 +1,40 @@ #include #include #include +#include #include "aocdailies.h" #include "aocutils.h" + +void aoc201505(char *data, size_t len) { + (void)len; // unused argument + char *line = strtok(data, "\n"), *vtest; + unsigned nice = 0; + while (line) { + if (!strstr(line, "ab")) { + if (!strstr(line, "cd")) { + if (!strstr(line, "pq")) { + if (!strstr(line, "xy")) { + for (vtest = line; vtest[1]; vtest++) { + if (vtest[0] == vtest[1]) break; + } + if (vtest[0] == vtest[1]) { + unsigned vowels = 0; + for (vtest = line; *vtest; vtest++) { + if (strchr("aeiou", *vtest)) vowels++; + if (vowels == 3) break; + } + nice += (vowels == 3); + } + } + } + } + } + line = strtok(NULL, "\n"); + } + printf("There are %u nice strings.\n", nice); +} void aoc201504(char *data, size_t len) { data[--len] = 0; // remove newline, adjust `len` char longkey[128]; unsigned extra = 1; Index: aocdailies.c ================================================================== --- aocdailies.c +++ aocdailies.c @@ -36,12 +36,12 @@ 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; - case 201505: p = aoc201505; break; #endif + 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 @@ -35,12 +35,12 @@ aocfunc aoc201510; aocfunc aoc201509; aocfunc aoc201508; aocfunc aoc201507; aocfunc aoc201506; -aocfunc aoc201505; #endif +aocfunc aoc201505; aocfunc aoc201504; aocfunc aoc201503; aocfunc aoc201502; aocfunc aoc201501;