advent2024

Advent of Code 2024
git clone git://bsandro.tech/advent2024
Log | Files | Refs

commit 2731cabf57beb5d1331af00d10929971b631591d
parent 81f21c1a2d2f250b13df1ad394465f10bb65132e
Author: bsandro <email@bsandro.tech>
Date:   Wed, 25 Dec 2024 22:06:19 +0200

Day 25 p1

Diffstat:
Aday25/Makefile | 28++++++++++++++++++++++++++++
Aday25/input.txt | 3999+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aday25/main.cpp | 77+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aday25/test1.txt | 39+++++++++++++++++++++++++++++++++++++++
4 files changed, 4143 insertions(+), 0 deletions(-)

diff --git a/day25/Makefile b/day25/Makefile @@ -0,0 +1,28 @@ +NAME=$(shell basename ${PWD}) +SRC=$(wildcard *.cpp) +DEPS:=$(wildcard *.hpp) +OBJ:=$(SRC:.cpp=.o) +CXXFLAGS=-O2 -std=c++23 -Werror -Wall -Wextra -I. -I../include +LDFLAGS=-lstdc++ + +all: $(NAME) + +.PHONY: clean run + +clean: + rm -f $(OBJ) $(NAME) + +%.o : %.c $(DEPS) + @$(CC) $(CFLAGS) -c $< -o $@ + +$(NAME): $(OBJ) + @$(CC) $(OBJ) -o $@ $(LDFLAGS) + +run: $(NAME) + @./$(NAME) input.txt + +test1: $(NAME) + @./$(NAME) test1.txt + +test2: $(NAME) + @./$(NAME) test2.txt diff --git a/day25/input.txt b/day25/input.txt @@ -0,0 +1,3999 @@ +..... +#.... +#.... +##..# +###.# +##### +##### + +##### +###.# +###.. +.##.. +..#.. +..... +..... + +..... +..... +..... +.#... +##... +###.# +##### + +##### +##### +##.#. +##... +.#... +.#... +..... + +##### +###.# +###.# +###.. +##... +.#... +..... + +##### +###.# +.#..# +....# +....# +....# +..... + +##### +##### +.##.# +.##.# +..#.# +..#.. +..... + +##### +##.## +##.## +##.## +.#.## +.#..# +..... + +##### +##### +##.## +#..## +#..#. +..... +..... + +..... +..... +#..#. +#..#. +##.#. +##.#. +##### + +##### +##### +##### +###.# +#.#.# +#.... +..... + +##### +.#### +.#### +.#.## +...## +...#. +..... + +..... +#.... +##... +##..# +##.## +##.## +##### + +##### +##.## +.#.## +.#.#. +.#.#. +..... +..... + +..... +...#. +#..#. +#..#. +##.## +##### +##### + +##### +####. +#.#.. +#.#.. +..#.. +..#.. +..... + +##### +##### +#.##. +#.##. +#.##. +..#.. +..... + +..... +...#. +...#. +..### +..### +#.### +##### + +..... +..... +..... +...#. +.#.#. +##.#. +##### + +##### +####. +.###. +.#.#. +.#.#. +..... +..... + +##### +##### +##.## +##..# +.#..# +....# +..... + +..... +..#.. +..#.. +.##.. +.##.. +###.# +##### + +..... +.#... +##... +##... +##..# +###.# +##### + +##### +##### +##### +##.#. +#..#. +#.... +..... + +..... +.#... +.##.. +###.. +###.# +##### +##### + +..... +..... +....# +#...# +##.## +##.## +##### + +..... +....# +#..## +#..## +#.### +##### +##### + +..... +..... +...#. +...## +#.### +#.### +##### + +##### +##### +.#### +.#.#. +.#.#. +...#. +..... + +##### +.#### +..### +..##. +..##. +..#.. +..... + +..... +..... +.#... +.#... +.#... +###.# +##### + +..... +...#. +...#. +.#.#. +.#.## +##.## +##### + +##### +.#### +.##.# +.##.# +.##.. +.#... +..... + +..... +...#. +...#. +...#. +.#.#. +####. +##### + +..... +..... +..... +#...# +#...# +##.## +##### + +##### +##### +###.# +###.# +.#..# +..... +..... + +..... +#..#. +#..## +##.## +##.## +##### +##### + +..... +..... +..... +..... +#.#.. +#.##. +##### + +##### +####. +###.. +###.. +###.. +#.#.. +..... + +..... +..... +.#... +.#..# +.##.# +.##.# +##### + +##### +#.### +..### +..### +...#. +..... +..... + +##### +##### +###.# +###.# +#.#.# +#.... +..... + +##### +##### +##.## +.#.#. +...#. +...#. +..... + +..... +....# +.#..# +.#..# +###.# +##### +##### + +##### +###.# +.##.# +.#..# +.#..# +....# +..... + +##### +##.## +##.## +#..## +....# +..... +..... + +##### +##.## +##.## +#..#. +#..#. +...#. +..... + +##### +###.# +###.# +#.#.# +#...# +#...# +..... + +..... +..... +....# +#...# +#.#.# +##### +##### + +##### +##### +##### +##### +#.#.# +#.#.# +..... + +..... +.#.#. +.#.#. +##.## +##.## +##### +##### + +..... +..#.# +.##.# +.##.# +.##.# +.#### +##### + +##### +####. +####. +#.##. +#.##. +...#. +..... + +##### +###.# +.##.# +.#... +.#... +.#... +..... + +..... +..#.. +.##.. +.##.. +.##.# +.#### +##### + +..... +.#... +.#... +.#..# +##.## +##.## +##### + +##### +#.#.# +..#.# +..#.. +..#.. +..#.. +..... + +##### +#.### +#.##. +..##. +..##. +..#.. +..... + +..... +.#... +.#... +.#.#. +####. +##### +##### + +##### +####. +####. +.###. +..#.. +..... +..... + +..... +#.... +#.... +##... +##... +###.# +##### + +##### +###.# +#.#.# +#.#.. +..... +..... +..... + +##### +#.### +#.### +#.#.# +#.#.# +..#.. +..... + +##### +###.# +.##.# +..#.# +..#.. +..... +..... + +..... +....# +.#..# +##..# +##..# +##.## +##### + +..... +..#.. +#.#.# +#.#.# +#.#.# +#.### +##### + +##### +##### +####. +##.#. +##.#. +.#... +..... + +..... +.#... +.#... +.#.#. +##.#. +##### +##### + +..... +...#. +#..#. +#..#. +#..## +#.### +##### + +##### +##.## +#..#. +#.... +#.... +..... +..... + +##### +.#### +.#### +..##. +...#. +..... +..... + +##### +##### +##### +####. +##.#. +.#.#. +..... + +..... +..... +..... +..#.. +.###. +.#### +##### + +##### +##.## +#..## +#..## +#..#. +#..#. +..... + +..... +..... +..... +#.#.. +###.# +###.# +##### + +..... +..... +...#. +#..#. +#.##. +####. +##### + +##### +##### +####. +####. +.##.. +.#... +..... + +..... +#..#. +##.## +##.## +##### +##### +##### + +##### +###.# +###.# +#.#.# +..#.. +..#.. +..... + +..... +..... +#.... +#..#. +#..#. +#.##. +##### + +..... +..... +..#.. +#.#.. +#.#.. +###.# +##### + +##### +##### +##.## +.#.#. +.#... +.#... +..... + +..... +..#.. +..#.# +..#.# +.#### +.#### +##### + +##### +.#### +.#.## +.#..# +....# +..... +..... + +##### +###.# +###.. +#.#.. +#.#.. +..... +..... + +##### +##.## +##..# +.#... +.#... +..... +..... + +##### +###.# +.##.# +.##.# +.#... +.#... +..... + +..... +#.... +##... +##..# +###.# +##### +##### + +..... +..... +.#.#. +.#.#. +.###. +.###. +##### + +##### +##.## +#...# +....# +....# +..... +..... + +##### +##.#. +#..#. +#..#. +#..#. +..... +..... + +##### +##.## +.#.#. +..... +..... +..... +..... + +##### +##### +##### +#.#.# +....# +....# +..... + +##### +##### +###.# +.##.# +..#.# +..#.# +..... + +..... +..#.. +..#.. +.##.. +.##.# +##### +##### + +..... +..... +..... +#.#.# +#.### +#.### +##### + +##### +##### +####. +##.#. +#..#. +...#. +..... + +##### +####. +#.#.. +#.... +#.... +..... +..... + +##### +##### +#.### +#.#.# +..#.. +..... +..... + +##### +####. +#.##. +#.##. +#..#. +...#. +..... + +##### +###.# +.##.# +.##.# +..#.# +..... +..... + +##### +####. +####. +#.#.. +..... +..... +..... + +..... +#..#. +#..#. +#.##. +#.##. +####. +##### + +..... +..... +..#.. +..#.. +.##.. +.###. +##### + +##### +#.### +#.##. +#.##. +#..#. +...#. +..... + +##### +####. +.##.. +.##.. +.#... +.#... +..... + +..... +#..#. +#..#. +#.##. +#.##. +#.### +##### + +##### +#.### +#.#.# +#.#.# +#.#.# +....# +..... + +##### +####. +.###. +.##.. +..#.. +..... +..... + +..... +....# +.#..# +.#..# +.##.# +##### +##### + +##### +.#.## +.#.## +.#.#. +.#... +.#... +..... + +..... +..#.. +#.#.# +###.# +##### +##### +##### + +##### +#.### +#.### +#..#. +..... +..... +..... + +##### +##### +##.#. +##.#. +#..#. +#.... +..... + +##### +####. +####. +###.. +#.#.. +..... +..... + +..... +.#..# +.#..# +.#..# +.#.## +##.## +##### + +..... +..... +#.... +##.#. +####. +##### +##### + +##### +##### +##.#. +##.#. +#..#. +#..#. +..... + +##### +#.### +#.### +..### +..#.# +..#.# +..... + +..... +..... +#.#.. +#.#.. +###.. +####. +##### + +..... +..... +#.#.. +#.#.# +#.#.# +##### +##### + +..... +..#.# +.#### +.#### +.#### +.#### +##### + +..... +....# +....# +#.#.# +#.#.# +##### +##### + +##### +.#.#. +.#.#. +.#.#. +.#.#. +..... +..... + +..... +.#... +.#.#. +.#.#. +.#.#. +##### +##### + +##### +##.#. +#.... +#.... +#.... +..... +..... + +..... +.#..# +.##.# +###.# +###.# +##### +##### + +..... +..... +...#. +...#. +.#.#. +.###. +##### + +##### +####. +####. +#.##. +...#. +..... +..... + +..... +..... +..... +#...# +#.#.# +#.### +##### + +##### +##### +##### +###.# +#.#.# +....# +..... + +..... +..... +.#..# +.#.## +##.## +##### +##### + +##### +##### +###.# +##..# +##..# +.#... +..... + +..... +..#.. +#.#.. +#.##. +####. +##### +##### + +..... +....# +#..## +#..## +#..## +#.### +##### + +..... +#..#. +#..#. +#..#. +#..#. +##.## +##### + +..... +.#... +.##.. +###.. +####. +####. +##### + +..... +.#... +.##.. +###.# +##### +##### +##### + +..... +#.... +#.#.. +#.##. +#.##. +##### +##### + +..... +#.... +#.... +#..#. +##.#. +##.## +##### + +..... +..... +..#.. +..#.. +#.##. +####. +##### + +##### +###.# +###.# +###.# +#.#.# +#...# +..... + +##### +.##.# +.##.# +.##.# +.##.# +..#.. +..... + +..... +....# +..#.# +..#.# +.##.# +.##.# +##### + +##### +.##.# +.##.# +..#.. +..#.. +..... +..... + +##### +.###. +.#.#. +.#.#. +.#.#. +..... +..... + +##### +####. +####. +###.. +.#... +.#... +..... + +..... +.#..# +.#.## +.#### +.#### +##### +##### + +##### +#.### +#.### +#.#.# +..#.# +....# +..... + +..... +#.... +##.#. +##.#. +##.#. +##### +##### + +..... +..... +#.#.. +#.#.# +#.### +##### +##### + +##### +#.#.# +#.#.# +#...# +#...# +..... +..... + +..... +..... +..... +#.#.# +#.#.# +#.### +##### + +..... +..... +....# +..#.# +..### +.#### +##### + +##### +#.### +#.##. +#.##. +#.##. +..#.. +..... + +..... +#.... +#.... +#.... +#.... +##.#. +##### + +##### +##### +##.## +.#..# +.#..# +....# +..... + +##### +#.### +..#.# +..#.# +..#.# +..#.. +..... + +..... +..... +...#. +..##. +..##. +.#### +##### + +..... +.#... +.#... +##.#. +##.#. +####. +##### + +##### +##### +##### +.#### +.###. +..#.. +..... + +..... +..... +..#.. +#.#.. +###.# +###.# +##### + +##### +#.##. +..#.. +..#.. +..#.. +..... +..... + +##### +##### +####. +#.#.. +..#.. +..... +..... + +..... +.#... +.#... +.#.#. +##### +##### +##### + +##### +##### +.###. +..#.. +..... +..... +..... + +..... +#.... +#.... +#.#.# +#.#.# +#.### +##### + +..... +...#. +#..#. +#.### +#.### +##### +##### + +##### +##### +##### +.#.## +...#. +..... +..... + +..... +#.... +#.#.. +#.#.# +#.#.# +#.#.# +##### + +##### +###.# +###.. +##... +#.... +#.... +..... + +##### +##.## +.#.## +...#. +..... +..... +..... + +..... +...#. +.#.#. +.#.#. +##.#. +##.#. +##### + +##### +##.#. +##.#. +##.#. +#..#. +#.... +..... + +##### +#.### +#.### +#.##. +..##. +..#.. +..... + +..... +..#.. +..##. +.#### +##### +##### +##### + +##### +#.### +#.##. +#.#.. +..#.. +..... +..... + +##### +##### +##### +.#### +.#.#. +...#. +..... + +##### +##### +###.# +##..# +#...# +#.... +..... + +##### +#.### +#.### +#.### +#..#. +#.... +..... + +..... +..#.# +..#.# +.##.# +###.# +###.# +##### + +##### +.#### +.#.## +.#.## +...## +....# +..... + +..... +#.... +#..#. +#.##. +#.##. +#.### +##### + +##### +###.# +###.# +###.# +#.#.. +..#.. +..... + +..... +.#..# +.#..# +##..# +##..# +##.## +##### + +..... +..... +.#... +###.# +##### +##### +##### + +..... +..... +#.... +#..#. +#..## +##.## +##### + +..... +.#... +.#... +.#..# +.##.# +.#### +##### + +..... +..... +..... +....# +#.#.# +#.#.# +##### + +##### +#.#.# +#.#.# +#.#.. +#.#.. +..... +..... + +..... +..... +#.#.. +###.# +##### +##### +##### + +..... +.#... +.#... +.##.. +.###. +####. +##### + +##### +##.## +.#.## +.#.#. +.#.#. +.#... +..... + +..... +..... +..#.# +..#.# +.##.# +.#### +##### + +..... +....# +..#.# +..#.# +.##.# +.#### +##### + +..... +..... +....# +....# +..#.# +#.### +##### + +##### +##.## +##.#. +##.#. +##.#. +.#.#. +..... + +##### +##### +.#.## +.#.## +...#. +...#. +..... + +..... +#...# +#.#.# +#.#.# +##### +##### +##### + +..... +..#.. +#.#.. +#.##. +#.##. +#.### +##### + +..... +..#.. +..#.. +..#.. +#.##. +#.##. +##### + +##### +#.#.# +#.#.# +#.#.# +..... +..... +..... + +##### +##.## +##.#. +#..#. +#.... +#.... +..... + +##### +##.## +##.## +#..#. +#..#. +..... +..... + +##### +##### +#.### +#.### +#.### +#..#. +..... + +##### +#.### +#.### +#.### +#.#.# +..#.. +..... + +..... +..... +...#. +...#. +#.##. +#.### +##### + +..... +....# +....# +...## +..### +.#### +##### + +..... +....# +#...# +#..## +##.## +##.## +##### + +..... +..... +#.... +#.... +##.#. +##.## +##### + +##### +.#### +.#.## +.#.#. +.#.#. +...#. +..... + +##### +##.## +##.## +#..## +#..## +...#. +..... + +##### +##### +##### +##.#. +.#.#. +.#... +..... + +##### +##.## +##.## +##.## +##..# +.#... +..... + +..... +..... +..#.. +#.##. +####. +##### +##### + +..... +..... +..... +.#.#. +##### +##### +##### + +##### +##### +####. +#.#.. +#.#.. +..#.. +..... + +##### +###.# +###.# +###.# +.#..# +.#... +..... + +..... +#.... +#...# +##.## +##### +##### +##### + +..... +..#.. +..##. +#.##. +#.### +##### +##### + +..... +..... +..#.. +#.##. +#.### +#.### +##### + +##### +##.## +##..# +#.... +..... +..... +..... + +..... +..... +.#..# +.#..# +.#..# +.#.## +##### + +..... +#.#.. +#.#.. +#.#.# +#.#.# +###.# +##### + +..... +..... +...#. +.#.#. +####. +####. +##### + +..... +...#. +...#. +..##. +..##. +#.### +##### + +..... +...#. +...#. +...#. +#.##. +##### +##### + +..... +.#.#. +##.#. +##.#. +##.## +##.## +##### + +..... +..... +..#.# +..#.# +#.#.# +##### +##### + +##### +##### +.#### +.#.## +...#. +...#. +..... + +##### +##### +##### +.##.# +.##.. +..#.. +..... + +..... +..#.. +#.#.. +#.#.# +#.### +#.### +##### + +..... +.#.#. +.#.## +.#.## +.#.## +##### +##### + +##### +.#### +..#.# +..#.# +..#.# +..#.# +..... + +##### +####. +#.##. +#.##. +..##. +..#.. +..... + +..... +....# +..#.# +..### +#.### +#.### +##### + +..... +.#... +.#... +.#... +.#.#. +##### +##### + +##### +.#### +.##.# +.##.# +..#.# +..#.. +..... + +##### +#.##. +...#. +...#. +...#. +..... +..... + +##### +##.## +##.## +.#.#. +..... +..... +..... + +..... +..... +#..#. +##.#. +##.## +##### +##### + +..... +..... +#.#.. +#.#.. +#.#.# +###.# +##### + +##### +##.## +##.## +##.## +#..## +#...# +..... + +##### +###.# +#.#.# +..#.# +..#.# +..... +..... + +..... +#.... +#..#. +##.## +##.## +##### +##### + +..... +..... +#.#.. +#.#.# +##### +##### +##### + +##### +##### +####. +##.#. +#..#. +#.... +..... + +..... +..#.. +.##.# +.##.# +.#### +##### +##### + +##### +##### +####. +#.##. +#.##. +#.#.. +..... + +##### +#.### +..### +..#.# +....# +....# +..... + +##### +##### +##### +.#.## +.#.## +...#. +..... + +##### +##### +##### +##.## +.#.#. +...#. +..... + +##### +##### +##### +#.##. +#.#.. +..#.. +..... + +..... +..... +#.... +#..#. +#.##. +##### +##### + +##### +##### +####. +###.. +##... +#.... +..... + +##### +####. +####. +#.##. +#.#.. +..#.. +..... + +..... +..... +..#.# +.##.# +.#### +.#### +##### + +..... +.#..# +##..# +##..# +##..# +##.## +##### + +..... +...#. +#.##. +#.### +#.### +##### +##### + +##### +##.#. +##... +.#... +..... +..... +..... + +##### +##### +##### +##### +.#.## +...#. +..... + +..... +..... +....# +...## +.#.## +##### +##### + +..... +..... +#...# +#...# +#..## +#.### +##### + +..... +..... +#.#.. +#.##. +#.##. +#.### +##### + +##### +###.# +###.# +##..# +##..# +.#..# +..... + +..... +..#.. +..#.# +..#.# +#.#.# +#.#.# +##### + +##### +.#.## +.#.## +.#..# +.#..# +.#... +..... + +..... +..... +..... +..... +#.#.. +#.#.# +##### + +##### +.###. +.##.. +.##.. +.##.. +.#... +..... + +..... +....# +....# +.#..# +.#..# +.##.# +##### + +..... +..#.. +#.#.. +#.#.# +##### +##### +##### + +##### +##.## +##.## +##.#. +#.... +#.... +..... + +##### +##### +##.## +.#.## +.#..# +..... +..... + +..... +...#. +...#. +.#.#. +.#.#. +.#.## +##### + +##### +#.### +..### +..##. +..##. +...#. +..... + +..... +..... +...#. +.#.#. +.###. +##### +##### + +..... +...#. +#.##. +#.##. +####. +####. +##### + +..... +..... +..... +#.#.. +#.#.# +##### +##### + +..... +.#... +.#..# +.#..# +.##.# +###.# +##### + +..... +#.#.. +#.#.. +###.. +###.. +###.# +##### + +..... +..... +..... +#.#.. +#.##. +#.##. +##### + +..... +.#... +.#... +##... +##..# +##.## +##### + +##### +.#### +.#.#. +.#.#. +..... +..... +..... + +..... +.#... +##..# +###.# +##### +##### +##### + +##### +####. +####. +##.#. +##... +#.... +..... + +..... +....# +...## +...## +#.### +#.### +##### + +##### +##### +.#.## +.#.#. +.#... +..... +..... + +..... +..... +..... +.#... +##.#. +##### +##### + +##### +##### +###.# +###.. +.#... +.#... +..... + +..... +#.#.. +#.#.# +#.#.# +#.#.# +###.# +##### + +..... +..... +....# +.#..# +##.## +##.## +##### + +..... +..... +..#.. +..#.. +..#.# +.#### +##### + +..... +..#.. +#.#.. +###.. +###.# +##### +##### + +..... +.#..# +.#.## +.#.## +##.## +##.## +##### + +##### +#.### +#.### +#.#.# +..#.# +..#.. +..... + +##### +##### +##.#. +#..#. +...#. +..... +..... + +..... +....# +.#..# +.#..# +##.## +##.## +##### + +##### +##### +##### +#.### +#.### +...#. +..... + +..... +..... +#.... +#.#.# +###.# +###.# +##### + +##### +.#.#. +.#.#. +.#.#. +.#.#. +...#. +..... + +..... +..... +....# +.#..# +.##.# +##### +##### + +..... +.#.#. +.#.#. +.#.## +##### +##### +##### + +..... +..... +..#.. +.##.. +####. +####. +##### + +..... +..... +.#..# +.#..# +.#..# +##.## +##### + +..... +.#..# +##.## +##.## +##.## +##.## +##### + +..... +...#. +...#. +..##. +#.##. +#.##. +##### + +##### +##### +#.#.# +#...# +#...# +#...# +..... + +..... +.#... +##... +###.. +###.# +##### +##### + +##### +##### +##.## +#..## +#..## +...#. +..... + +##### +##### +##.## +#..#. +#..#. +#..#. +..... + +..... +.#... +.#... +.##.# +.#### +##### +##### + +..... +..... +..... +.#.#. +.#.#. +##### +##### + +..... +#..#. +#.### +#.### +#.### +#.### +##### + +##### +##### +#.### +#.### +#..#. +#.... +..... + +..... +...#. +#..#. +#..#. +#..## +##.## +##### + +..... +..... +.#... +.#.#. +##.## +##.## +##### + +##### +#.### +#.### +..#.# +....# +..... +..... + +..... +....# +....# +.#.## +.#.## +##.## +##### + +##### +##.## +#..## +...## +...#. +..... +..... + +##### +.##.# +.##.# +.#..# +.#..# +..... +..... + +##### +##### +##### +.###. +..#.. +..#.. +..... + +##### +.##.# +.##.# +.#..# +..... +..... +..... + +..... +#.... +#.#.# +#.#.# +#.#.# +##### +##### + +..... +..#.. +.##.. +.##.# +.##.# +###.# +##### + +..... +..... +...#. +..##. +#.### +#.### +##### + +..... +....# +....# +...## +...## +.#.## +##### + +..... +....# +....# +...## +.#.## +.#### +##### + +##### +#.##. +#.##. +#.#.. +#.#.. +..#.. +..... + +..... +#.... +##.#. +##.#. +##.#. +##.## +##### + +..... +..... +.#.#. +.#.#. +.###. +####. +##### + +..... +.#... +.#.#. +.###. +.###. +##### +##### + +##### +####. +##.#. +##.#. +.#.#. +..... +..... + +##### +##### +###.# +#.#.. +#.#.. +#.... +..... + +##### +##### +.#.## +.#..# +.#..# +.#..# +..... + +##### +##.## +##..# +#...# +..... +..... +..... + +##### +##### +####. +###.. +#.#.. +..#.. +..... + +##### +.#.## +...## +...## +...## +...#. +..... + +##### +#.### +#.### +..#.# +..... +..... +..... + +..... +..#.# +..#.# +#.### +##### +##### +##### + +##### +##### +.#### +..### +..#.# +..#.. +..... + +..... +..... +..#.# +..#.# +.##.# +##### +##### + +..... +.#... +.##.# +.##.# +###.# +###.# +##### + +##### +##### +###.# +#.#.# +#.#.# +#.#.. +..... + +##### +##### +##### +.###. +.#.#. +.#.#. +..... + +##### +.#### +.###. +.###. +.##.. +.#... +..... + +..... +..#.. +..#.. +..##. +..##. +#.### +##### + +##### +###.# +.##.# +.##.. +.##.. +..#.. +..... + +##### +#.### +..### +..### +..#.# +..#.# +..... + +..... +..... +..... +.#..# +.#..# +##.## +##### + +##### +##### +##### +.#.#. +.#.#. +.#.#. +..... + +##### +##### +##### +.#### +.#.## +.#..# +..... + +..... +..#.. +.##.. +###.. +###.# +###.# +##### + +..... +..... +...#. +...#. +#.### +#.### +##### + +##### +##.## +.#.## +...#. +...#. +..... +..... + +..... +....# +...## +#.### +##### +##### +##### + +##### +##### +##### +#.### +..#.# +....# +..... + +..... +..#.. +..#.. +#.#.. +#.#.# +#.### +##### + +##### +.#### +.#### +.#### +..#.# +..#.. +..... + +##### +#.### +..##. +..##. +..##. +..#.. +..... + +##### +.###. +.#.#. +.#... +.#... +..... +..... + +..... +...#. +...## +..### +.#### +##### +##### + +..... +....# +#.#.# +###.# +###.# +###.# +##### + +##### +#.### +#..## +...#. +...#. +..... +..... + +..... +..#.. +..#.. +.##.. +###.. +###.# +##### + +##### +#.#.# +#.#.. +#.... +..... +..... +..... + +##### +###.# +##..# +##... +.#... +..... +..... + +..... +..... +....# +.#.## +##### +##### +##### + +..... +...#. +...#. +...#. +#..#. +#.##. +##### + +..... +.#... +.#... +.#.#. +##.#. +##.## +##### + +##### +###.# +###.# +###.# +.#..# +.#..# +..... + +..... +...#. +..##. +.###. +.###. +.###. +##### + +##### +.#### +.#.## +.#.#. +.#.#. +.#... +..... + +..... +.#... +##.#. +##.#. +##.## +##.## +##### + +##### +##### +###.# +.##.# +.##.. +.#... +..... + +##### +##### +#.### +..### +..##. +..#.. +..... + +..... +...#. +...#. +#..#. +#..## +#.### +##### + +..... +..... +.#.#. +##.#. +##.#. +##### +##### + +..... +#.... +#..#. +##.#. +##### +##### +##### + +##### +.#### +.##.# +.#..# +.#..# +.#..# +..... + +##### +.##.# +..#.. +..... +..... +..... +..... + +..... +..... +.#..# +.#.## +.#.## +##.## +##### + +##### +##### +.#### +.##.# +.#..# +....# +..... + +##### +#.#.# +....# +....# +....# +..... +..... + +..... +.#... +.#... +##... +##... +##.#. +##### + +##### +#.### +...## +...#. +..... +..... +..... + +##### +##.## +.#.## +....# +....# +..... +..... + +##### +##### +.#.#. +...#. +...#. +...#. +..... + +##### +##### +.#.#. +.#.#. +.#... +..... +..... + +..... +.#..# +.##.# +.#### +##### +##### +##### + +##### +##### +#.### +#.#.# +..... +..... +..... + +..... +#.... +#.... +#.... +##.#. +##### +##### + +..... +..... +..... +....# +#..## +#.### +##### + +##### +.###. +..##. +...#. +...#. +..... +..... + +##### +##.#. +##.#. +#..#. +#.... +#.... +..... + +..... +....# +....# +.#.## +.#### +##### +##### + +##### +##### +.#### +.#.## +.#..# +.#..# +..... + +##### +#.### +#.### +#..## +#...# +..... +..... + +..... +..... +#.... +#..#. +#.##. +#.### +##### + +##### +#.### +#.#.# +..#.. +..#.. +..... +..... + +##### +.#### +.##.# +..#.# +..#.. +..... +..... + +##### +###.# +###.# +###.# +#.#.. +#.... +..... + +..... +...#. +..##. +..### +#.### +#.### +##### + +##### +##### +###.# +#.#.# +#...# +#.... +..... + +..... +..#.. +..#.. +#.##. +#.##. +####. +##### + +##### +.##.# +.#... +.#... +.#... +..... +..... + +##### +###.# +###.# +#.#.# +..#.# +..#.# +..... + +##### +.#### +.#### +.#### +..### +..#.# +..... + +##### +##### +##### +##.## +#...# +..... +..... + +..... +.#.#. +####. +####. +##### +##### +##### + +##### +.#### +.#### +.#.#. +.#... +.#... +..... + +##### +##### +##.#. +##.#. +.#.#. +.#... +..... + +..... +..... +..... +..... +.#.#. +.#.## +##### + +..... +#..#. +#..#. +#.##. +#.### +##### +##### + +..... +...#. +...## +.#.## +.#### +##### +##### + +..... +..... +..... +..#.# +#.#.# +###.# +##### + +..... +.#... +.#... +.#... +.##.# +.#### +##### + +##### +###.# +.##.# +..#.# +..#.# +..... +..... + +..... +..#.. +..#.. +.##.. +.###. +##### +##### + +##### +####. +#.##. +#.#.. +..#.. +..#.. +..... + +..... +....# +....# +#..## +##.## +##### +##### + +..... +..... +#.... +#..#. +##.#. +##.## +##### + +##### +##### +.#### +.#### +.##.# +.#..# +..... + +..... +.#... +.#... +##.#. +####. +####. +##### + +..... +...#. +...#. +...#. +.#.## +.#.## +##### + +..... +..#.. +..#.. +.##.# +.#### +##### +##### + +..... +..... +..... +..#.# +..#.# +#.### +##### + +##### +#.### +#..#. +...#. +...#. +...#. +..... + +##### +##### +##### +#.#.# +#.#.# +#...# +..... + +##### +.#### +.#### +.#.## +.#.## +.#.#. +..... + +##### +###.# +.#..# +.#... +.#... +.#... +..... + +..... +#...# +#.#.# +#.#.# +#.#.# +##### +##### + +..... +#...# +##..# +###.# +##### +##### +##### + +..... +#.... +#.#.# +#.### +#.### +##### +##### + +##### +##### +##.## +##.## +##.## +#..#. +..... + +..... +..... +..#.. +..#.. +..#.# +.##.# +##### + +##### +##### +###.# +#.#.# +#.#.. +#.#.. +..... + +##### +##.#. +##.#. +#..#. +...#. +..... +..... + +..... +..... +..#.# +#.#.# +#.#.# +#.### +##### + +..... +..... +..... +#.#.. +#.#.# +###.# +##### + +..... +..... +...#. +...#. +.#.## +##.## +##### + +..... +..#.. +.##.. +.##.. +###.# +##### +##### + +##### +#.### +#.### +...## +....# +....# +..... + +##### +##### +##.## +##.## +#..#. +#.... +..... + +##### +.#### +.#### +..### +..##. +...#. +..... + +##### +##### +#.### +#.#.# +#.#.# +..... +..... + +##### +##### +#.##. +...#. +..... +..... +..... + +##### +##### +####. +#.##. +#.#.. +..#.. +..... + +##### +####. +###.. +.#... +.#... +..... +..... + +..... +#..#. +#..#. +#..#. +##.#. +##.## +##### + +##### +##.## +##.## +.#.## +.#.#. +..... +..... + +##### +##### +###.# +###.. +.##.. +.#... +..... + +..... +.#... +.#..# +.#..# +.#..# +##.## +##### + +##### +##.## +##.## +#..## +...#. +..... +..... + +##### +.##.# +.##.# +.##.# +.##.# +..#.# +..... + +..... +...#. +.#.#. +##.## +##### +##### +##### + +##### +.#### +.#### +..#.# +....# +..... +..... + +..... +..#.# +.##.# +.##.# +.#### +.#### +##### + +..... +..... +...#. +.#.## +.#.## +.#.## +##### + +..... +...#. +...#. +.#.#. +.###. +.#### +##### + +..... +..... +...#. +.#.## +.#.## +##### +##### + +..... +#.... +#.... +#.#.. +###.# +###.# +##### + +##### +##### +###.# +##..# +.#..# +.#... +..... + +##### +#.### +#.##. +...#. +..... +..... +..... + +##### +###.# +##..# +##..# +#...# +#...# +..... + +##### +##### +####. +#.##. +#..#. +#.... +..... + +##### +##### +#.### +#.### +#..#. +#..#. +..... + +##### +##### +####. +####. +.#.#. +..... +..... + +..... +#.... +#..#. +#..## +#..## +#.### +##### + +##### +#.##. +#..#. +#..#. +..... +..... +..... + +##### +##.## +##.## +.#..# +.#... +.#... +..... + +##### +##### +.#### +.##.# +.#..# +.#..# +..... + +##### +#.#.# +..#.# +..#.. +..... +..... +..... + +..... +..#.. +.###. +####. +##### +##### +##### + +..... +..... +..#.. +.##.# +.##.# +###.# +##### + +..... +..... +#..#. +##.#. +##.#. +##### +##### + +..... +...#. +...## +#..## +##.## +##.## +##### + +..... +..... +..... +.#.#. +.#.#. +####. +##### + +##### +##### +#.#.# +#.#.# +#.#.# +....# +..... + +..... +.#... +##.#. +##.## +##### +##### +##### + +##### +##### +##.## +#...# +....# +....# +..... + +##### +#.##. +#.##. +#.##. +#..#. +...#. +..... + +##### +##### +##.## +##.#. +#.... +#.... +..... + +##### +.##.# +.##.. +..#.. +..... +..... +..... + +..... +..#.# +.#### +.#### +.#### +##### +##### + +..... +.#... +.#... +##... +##.#. +##.#. +##### + +..... +..... +..#.. +#.##. +#.##. +##### +##### + +..... +..... +..... +..#.# +.##.# +###.# +##### + +##### +##### +##### +.##.# +.#..# +....# +..... + +..... +..... +..... +..#.# +.#### +.#### +##### + +##### +.#### +..#.# +..#.# +..#.# +....# +..... + +..... +....# +..#.# +.##.# +###.# +##### +##### + +..... +.#... +.#..# +.##.# +.##.# +###.# +##### + +..... +.#.#. +.#.## +.#.## +##### +##### +##### + +##### +##### +.#.## +.#..# +....# +..... +..... + +..... +#.... +#.... +#.#.. +#.#.# +#.#.# +##### + +..... +..#.. +..##. +.###. +##### +##### +##### + +##### +.#### +.###. +..##. +...#. +..... +..... + +..... +..... +..#.. +..#.# +.#### +##### +##### + +##### +##.#. +#..#. +#.... +#.... +..... +..... + +..... +..... +..... +...#. +.#.#. +##### +##### diff --git a/day25/main.cpp b/day25/main.cpp @@ -0,0 +1,77 @@ +#include <iostream> +#include <filesystem> +#include <fstream> +#include <vector> +#include <cstring> +#include <cstdio> +#include <tuple> +#include <algorithm> +#include "utils.hpp" + +typedef std::array<int, 5> Scheme; +typedef std::pair<std::vector<Scheme>, std::vector<Scheme>> Data; + +Data read_file(const std::string &path) { + std::ifstream ifs(path, std::ios::binary); + if (!ifs.is_open()) { + throw std::runtime_error(path+":"+std::strerror(errno)); + } + std::vector<Scheme> keys; + std::vector<Scheme> locks; + Scheme s{0}; // current schematics + bool is_key = false; // keys have line 0 empty; locks are upside down. + bool is_new = true; // resets on newline + while (1) { + std::string str; + std::getline(ifs, str); + if (str.empty()) { + is_new = true; + if (is_key) keys.push_back(s); + else locks.push_back(s); + } else { + if (is_new) { + is_key = (str == "....."); + is_new = false; + s.fill(is_key?-1:0); + } else { + for (int i=0;i<(int)str.size();++i) { + if (str[i]=='#') s[i]++; + } + } + } + if (!ifs) break; + } + return std::make_pair(keys, locks); +} + +int64_t part1(Data &input [[ maybe_unused ]]) { + auto &[keys, locks] = input; + int64_t res = 0; + for (auto &l:locks) { + for (auto &k:keys) { + bool fits = true; + for (int i=0;i<5;++i) { + if (l[i]+k[i]>5) { + fits = false; + break; + } + } + if (fits) res++; + } + } + return res; +} +int64_t part2(Data &input [[ maybe_unused ]]) { + return 0; +} + +int main(int argc, char **argv) { + Performance perf; + const std::string fname = argc>1 ? argv[1] : "test1.txt"; + std::cout << "AoC 2024 day 25 " << fname << std::endl; + Data input = read_file(fname); + std::cout << "part1: " << part1(input) << std::endl; + std::cout << "part2: " << part2(input) << std::endl; + + return 0; +} diff --git a/day25/test1.txt b/day25/test1.txt @@ -0,0 +1,39 @@ +##### +.#### +.#### +.#### +.#.#. +.#... +..... + +##### +##.## +.#.## +...## +...#. +...#. +..... + +..... +#.... +#.... +#...# +#.#.# +#.### +##### + +..... +..... +#.#.. +###.. +###.# +###.# +##### + +..... +..... +..... +#.... +#.#.. +#.#.# +#####