From 477ed667b1a9bc7f73850f45449666a8907ecaed Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Wed, 20 Dec 2023 16:32:41 +0100 Subject: Added solution for 20 --- 2023/20/graph.c | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 2023/20/graph.c (limited to '2023/20/graph.c') diff --git a/2023/20/graph.c b/2023/20/graph.c new file mode 100644 index 0000000..bef0496 --- /dev/null +++ b/2023/20/graph.c @@ -0,0 +1,77 @@ +/* Picture generated with https://csacademy.com/app/graph_editor/ */ + +#include +#include +#include +#include +#include + +#define N 100 +#define ischar(c) (c >= 'a' && c <= 'z') + +typedef struct { + int nin, nout, in[N], out[N]; + char name[20], outc[N][20]; + bool isff, ison, reg[N]; +} node_t; + +char *buf, line[N][N]; +bool rx; +int b, r, n; +int64_t npush; +node_t m[N]; + +int findm(char *name) { + for (int k = 0; k < n; k++) + if (!strcmp(m[k].name, name)) + return k; + return n; +} + +int main() { + for (n = 0; (buf = fgets(line[n], N, stdin)) != NULL; n++) { + if (ischar(*buf)) b = n; + m[n].isff = *buf == '%'; + if (!ischar(*buf)) buf++; + for (int i = 0; ischar(*buf); m[n].name[i++] = *(buf++)) ; + buf += 4; + for (int i = 0; *buf != '\n'; i++) { + while (!ischar(*buf)) buf++; + for (int j = 0; ischar(*buf); m[n].outc[i][j++] = *(buf++)) ; + } + } + + for (int i = 0; i < n; i++) { + for (int j = 0; m[i].outc[j][0]; j++) { + int k = findm(m[i].outc[j]); + m[i].out[m[i].nout++] = k; + m[k].in[m[k].nin++] = i; + if (k == n) { + for (int k = 0; m[i].outc[j][k]; k++) + m[n].name[k] = m[i].outc[j][k]; + n++; + } + } + } + + for (int i = 0; i < n; i++) + if (!strcmp(m[i].name, "rx")) + r = i; + +/* Print adjacency list + printf("%d\n", n); + for (int i = 0; i < n; i++) { + printf("%d", m[i].nout); + for (int j = 0; j < m[i].nout; j++) + printf(" %d", m[i].out[j]); + printf("\n"); + } + printf("broadcaster = %d, r = %d\n", b, r); +*/ + + for (int i = 0; i < n; i++) + for (int j = 0; j < m[i].nout; j++) + printf("%d %d\n", i, m[i].out[j]); + + return 0; +} -- cgit v1.3