C
Merry Christmas everyone!
Code
#include "common.h"
int
main(int argc, char **argv)
{
static char buf[7];
static short h[500][5]; /* heights */
static short iskey[500];
int p1=0, nh=0, i,j,k;
if (argc > 1)
DISCARD(freopen(argv[1], "r", stdin));
for (nh=0; !feof(stdin) && !ferror(stdin); nh++) {
assert(nh < (int)LEN(h));
for (i=0; i<7; i++) {
fgets(buf, 7, stdin);
if (i==0)
iskey[nh] = buf[0] == '#';
for (j=0; j<5; j++)
h[nh][j] += buf[j] == '#';
}
/* skip empty line */
fgets(buf, 7, stdin);
}
for (i=0; i<nh; i++)
for (j=0; j<nh; j++)
if (iskey[i] && !iskey[j]) {
for (k=0; k<5 && h[i][k] + h[j][k] <= 7; k++) ;
p1 += k == 5;
}
printf("25: %d\n", p1);
return 0;
}
https://codeberg.org/sjmulder/aoc/src/branch/master/2024/c/day25.c
Made the 1 second challenge with most of it to spare! π
$ time bmake bench
day01 0:00.00 1912 Kb 0+88 faults
day02 0:00.00 1992 Kb 0+91 faults
day03 0:00.00 1920 Kb 0+93 faults
day04 0:00.00 1912 Kb 0+90 faults
day05 0:00.00 2156 Kb 0+91 faults
day06 0:00.03 1972 Kb 0+100 faults
day07 0:00.06 1892 Kb 0+89 faults
day08 0:00.00 1772 Kb 0+87 faults
day09 0:00.02 2024 Kb 0+137 faults
day10 0:00.00 1876 Kb 0+87 faults
day11 0:00.00 6924 Kb 0+3412 faults
day12 0:00.00 1952 Kb 0+103 faults
day13 0:00.00 1908 Kb 0+88 faults
day14 0:00.05 1944 Kb 0+92 faults
day15 0:00.00 2040 Kb 0+89 faults
day16 0:00.03 2020 Kb 0+250 faults
day17 0:00.00 1896 Kb 0+88 faults
day18 0:00.00 1952 Kb 0+107 faults
day19 0:00.01 1904 Kb 0+91 faults
day20 0:00.01 2672 Kb 0+325 faults
day21 0:00.00 1804 Kb 0+86 faults
day22 0:00.03 2528 Kb 0+371 faults
day23 0:00.02 2064 Kb 0+152 faults
day24 0:00.00 1844 Kb 0+89 faults
day25 0:00.00 1788 Kb 0+89 faults
real 0m0,359s