#include #include #include #include struct list { int num; struct list *next; }; bool even_digits(int x) { int i = 0; while (x /= 10) i++; return i % 2; } void split_stone(struct list *stones) { int digits = 0; int x = stones->num; while (x /= 10) digits++; int a = stones->num; int b = 0; for (int i = 0; i < digits; i++) { b = b * 10 + a % 10; a /= 10; } struct list *tmp = stones->next; stones->next = malloc(sizeof(struct list)); stones->num = a; stones->next->num = b; stones->next->next = tmp; } int main () { // figure out data dimensions FILE *input = fopen("./inputDemo", "r"); unsigned int tmp; unsigned int array[10]; for (int i = 0; i < 10; i++) array[i] = -1; for (int i = 0; fscanf(input, "%d", &tmp) == 1; i++) { array[i] = tmp; } fclose(input); // put stones into list struct list *stones = malloc(sizeof(struct list)); stones->num = array[0]; stones->next = NULL; struct list *current = stones; for (int i = 1; array[i] != -1; i++) { while (current->next != NULL) current = current->next; current->next = malloc(sizeof(struct list)); current->next->next = NULL; current->next->num = array[i]; } // loop through list for (int i = 0; i < 6; i++) { current = stones; while (current) { // 0 => make 1 if (current->num == 0) current->num = 1; // even number of digits => split, fix list shit else if (even_digits(current->num)) split_stone(current); // (point first split onto second split, second split onto old ptr) // else => mult 2024 else current->num *= 2024; current = current->next; } } current = stones; int sum = 0; printf("Stones: "); while (current) { printf("%d ", current->num); sum++; current = current->next; } printf("%d\n", sum); }