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:
| A | day06.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