advent2025

Advent of Code 2025 Solutions
git clone git://bsandro.tech/advent2025
Log | Files | Refs | LICENSE

commit 7fd372e83bd54861fc4e26e8cc1ebba8b9f427ba
parent b609d1484f17b56f2fb95e74019e25be48948f9c
Author: bsandro <email@bsandro.tech>
Date:   Thu, 11 Dec 2025 09:01:14 +0200

day11 p1

Diffstat:
Aday11.c | 94+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 94 insertions(+), 0 deletions(-)

diff --git a/day11.c b/day11.c @@ -0,0 +1,94 @@ +#include <stdio.h> +#include <string.h> +#include <stdbool.h> +#include "cputime.h" + +#define NAME_LEN 4 +#define MAX_NODES 600 + +typedef struct Node { + char name[NAME_LEN]; + int adj_l; + struct Node *adj[32]; +} Node; + +typedef struct { + Node nodes[MAX_NODES]; + int cnt; +} Nodes; + +Node * find(Nodes *nodes, char name[4]) { + Node *n = NULL; + for (int i=0;i<nodes->cnt;++i) { + if (strncmp(name, nodes->nodes[i].name, NAME_LEN-1)==0) { + return &nodes->nodes[i]; + } + } + return n; +} + +Node * find_or_create(Nodes *nodes, char name[4]) { + Node *n = find(nodes, name); + if (n!=NULL) return n; + n = &nodes->nodes[nodes->cnt++]; + strcpy(n->name, name); + return n; +} + +int bfs1(Nodes *nodes) { + int num = 0; + Node *start = find(nodes, "you"); + Node *end = find(nodes, "out"); + Node *queue[MAX_NODES] = {0}; + int front = 0; + int back = 0; + queue[back++] = start; + while (front<back) { + Node *cur = queue[front++]; + if (cur==end) num++; + for (int i=0;i<cur->adj_l;++i) { + queue[back++] = cur->adj[i]; + } + } + return num; +} + +int bfs2(Nodes *nodes) { + int num = 0; + Node *start = find(nodes, "you"); + Node *end = find(nodes, "out"); + Node *queue[MAX_NODES] = {0}; + int front = 0; + int back = 0; + queue[back++] = start; + while (front<back) { + Node *cur = queue[front++]; + if (cur==end) num++; + for (int i=0;i<cur->adj_l;++i) { + queue[back++] = cur->adj[i]; + } + } + return num; +} + +int main(void) { + char buf[NAME_LEN]; + int buf_l = 0; + Nodes nodes = {0}; + Node *node = NULL; + for (int c=getchar();c!=EOF;c=getchar()) { + if (c>='a'&&c<='z') buf[buf_l++] = c; + else if (c==':') { + node = find_or_create(&nodes, buf); + buf_l = 0; + } else if (c=='\n'||(c==' '&&buf_l>0)) { + node->adj[node->adj_l++] = find_or_create(&nodes, buf); + buf_l = 0; + if (c=='\n') node = NULL; + } + } + + int p1 = bfs1(&nodes); + printf("p1: %d\n", p1); + return 0; +}