From 1f855400aa5078673db68672478de92cf93c256b Mon Sep 17 00:00:00 2001 From: dobiadi <50926840+dobiadi@users.noreply.github.com> Date: Sun, 24 Dec 2023 13:01:39 +0100 Subject: [PATCH] Day20 Day21 C WIP --- day20/c/day20 | Bin 0 -> 16312 bytes day20/c/day20.c | 204 ++++++++++++++++++++++++++++++++++++++++++++++ day20/input.txt | 58 +++++++++++++ day20/sample.txt | 5 ++ day20/sample2.txt | 5 ++ day21/c/day21 | Bin 0 -> 16360 bytes day21/c/day21.c | 102 +++++++++++++++++++++++ day21/input.txt | 131 +++++++++++++++++++++++++++++ day21/sample.txt | 11 +++ 9 files changed, 516 insertions(+) create mode 100755 day20/c/day20 create mode 100644 day20/c/day20.c create mode 100644 day20/input.txt create mode 100644 day20/sample.txt create mode 100644 day20/sample2.txt create mode 100755 day21/c/day21 create mode 100644 day21/c/day21.c create mode 100644 day21/input.txt create mode 100644 day21/sample.txt diff --git a/day20/c/day20 b/day20/c/day20 new file mode 100755 index 0000000000000000000000000000000000000000..dfba3fcdd191264cb265f652e3e2cb87f68d884a GIT binary patch literal 16312 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 +#include +#include + +#define LINE_MAX_LENGTH 256 +#define MAX_CONNECTED 16 +#define MAX_MODULES 128 +#define MAX_QUEUE 1024 + +typedef enum module_type { + FLIPFLOP, + CONJUNCTION, + BROADCAST, +} module_type_t; + +typedef struct module { + module_type_t type; + char name[16]; + int name_length; + int state; + struct module *inputs[MAX_CONNECTED]; + int input_memory[MAX_CONNECTED]; + int input_num; + struct module *outputs[MAX_CONNECTED]; + int output_num; + char output_names[MAX_CONNECTED][16]; + int output_name_lengths[MAX_CONNECTED]; +} module_t; + +typedef struct signal { + int value; + module_t *module; + module_t *source; +} signal_t; + +int main() { + char *p, *buf, c, *q; + + buf = (char *)malloc(LINE_MAX_LENGTH); + memset(buf, 0, LINE_MAX_LENGTH); + p = buf; + + module_t *modules = (module_t*)malloc(MAX_MODULES * sizeof(module_t)); + memset(modules, 0, MAX_MODULES * sizeof(module_t)); + int modules_num = 0; + + while ((c = getchar()) != EOF) { + *p++ = c; + if (c == '\n') { + p = buf; + + if (*p == '%' || *p == '&' || *p == '#') { + switch (*p) { + case '%': + modules[modules_num].type = FLIPFLOP; + break; + case '&': + modules[modules_num].type = CONJUNCTION; + break; + } + p++; + } else { + modules[modules_num].type = BROADCAST; + } + q = p; + while(*p != ' ') p++; + strncpy(modules[modules_num].name, q, p - q); + modules[modules_num].name_length = p - q; + p++; + while(*p != ' ') p++; + p++; + // Read outputs + while(*p != '\0') { + q = p; + while (*p != '\n' && *p != ',') p++; + strncpy(modules[modules_num].output_names[modules[modules_num].output_num], q, p - q); + modules[modules_num].output_name_lengths[modules[modules_num].output_num] = p - q; + modules[modules_num].output_num++; + p+=2; + } + + modules_num++; + memset(buf, 0, LINE_MAX_LENGTH); + p = buf; + } + } + + // Link up modules + for (int i = 0; i < modules_num; i++) { + // Link outputs + int found = 0; + for (int j = 0; j < modules[i].output_num; j++) { + for (int k = 0; k < modules_num; k++) { + if (!strcmp(modules[k].name, modules[i].output_names[j])) { + modules[i].outputs[j] = &modules[k]; + found++; + break; + } + } + } + // Link inputs + for (int j = 0; j < modules_num; j++) { + for (int k = 0; k < modules[j].output_num; k++) { + if (!strcmp(modules[i].name, modules[j].output_names[k])) { + modules[i].inputs[modules[i].input_num] = &modules[j]; + modules[i].input_num++; + break; + } + } + } + } + + // Find start + module_t *broadcast; + for (int i = 0; i < modules_num; i++) { + if (modules[i].type == BROADCAST) { + broadcast = &modules[i]; + break; + } + } + + signal_t signal_queue[MAX_QUEUE]; + unsigned long low_pulses = 0, high_pulses = 0; + + int turned_on = 0; +#ifdef PART2 + for(unsigned long l = 0; !turned_on; l++) { +#else + for (unsigned long l = 0; l < 1000; l++) { +#endif + memset(signal_queue, 0, MAX_QUEUE * sizeof(signal_t)); + int signal_queue_length = 1; + signal_queue[0].value = 0; + signal_queue[0].module = broadcast; + signal_queue[0].source = NULL; + while (signal_queue_length > 0) { + // Pop first + signal_t signal = signal_queue[0]; + for (int i = 0; i < signal_queue_length - 1; i++) { + memcpy(&signal_queue[i], &signal_queue[i+1], sizeof(signal_t)); + } + signal_queue_length--; + int output; + if (signal.value) { + high_pulses++; + } else { + low_pulses++; + } + + if (signal.module == NULL) { + if (signal.value == 0) { + printf("Machine turn on: %lu\n", l+1); + turned_on = 1; + break; + } + continue; + } + + switch (signal.module->type) { + case FLIPFLOP: + if (signal.value == 0) { + signal.module->state = !signal.module->state; + output = signal.module->state; + } else { + output = -1; + } + break; + case BROADCAST: + output = signal.value; + break; + case CONJUNCTION: + // Update input memory + for (int i = 0; i < signal.module->input_num; i++) { + if (signal.module->inputs[i] == signal.source) { + signal.module->input_memory[i] = signal.value; + } + } + int all_high = 1; + for (int i = 0; i < signal.module->input_num; i++) { + if (signal.module->input_memory[i] == 0) { + all_high = 0; + break; + } + } + output = !all_high; + break; + } + + if (output != -1) { + for (int i = 0; i < signal.module->output_num; i++) { + signal_queue[signal_queue_length].value = output; + signal_queue[signal_queue_length].module = signal.module->outputs[i]; + signal_queue[signal_queue_length].source = signal.module; + signal_queue_length++; + } + } + } + } + + printf("%lu\n", high_pulses * low_pulses); + + free(buf); + free(modules); +} diff --git a/day20/input.txt b/day20/input.txt new file mode 100644 index 0000000..29f0795 --- /dev/null +++ b/day20/input.txt @@ -0,0 +1,58 @@ +%db -> cq +%rj -> gp, nd +%ff -> bk +%rc -> gp +%bk -> tv +%xz -> tf, bn +%gs -> bn +%ps -> rs, gp +%jr -> gp, cg +&pm -> vf +%pn -> pp, rt +%nv -> jr +%rs -> nv +%kz -> mj +%nd -> rc, gp +%nm -> rt, db +%dg -> rt, xl +%vg -> gn +%hc -> vr +%ft -> lf, bn +%mj -> hc, cz +%vb -> ft +%qd -> cz, sz +%pp -> rt +%cq -> rt, vg +%sr -> vb +%lf -> vx, bn +%lh -> pn, rt +%ls -> sl, cz +%tv -> gp, rj +%tf -> sr, bn +&mk -> vf +%bs -> rt, lh +%vx -> bn, gs +&bn -> fs, bv, vb, mk, sr, bz, cf +%rr -> ls +%bv -> xz +%hp -> bs, rt +&pk -> vf +%cg -> rq +%gn -> rt, dg +&cz -> hc, kz, rr, hf, sh +%sl -> cz, kz +broadcaster -> sh, nm, ps, fs +%cf -> bv +&vf -> rx +&rt -> pk, xl, nm, vg, db +%xl -> hp +%sh -> rr, cz +%bz -> cf +%fz -> dn, cz +&gp -> rs, nv, pm, cg, ff, bk, ps +%fs -> bz, bn +&hf -> vf +%vr -> cz, qd +%rq -> gp, ff +%sz -> cz, fz +%dn -> cz diff --git a/day20/sample.txt b/day20/sample.txt new file mode 100644 index 0000000..2dc1bab --- /dev/null +++ b/day20/sample.txt @@ -0,0 +1,5 @@ +broadcaster -> a, b, c +%a -> b +%b -> c +%c -> inv +&inv -> a diff --git a/day20/sample2.txt b/day20/sample2.txt new file mode 100644 index 0000000..2738ceb --- /dev/null +++ b/day20/sample2.txt @@ -0,0 +1,5 @@ +broadcaster -> a +%a -> inv, con +&inv -> b +%b -> con +&con -> output diff --git a/day21/c/day21 b/day21/c/day21 new file mode 100755 index 0000000000000000000000000000000000000000..4fcd3fb34e50cab8c9f389bbad960d895e0e5d80 GIT binary patch literal 16360 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 literal 0 HcmV?d00001 diff --git a/day21/c/day21.c b/day21/c/day21.c new file mode 100644 index 0000000..1181fc9 --- /dev/null +++ b/day21/c/day21.c @@ -0,0 +1,102 @@ +#include +#include +#include + +#define LINE_MAX_LENGTH 256 + +typedef enum tile_type { + GARDEN_PLOT, + ROCK, + WALKED, +} tile_type_t; + +int main(int argc, char *argv[]) { + if (argc != 2) { + fprintf(stderr, "Please specify the step number\n"); + return 1; + } + int step_number = 0; + sscanf(argv[1], "%i", &step_number); + char *p, *buf, c; + + tile_type_t map[LINE_MAX_LENGTH][LINE_MAX_LENGTH]; + int x = 0, y = 0; + + buf = (char *)malloc(LINE_MAX_LENGTH); + memset(buf, 0, LINE_MAX_LENGTH); + p = buf; + + int start[2]; + + while ((c = getchar()) != EOF) { + *p++ = c; + if (c == '\n') { + p = buf; + x = 0; + while (*p != '\n') { + switch (*p) { + case '.': + map[x][y] = GARDEN_PLOT; + break; + case '#': + map[x][y] = ROCK; + break; + case 'S': + map[x][y] = GARDEN_PLOT; + start[0] = x; + start[1] = y; + break; + } + x++; + p++; + } + y++; + memset(buf, 0, LINE_MAX_LENGTH); + p = buf; + } + } + + tile_type_t walked_curr[LINE_MAX_LENGTH][LINE_MAX_LENGTH], walked_next[LINE_MAX_LENGTH][LINE_MAX_LENGTH]; + memcpy(walked_curr, map, sizeof(map)); + walked_curr[start[0]][start[1]] = WALKED; + + for (int i = 0; i < step_number; i++) { + memcpy(walked_next, map, sizeof(map)); + for (int j = 0; j < y; j++) { + for (int k = 0; k < x; k++) { + if (walked_curr[k][j] == WALKED) { + // UP + if (j > 0 && walked_next[k][j-1] == GARDEN_PLOT) { + walked_next[k][j-1] = WALKED; + } + // LEFT + if (k > 0 && walked_next[k-1][j] == GARDEN_PLOT) { + walked_next[k-1][j] = WALKED; + } + // DOWN + if (j < y - 1 && walked_next[k][j+1] == GARDEN_PLOT) { + walked_next[k][j+1] = WALKED; + } + // RIGHT + if (k < x - 1 && walked_next[k+1][j] == GARDEN_PLOT) { + walked_next[k+1][j] = WALKED; + } + } + } + } + memcpy(walked_curr, walked_next, sizeof(map)); + } + + int part1 = 0; + + for (int i = 0; i < y; i++) { + for (int j = 0; j < x; j++) { + if (walked_curr[j][i] == WALKED) { + part1++; + } + } + } + + printf("%i\n", part1); + free(buf); +} diff --git a/day21/input.txt b/day21/input.txt new file mode 100644 index 0000000..2df6d19 --- /dev/null +++ b/day21/input.txt @@ -0,0 +1,131 @@ +................................................................................................................................... +...##......#....#...#.....#.#....#...#...#...#......#........................##......#..#..#.#........#....................##...... +...#.......#..........#..#....#................#...##.....##...................#..........###......#.....#.........#....#.#........ +........#..##.............#..#...##...#..#...##...............................#.........................#.......................... +..............#............#..#..........#.#.#....#...#......................#..#......#.##...#............................#....... +..##...............#...#...#......#.......................................#..............##...............#.....#...........#...#.. +.##............#.................#...#..#......#...................................#.......#.#..#......##................##........ +......###...#...#........#..............#....#.......##.......................##.......#..#.......#.........#...................#.. +.................#...........................................#......................#.....#.....##...........#...............#..... +..#...#....#.......##...........#..#.............#............................##........#.......#...#...#...#....#....##........... +..............#..#.....#.....#.........#..#..#..#..#.......#.#..#....##........#.....#.........#..............#........#..#...#.... +...##...............#...#.#....#............##..#.......................................#.......#...........#..#...........##....#. +.......................................#......#...........#..........#.............#..........##.............#....#..##....#....... +..................................#.............#........#...#.##.....................#....................#.##....#.............#. +.#......##...#......#..#...#...........#...#.............#.............#..#.........#..#.#........#.#...........#.................. +............#............#..........#........#..........#.....#.#...#.......#........#.#...........#....#.............#.........#.. +.....#.......##............#...#.#.#...#...#..............##..#....#......#......................#...#...#..........#......#.#..... +........#....#....#......#..........#........................#.....#....................................#.....#....#..##.##....#... +............#.................#.##.........#.........#.....#........#.........#........#....###...........#.............#.......... +....##....#..#............#...#.#..#.........................#.#....##.....................#........#.........#....#....#........#. +...#...#...........#..#..................#.......#.#..#............................................##................#............. +...........#......#....#........#.#..........................#.#......#......##.............#..#...#...#.#..................#..#... +.............................#........#............#........#........#.#.......#...............##....#........#...#..#..#.......... +..................................#...........................#.#..#.........................#...#.#......#..............##.....##. +........................#..........................#..................#...#............................#.......#...........#...##.. +.......#.#.....#....#.....#................................##...#.........##..#.....................#.............................. +......#........##..........#.................#..##......#..#.......#..........#.................................................... +....#..........#......................................................##.#..#.#.##..................#......#............##...#..... +.............#..........#.#..............................................#.#........#....#...........#.......................#..... +..#.............#....#........#.#..............#.......#......#.#..#......#.#...........................................##......... +..#.....#.....#....#...#....#..........#......#..............................#...........#............#..#.....##..........#....... +......#.#.#...#........................#..........#.#......#............#......................................#................... +.#...........#...#....................#..#..#....#.#........................................................................#.#.... +........#.#...........................#...#......#.#.#..#......##..#.#..#..#...#.#.#..................#.......##.#....#........#... +......#......#......#.....#..............#.#.........##.................#....................#............#....##........#......... +........#.............#..#............#......#........#....#............#.....#...........#..#...............###........#.....#.... +.....#.........##....#..................#..#...........#.#....##...........................#.............#..##..#.........#........ +............#....#..#.................#.............#..#.....##.....#.....#.........#........#............#........#.........##.... +.#.......#.#..........#...............#..............#.....#........#...#......#......##...........................#..#.#......##.. +.##.#.........#.............................#............................#.#..#...#.............#...#.........#...#......#......... +................................#........#..#..........##......#..................................#................#.#...#...#..... +.........#........#...........#........................#.#.##.........#.....#..#................................#.............##... +.........#.#....#..#.........#.#....#.......#.............#........#............#...#..........#...##..........#........#........#. +..............................###.....#......#......#...#....#...........#...#...............#.....##.#.....................#..#... +..........................#......#...#..............................##.#.......#........##..........#................#...##.....#.. +...........#............................#..................#...#..#.....................#...#.................................#.... +..#.#...............................................#..........#..........#..............#............##........................... +........#...#..................#.........#............#...............#.#..#.........#....#...............#.............##......... +............................##....................##......#..#....#.......#....#........................#...#.........#.....#....#. +.....#.#...............#....#..#....#...........#........#.#..................#.....##....#.......#......#......................#.. +...........#.........#.#.......#......#.#.#.......#.#...#...................#...#......#..............#...#....#.................#. +...#..#...........#.............#..........##..............................###...........#.#.....##.......#.............#.......... +...##.....................##...#..#.....#.........#.#....#.#.....................#..............#.#...#...#......#..............#.. +......##................#.................#.#........#.#..#................#............#......#.#..............#...............#.. +.......#...........#.................................##..................#...#........#.......#..##...##...........#.........#..... +..............#........#.............#..........#...............#..#.......#.........#..#...............#......#..#.........##.#... +.....#..........................................#...............#....#......#..#................................#...............#.. +...............#.......#..#.........#......#..................#........#................#.#...........#....##......#............#.. +...........................#.....##.........#...#...........#........#..#................#.#.#............#..#...#.....#........... +................#.....#..#.#......#.............#.....#...........##....#...#.#.....#.........#.................................... +....................................#...........#..............#................#............#..#...............#.##..#.##......... +.........#.#..............#........#.........#..#...#........#............##......##.......#....##.............#................... +..........##.....................#................#...#....#........#.....#..........#........#................#..###.............. +......................#............................#........................#.#..#..........#...................................... +........#...........#.#....#.........#.....#..........#..#.#..............#.......................#..#................#.#.......... +.................................................................S................................................................. +.........#.....#..#..........#.....#...........#...............##..#...............#.##....#...........#........#.#....#....#...... +.........##...#......#..#.#................#...........#..#...........#...#....#..............#......#..#.................##....... +.....................##.....................##...#.......#......#.............................#..#................................. +........................#..............#....#.................#....#...........#.................#...#.........#........#.......... +.........#..#.#...#.#..................#..............#.#...###....#......#......#.#....#..##..............#............#.......... +..#.......#...#..............#...#..##............#.........#......#.#....#.#..........................#......#..#.....#........... +..#........#......##.............................#..............#..#....................##.......#....#..#..#..........#........... +.....................#.....#...........#.##................#.#....#.#.#............#...#..##.............#.....##.................. +..##............#........#........#...#......#..........##.................#...#.#..........#...................................##. +...#.............#....#...#..#........#.........#......#..................#..#..#..........#.....#........#.#....##............#... +...#.............#...............................#.......#....#..........#..........................##......##...#.............#... +....#................#..#.#................#.....#.......#..................#.......................#.#............................ +....#.#..............#..#.........#..#..#................#..#...#.#..............#......#...................#...................... +.#......#....................#.................#........##......#......##..........#...............#..##.#.....#.............#..... +...##................#..........#......##.....#........#...#..................#........#......#....#..#.....#...................... +......#..................#......#.......#.......#..............#......#.........#.......#..#.#.#...##.....#.............#.......... +.#...................#...#....#......#.#.....#.....#..................#.#......#.......#.....#..#......................#.....#..... +...#......................#.......#..#.........#............#...#......##..........#............................................... +...#..#........#........#...........#.#...#...#.#..#.#...#..................#........#........#.#.##...#...........#............... +........#.......................#.............#....#...##.........#....................................#..............#...#........ +...#...........##........#..#.......#...............................#..................#.....#.......#.#.........#................. +..........#...............#.###...................#..................................#.....#...#................##...............#. +..#......#..........................#...........................#..................#..#........#....##...................##......#. +....#...........#..#..........................#......###................#...........................#.........#.#........#.#....... +...#...#..#........#...............#...........#.......#........................##..#...............#............#...........#..... +.....#..........................#..#........#.......#......#......#..........#..#.....#.....#..#.................#........#........ +....#...##.......................#...#.....#.....................................##.#..#....#....#................#................ +..#.....##.........#..............#.#................#.........#...#.................#.........#..............................#.... +............#...........#........#........................#.#.......#..#..#.........##...................#......##.#.......#....... +.........#......#......#............#.....#...##...#...............................#.....#..............##............#..#.....##.. +...........................#.................#...........#.........#....#.#.#....#......#..#....................#......#........... +....#.#..............................#......#..........#...........#....#.............#.#..............................#.....#..#.. +...........#...........#.............##....#......#.........#................#........#...............................#............ +...#........#.#....#.....................#..........#.......#...#.........#..........................##........#.#.#...##.......... +....#.#....#.........#.......#....................#...........#..........#....#......................#.............#.....#..#....#. +..........#................................#......#....#......#.................................................#.................. +.............#................................#...#.##.#.....#.......#....#............###.......#........##....................... +..........#......##.............#.........#............................#.#..#.......................................#.....#......#. +...#.....#.......#............#.............#.#...#.....#.............#..#..........##.......................#..................... +..........................#......#..................#..#........#............#.......##......................###.......#.....#..... +............#.#....#.#................................##......#..............#..#.#........................#......#...#...#........ +......##..........#......###...#......................#.........#.#............#..............#......#..............#.......#...... +............#........#.....#........#..#.......#...#...................#.....#..................##.............#.................#. +........#.#........##..................................#......#......................................#.....................#.#...#. +.#.......##......#.....#..........#................#...................##..#...............#.......##....................#......... +...#..#..#.............................#...................#................#....................................#........#........ +.....#....................................#.........##.............#...........................#................................... +............................#....#......#...................#..................................#...........................##...... +...............#...#..#...#.###.#...........#..............#..........#...............##........#.##.#....#.#.............##.....#. +...........#.##......#...#.#.........#.#.#...#.........................................#..........#.............#.#.............#.. +........#...............#........#........................#.#......#......#......................#...........#.........#.#...#..... +....#..#.............#......................#...................#.....##...............#...#........#.................#............ +............#......#...#.....#..........#....#...............##.....##..#.........#....#..#.......#...#..#......................... +......#...........#.......#...#.#.....#...#......#...........#......#................#................#....#.#...#................. +.......#.#...#.......#......#.................................#..............................#...........#.............#.........#. +...................................#.....#.........#.............................#..#............#...................#...#......... +...............#......#...........................#................#...............##...........#......#........#....##......#.#... +...............#....................##....#...#.....#.................................#..#.............#.#..#.....#..#.#........... +.............................#......##..#........................................##....#.................#......#....#...#......... +......#.#.#...............#.......#............................................................#................#..........#..#.... +...#.#...........#..#......#....###...............#..#..#......................#....#..............#......#................#....... +.......................#....#.....#..#.##.#..........#.....................#..................................#....####.##......... +......#..........##...#...........................#....#.................#........#.......................#.................#..#... +.................#..#...................#..#...#...##...#..................#..........#.#....#..#...........................#....#. +................................................................................................................................... diff --git a/day21/sample.txt b/day21/sample.txt new file mode 100644 index 0000000..9e1d842 --- /dev/null +++ b/day21/sample.txt @@ -0,0 +1,11 @@ +........... +.....###.#. +.###.##..#. +..#.#...#.. +....#.#.... +.##..S####. +.##..#...#. +.......##.. +.##.#.####. +.##..##.##. +...........