this post was submitted on 25 Dec 2024
14 points (100.0% liked)

Advent Of Code

982 readers
74 users here now

An unofficial home for the advent of code community on programming.dev!

Advent of Code is an annual Advent calendar of small programming puzzles for a variety of skill sets and skill levels that can be solved in any programming language you like.

AoC 2024

Solution Threads

M T W T F S S
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25

Rules/Guidelines

Relevant Communities

Relevant Links

Credits

Icon base by Lorc under CC BY 3.0 with modifications to add a gradient

console.log('Hello World')

founded 1 year ago
MODERATORS
 

Day 25: Code Chronicle

Megathread guidelines

  • Keep top level comments as only solutions, if you want to say something other than a solution put it in a new post. (replies to comments can be whatever)
  • You can send code in code blocks by using three backticks, the code, and then three backticks or use something such as https://topaz.github.io/paste/ if you prefer sending it through a URL

FAQ

you are viewing a single comment's thread
view the rest of the comments
[โ€“] [email protected] 5 points 1 day ago

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