#include #include #include #include #include #include #define SEEDS 20 void remap(FILE *input, char *row, int *seedArray, int seed, int remaps); // för varje seed: // är den i rangen seed to soil? if so, = soil + i // testa varje range så och reassigna on hit, sen spara i location array // Lägsta i array är svaret // vi har: // lista med seed // 7 maps // lagra seeds i array // array som säger om seed är omvandlat i current map // för varje rad i map, kolla varje seed (om det ej omvandlat) // vid nästa map, nolla omvandlatArray int main() { unsigned int seedArray[SEEDS] = {0}; char row[250]; char c; FILE *input; input = fopen("./input", "r"); int seed = 0; while (c = fgetc(input) != '\n') { while (isdigit(c = fgetc(input))) { seedArray[seed] = seedArray[seed] * 10 + (c - '0'); } fseek(input, -1L, SEEK_CUR); // currently stepping two steps forward so yeah if (seedArray[seed] != 0) seed++; } // for (int i = 0; i < seed; i++) // printf("Seed %d: %u\n", i + 1, seedArray[i]); int remaps = 1; while (fgets(row, 250, input) != NULL) { if (strstr(row, "map")) { remap(input, row, seedArray, seed, remaps); remaps++; } } int i = 0; int min = UINT_MAX; for (; i < seed; i++) { if (seedArray[i] < min) min = seedArray[i]; printf("Seed %d: %u\n", i + 1, seedArray[i]); } printf("%u\n", min); } void remap(FILE *input, char *row, int *seedArray, int seed, int remaps) { int seedDone[20] = {0}; while (fgets(row, 250, input) != NULL && row[0] != '\n') { unsigned int i = 0; while (!isdigit(row[i])) i++; unsigned int dest = 0; for (; isdigit(row[i]); i++) { dest = dest * 10 + row[i] - '0'; } while (!isdigit(row[i])) i++; unsigned int source = 0; for (; isdigit(row[i]); i++) { source = source * 10 + row[i] - '0'; } while (!isdigit(row[i])) i++; unsigned int range = 0; for (; isdigit(row[i]); i++) { range = range * 10 + row[i] - '0'; } range -= 1; // printf("Dest: %u, Source: %u, range: %u\n", dest, source, range + 1); for (int i = 0; i < seed; i++) { if (seedDone[i] == 0 && seedArray[i] >= source && seedArray[i] <= source + range) { // printf("Seed %d: %u is in range, moving to %u\n", i + 1, seedArray[i], dest + seedArray[i] - source); seedArray[i] = dest + seedArray[i] - source; // printf("Seed %d: %u\n", i + 1, seedArray[i]); seedDone[i] = 1; } } } // printf("Remap %d done.\n", remaps); }