advent2025

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

commit 96dd562b534a326824aa829de48c0a0bd90c68a9
parent efa5101ffd0cf13d5a86e6def1e16ca4adab1bd5
Author: bsandro <email@bsandro.tech>
Date:   Sat,  6 Dec 2025 08:39:46 +0200

day06 p1; p2 is not finished yet

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

diff --git a/day06.c b/day06.c @@ -0,0 +1,85 @@ +#include <stdio.h> +#include <inttypes.h> +#include "cputime.h" + +// tail -n1 inputs/day06.txt | sed 's/\s/\n/g'|sort|grep '+\|*'|wc -l +#define W 1001 +#define H 5 +#define DIG 4 + +typedef struct { + char symbols[DIG]; + int len; +} Number; + +int btoi(int buf[16], int bufl) { + int num = 0; + for (int i=0;i<bufl;++i) num = num*10+buf[i]; + return num; +} + +uint64_t part1(int numbers[H][W], int x, char c) { + uint64_t num = 0; + for (int dy=0;dy<H;++dy) { + if (numbers[dy][x]==0) continue; + if (c=='*') num = (num==0?1:num) * numbers[dy][x]; + if (c=='+') num += numbers[dy][x]; + } + return num; +} + +void reverse(char symbols[DIG]) { + for (int i=0;i<DIG/2;++i) { + char t = symbols[i]; + symbols[i] = symbols[DIG-i-1]; + symbols[DIG-i-1] = t; + } +} + +uint64_t part2(Number digits[H][W], int x, char c) { + uint64_t num = 0; + for (int y=0;y<H;++y) { + for (int d=0;d<DIG;++d) { + Number n = digits[y][x]; + printf("%2c",n.symbols[d]>0?n.symbols[d]:'0'); + } + printf("\n"); + } + (void)c; + return num; +} + +int main(void) { + int numbers[H][W] = {0}; + Number digits[H][W] = {0}; + int x = 0; + int y = 0; + int buf[8] = {0}; + int bufl = 0; + uint64_t p1 = 0; + uint64_t p2 = 0; + for (int c=getchar();c!=EOF;c=getchar()) { + if (c>='0'&&c<='9') { + buf[bufl++] = c-'0'; + digits[y][x].symbols[digits[y][x].len++]=c; + } else if (c==' '||c=='\n') { + if (bufl!=0) { + numbers[y][x] = btoi(buf, bufl); + reverse(digits[y][x].symbols); + bufl = 0; + x++; + } + if (c=='\n') { + y++; + x = 0; + } + } else if (c=='*'||c=='+') { + p1 += part1(numbers, x, c); + p2 += part2(digits, x, c); + x++; + } + } + printf("p1: %"PRIu64"\np2: %"PRIu64"\n", p1, p2); + return 0; +} +// 540238937 wrong