advent2021

Advent of Code 2021 Solutions
git clone git://bsandro.tech/advent2021
Log | Files | Refs

commit 86d650e941b96826d561b5c3bcc578c5433eb622
parent 43bfbc12e61030402e89be352b802f9f478f20f0
Author: bsandro <[email protected]>
Date:   Sat, 25 Dec 2021 13:12:17 +0200

Day 25 part 1 test only

Diffstat:
Aday25/Makefile | 27+++++++++++++++++++++++++++
Aday25/input.txt | 137+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aday25/main.c | 29+++++++++++++++++++++++++++++
Aday25/puzzle.c | 149+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aday25/test.txt | 9+++++++++
5 files changed, 351 insertions(+), 0 deletions(-)

diff --git a/day25/Makefile b/day25/Makefile @@ -0,0 +1,27 @@ +NAME=$(shell basename ${PWD}) +SRC=$(wildcard *.c ../common/*.c) +DEPS:=$(wildcard *.h ../common/*.h) +OBJ:=$(SRC:.c=.o) +CFLAGS=-O0 -g -fsanitize=address -fno-omit-frame-pointer -std=c99 -Werror -Wall -Wextra -I. -I../common +LDFLAGS=-g -lc -lm -fsanitize=address +#CFLAGS=-O0 -g -std=c99 -Werror -Wall -Wextra -I. -I../common +#LDFLAGS=-lc -lm + +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 + +test: $(NAME) + @./$(NAME) test.txt diff --git a/day25/input.txt b/day25/input.txt @@ -0,0 +1,137 @@ +.v>v...v>.vv.vv..>>......>.>vvvv...>.>v>v>.>.v>..v>v>.v.v>>v>vv..>v...vv..>.v..vvv...>..vv..vv.>..v...v...>..>..v>>..v.v......>.>vv.v...v.. +>.v.v..>v..>..>>.>.v>>.>>..v..v>.>vvvv>.v...>..v.>..>..v..v.>..v.>v>>..>v......>.>..v>..v.>>vv..>...>v>.v.v>.....>v....v>.v.>.>.v.v>>.vvvv> +....vvvv..v...v.v.v...>vv.vv.v..v>v.>>.v....v.v.>>....v>>>>..v......v..v...vv.v.>..>>v>......v.>>>..v...>..>..vv.vv..v.v>.vvvvvv...v>>..vv> +...vv.>>.....>>>...vv...>.>vv>>>.>.v..vv...>.>>...>.>..v.v.v..vv>.v...>.>vv.v...vv..v...>.v..v...>.>.vv..vv......>>.>.v.v>...v>.>v.v.>.v>vv +v>>...>.>.>>.>.>>vv.>>.>>>.>.>.v.v.>v.>>v.>..v>.>.>..v>.v.v>.v>v..v>v.v>>>>.>..v.v..vv.>v>>>vvv>.v.vv..>v>.>.v..v.>>v.>..>.>v....>>v..>v.>> +>v....>>.vv..vv>>..>>..>.>vvvvv.>v.v.>..v....>>.v..>.....v....>.>v...>v>..>>>.v>...>...v>v..v.v.>>......>.v>v.>v.v.>.vv..vv>v>...v>..>v.... +>v...v>>...v.v....>.>v>v.>..v>.>v>>.v.>.vvvv..v..v.v.vv.......v.>v..v.v>.v...>..>>>>.>>v..v..v...v>.>v.>.>>v.v.>v.>..>........v...vv.>vv... +.>v>>.>>>>..>>.>vv...>.>....>>>.>>..>v>.>.v.v..v>..>>>vv...v.v>.>vv>.>>..v....>vv>..>.....>>vv..>>.v>..>.vv.>.v..vv.v.....>.vv>....>....... +>.v.v....>>>.....v.>..>v>v..v..v>>.>.....>v>.>..>...v....>.>vv>.....>.v.v>v.......v.v>v>...>v..>v..>>v..v>.v.v>v.>v>vv.>v>.>vv>>vvvv.v.vv.> +>v..v>vv....>>v>>>v..>>.>...>.>v.>.>>.>vv..>vv..v>>>vvv.v>>.>>>...v.>.vv.>>.v..v.vv>>>>>....v.......>v>.>.>>v.>...>..v.>..vv>v.v...>>.>>>.. +>.>v>.v.vvv>.>.vv..v>>vv..>v.....vv.>v...>v.v>...>.v.v.....vv>.>....v...v.>>>>.v.>...v>>>..v..vv>>..v>...>v..v...>>.>v>>.v.v>..v.v..v.v.v>. +>>..>v....v.v>...>v.>....>.>v..v..>>..v.v>>>...v.....v>.....v....vvv>v>>>..>v>.>..>.vv.vv.v...>.>..v.>>v...v>v...v...>v.v.>..v.....v.>.v.>. +.v>>v.>>v...vvvv.>v..>v>.>>.v...v>>.vv.vvv..v.v.v.vv..v.>v.vv...>v..>.>..>.vv.....v>v...v....>v..v..>..vv.....>.v....>v>>.v......v...>v.v>> +.v.v..v>vv>v.vvv..v>...v..v.>v..>>vv..vv.>v.v.v>v.....v...>..v..vvv...v>>.....>>>.v.vv.>.>>...>>........>vv.>.vv>v....v..>.v>v..>v>....>... +..>v.....vv...>v.v.v....v.....>.>>v....v.v.....>..>...>.....>..v.>..v.>.>.v......>>...>v.v>.vv..>..v>vvv...>...>vv.v>>.vvv>...>.v.v.>..v.vv +v>.>v.>>..v..vv.vvv>.vvv>>>v.>v>>v>vvv>v..>.v.>.>.>.>....v..v.v>...v.>.vv.vv>.>..v.v..>..>....v.>...v...v.>....vv>>.vvvvv.>.>>>..>v>>.>...v +....v.>vv>vv>.>.v.>v....>>.v>.>.v.v..>..>....v..>.v>v..>v>>.>>..>.>>>..v.v...>>v.v.>>..vv>.v.>.>..v>..>....v>v..>..>.>.>.>.v>.....>vvv..>.. +v...>>>.....v...v.>.v.>.>.vv.>..>>>v.>v...v>>v>.....>..>>.>.v.>v.>.vv>>.v...>>v>>.>>vv>..>v.v..>.vv..>>..>.>vv.v.vv...>....v>..v..>vv.v>>>. +vvv>..v>..v>>...vvv>..vv.v.v.>v>>>v.>>>...>vv..v.>..>.v>...v.>v...>v..v.v.v...v>v.v.v.vv>>..vvv..v.vv...v.v...>..>>>>..v>.>v.>>...>.>>>v.v. +...>>>v.v...vv...>v>v..v.v......v...v.v>..>.....>.v>..v..>..v..>>>>..>....>.>....v..>.>..v>...>>..v>vv.>..>..v>...>.>v.>>>>.v>>v....v.>.... +....v>v>>.vv.v....vv...>.>....v...>>>.vv...>>..vv......>v>v..v.>..>v.v>...vv>.>>.>v...>..>v>.v>.>v..v.v>.>....v.v>vv.>v>..vvv.vv>v..>v..>.. +.vv..vv>..>.>.vv.v.>>....>>>..>>v.>>.>>>.v...>>.v.>v...v>.v.>v.>....>.v.>.v>v>..>v>.>v>.v...v>.vvv.>>>v...>>.....v...........v>v.>vv.>>>... +.v.>v..>>v>.vv.....vvvv.v..v.v...v.>..v.>.>..>...>>.>v..>.v..>>..v...>vv>...>....>vvv.vvv.v>.v.>....>>vv.v.>>v.....vv>..>....>>vv.v>..v...> +.>.>..v>v..>.>>v.vv.v.....>.>v>...>.v..vv.>..vv>v.v.v..>>>v....v>v.>.vv.v.>....>vv>vv..v>>..>.v>.v....>.>vvvvv.>v>..>v>.....v...v..v>.v.... +.>..>......>.vv....>.vv.>..>>..v..v..v....>v>vv......>..>.vvv.>>vvv......>..v>.>..>>v....v>v>v...>v>.v..>..v>v>v>....>...v.>v>.>..v>....>.> +.v.>.v...v...v>...>....vv...>>..v...>>..v.>.....>v..v....>>.v>v>v.>v...>...v.>...>..vv.>v...>.>>......>.v>.v.vv..>........>v.vv>...vvv>...v +v>........>..>>v>v.vv.....>>.>.>..>.>>v>.vv>..vvvv>>>>..v.>..>..>v.>>..v..v.>...>vv.>..>.>.vv....>v>..>.v.v......v.>>>..v.v..>..vv.vv...... +.>v..vv>.v.>>v>>vv.>.v...v..v..v.v.>v>.>.vv.v.>.>>.>v>..>..>.>.v.......v..v>>vvv..v..>.>.v..vvv.v>vv>.>>v>v...>.vv..>....>...vv..v..>....>. +...v>.vv.......v.>>vv...v....>v>.v>>...vv...v>v.>.>>>v..vv.>...v.v..v......v>.>>v..>v........v.v>.>..>v>>.....vv..>...v..v>v..v.v.v..>>>>>v +.vvv>..>>..>...v>.>..vv>.>..>>.>.>>v...>vv>.>>v>..>.vv>v>v..v....>v.v>>v.vvv.>.>.vvv.>..>>>>>...>v>v.v.v.>..v..>>.vv>v>>...v.v>>...v.v>.>.v +.v>v.....v...>>.....>>.>vv...v.>..>..v..>.>vv>....v..v>>.v>vv...v>v.>v....vv>>.>v>>.>..v.>..>.>.v.vvvv.vv>>.v>v..v..>>.v....>..v.....v>.... +....>v>>v>...>....v......>>..vv.>v>v..vvv.vv..>v.v>v>v.v>.v..vv.....>.v.>..v>....vv.>.>>v...v>.>.v>...>.v>.v....>>v.>.v>.>.v.vv...>>vvv..v. +>..v>v.>v>.v..v..v....>.>v.>.>>.v>.>.>>v>vv...>>...vvv>....>..v>>v.>v.....>>>>>>.v>>>.v.>...vvv>.>...v>..v>.vv......>.v..>.>.v>....vv.vv.>. +..>vv...v>v>.v.>.>>v..>.v.v.v.>...>>>v.>.>>..v.v......v..vv..>.>>>>.vv...v>.v.>vv.>.>.v>v>.....>...>..v..v>..>.v>vvv..>....>vv>vvv.>..>>v.v +..>v>....>>.v....>vvvv...v...>v>...v.v.>.....vv...>.>.>>.v.>..v..>..v..>.>>>..>...>vv......>v>..>>v.>...>v>>>>v.v..v..........>.v>v.>>..v.v +.v.>>>.vv.v.....>..>..>>v.>..>..>..v..v....v.>>v>>..vv>>.v...>vv.v...v..vv>v>>..v>.v>..v.v.>v.>.>...>v..v>.>.v.>.v...>..>>...>>..>v..>.>v>. +v........>v.vv.v..vv..v....>.v.....v...>>v.v.v..v>.v>...v>v...vv>..>>vv.v..v..v.>..v..v...v..>v>v>>vvvv>.v...vv.>vv>..>...>.>>.>vv.vv>..>.v +>>....>v..>>..>v.v.v..v.>...v...>.v..v.>...>..>>..v>>>...vv.v.v>>v...v...v.>>>..>>..vv..........>>v>v.v>.....v.v.>.v.>v>v.>.v.>.vv....>v>>> +>...>v>.>.....v.>>..vv..>>>...vv.>>..>>..>..vv.vv.....>.>..>>.v.>v>v>v.v..>v.vv>.v.>.....>vv>....>>v.>>v..>v..v.>>..>>.>......vv.v..>..v>.v +.>vvv>v.....>>vv>....>.v>vvv.v>v......vv..v..v>..vv..v..>.v.>>v>>vvv..>>.vv.v>>.....>v..v.v...>>>....vv>..>v.>>>.>vv......>vv.vv>v>v.v...vv +.>.>v..v.>>.vv.v.>.v..vv.v..v.>v.v.vv>...>..vvvv>v>.vv..v...>...v.>>vv>..v.vv.v..>v...vv>.>...>........>..v.v.v....vv>.vvv.v.>v>>..>>....>. +...>...>...>>...>v.v.v>vv>.>.v>vvv>........v>v.v..>>>.>....v.>.>.vv.vv.>.>.v>v.>>>>.>>.>.>v.>.v.>>>vv>.v>.v.v.>..>>v>>.>>v>vv>v.v.vv.vv.v.. +.....v.>>..v..>vv..vv>v>vv.......v..>.v...v.vv>.>.>v.v>.>...>v>v>.>.>.....vv>v>.v..v>.>>>....>>>>..>.>v..v.v>>....>.>...v.v.v..v>v..vv>>>vv +v...>vv..v>v>v...>v>v.>>.>....vv>..v..........>>v..v.v>v..vv...>>...vv.vvvv>.>..v.vv>.>..vv.>.>>>>vv.vv..>>....v.>>..>.v.v>..v..v..v..v.v>. +....>..>.>.>v......v>....>.v>>v.>>>.>....>v.v...v..>>...vv>v>>vvv......>.....vv.>>vv.v.>>..>.....>.v>>>.v...>>>.vvv...>..>>.....>........>v +..>>...>..v.vv>.>>>>..v...>..v>.....v.>..>>>v..v>.v.v..vv>.>v..>v.v...>.......>.vvv.>....>.v....v.v...>>>..>..v>>v>>v>.>>.v>>>...>.>....v>. +>>>v>..v>vv..v.vvvv>..v..v..>>..v.>v>vv>..v.v.v.vvv.....v>>v>..v.>..>>>v>..>......>v..v>>..>>>......>.>.>vvvv.>...>vvvv>.>vv.v.vvv..v>.v..> +>.>v..v>...>..v.>>.v...vv>.v...vv.....v>>>.>..>>.>>..v....>v.>....>v>>v>>>v>...>.v.......v>>>>..>vv>v...v........>v>v..>vv..v>>..>..vv..>.. +v.vvv..v.>.....v.>.v..>...>...v...v>......v.....v..v.vv>>.>>v.>.>v..>>v..v.v.>v>.>.>.>>.>vv.v..v>>.v....v........v.v.v.vvvv>.>>..>.>......> +vv.v>v>vv.>>v.>..>v...v.vv..>v..v.>..v.>...>.....vv.v.>.>>v.v>.v...>v.vv>.v>v..>.>>>..v.vvv..v>..>....v...v>>>>v>vv>.....>>v.>>..vv>v.v>v.. +.....v>.v..v.v.v.>>.>.>.>.>...>>...>>.v.v>...>>..v..>>.>...>.vv>.v>.>...v..v..v.....v.>.>.....v....>.....v>v.>.v>..>v.v..vv>..v.v.......>.. +..vv.v.>v>..v>v>vv>.>vvv>.vv..v>..v.>.>....v..>.>.v..>v>v......>v.v>.......v.>.v>>.....vv..>...v..>......>>.v.v.>.v.>>>>.>.>.>...v...>>v..v +..vvv...v>.>.>......>.>>v......>..v......>>v>v.vvv>.....>...>v..v...>.>>v.v.>..v..v.>>>>.>>.v>...v..v.v.>.....vv...>.>vv.vv.v.>..>>..v..v>v +....v....v.>>v..>v.v>v>..>.>.v>..vvv..vv..vvv.v>v..v>>.v>>v.v.v.v>v>.>v..v..>...>v..v>.>vv..>v>..>.>...>.v.vv..>v>..>vv.v>.v.>...>.>.v.>..v +..vv>>v.>>>..v..vv.>>vv..>.v..>.>vv.v>v>..>vv>>...v....v.>v>..v>vv..>.vvv.v>...>>..v>...v>v..>....>...v>vvv>>.>v>..>v>...v>>.v>..>..v..>... +>>.>.v>>v...vv..v.....v.......>v...>>.....v>.v.>v..vv........>....>v....>>v...v.vvv.>.>.>.>v..v>>....v.v..>.......v.....vv.v>.v>v..>...vv.. +...v.>..>v.>>..v.>.>v......>v.....v....>..>>v>.>vv.v..v>v>v>v.......v>.v>.>..>>.>vv>>v>>v.>.>.v.....vv..v..>vvv.>>v>..>vv>.vv..>vvv.>>..>>> +...>vvv>>.v>vv>>......v..>.>.v.>>>.v....>..>.v...>.v.>.>..>v>......>...vv.>v..>....vv...>..v...>>....>..>...v.vv.>>..>....v>vv..>vvv>.v.v.> +.v..vvvv..v....>v>>v.>>v..v....>>vvvv>v>vv>.v.v.>.>...>v..v...>>...v>>>..v.>v..v.v.v>>v.>.>>..v>>..>>vv...>.....v.>vv>.v....v.v.....>v.>>>. +>>...>v.>.>.>>.vv>..v..v>vvvvv.v.>.>..vv>v.>.>...>v..>>...>>.vv>v>...>v.v......>>....>.>>.>.>.>>v...vv.>...v>v>>.v...>>...v.>...>>.>...>.vv +>.>..>.>.>.vvv>..>vv>.>>.>v...v..v.>..v>...v..>............vv>v.>vvv>v....v.vv..>.v..>>>.......v.v...>...>....>..v.....>..>.vv.>.>.v.>.v>.. +.>>...v...v..v>vvv>>.>.v>>.vv..v.v>..vv>>.vv.v.v.>.vv>>v.v.>vv>..............v>v>.>..>.v..>...>vv.>>.>.v.>.>...v.v.v...v>>.vv.vv.>.v..>.v.. +..>.>>vv.v..>v>..v..>v.v>.vv.>v...>....v.v.>vv>.>>.>>v..>v....v>>>vv....vv>.>>.>v>.>>..v.....vvv>.>>>..>..v>>.>vv>>v>.>>v.>v.>v>.......v>.> +v....v.v>>>.>vvv>...v>v..>>>..>.>.>v.>....>.>.>..v..>v.vv..>.vv...v....>>.>v.>>>....v>v....v.....vvvv...v.>.>v..>vvv.vv....>>v..v.v.>..v>vv +>v>.v....v..>.v......>..vv>.v>..v..>..v>..vv.v.>.>...>....v..vv>..>.>>>.>.>...>>>v.v>>....vv>v>...v.>>>..>v...v.v>....v>.>.v>>...v>>..vvv.> +..v....v...>.....>.v.v....>..>v.v..v...>.>.v..v..>>..v...v..v..vvv........v.>....v...>v>>v>...v.v>>>>.v.vvvv...v...>>.v>..v>>.v......>>..v> +>vv>>>..>>v>.>>>>vvv.>>>.>....vvvv.v>v..>..>.v.v>>>.>.>>>v.>>>>.>.>....v.v.vv..>.v..>v..v..v..>...v...vv>>.v.vvv..vv>>>...>>.>>.vv..>v.v>v> +..vvvv...v...vv>>..>v...>vv..>>v.v...>...>>v>>.>v>..>v>.v.v...v..v..v>.>v.v...v>....vv....v...>....v...>.....vv>>.vv>>..>v.>>v...vv>v...vv. +vvv..v.vvv>.>.>>>...>..v...vv.>>vv.>..v.v...>v.>>....v.>>...>v>.vv...>..v.v...v..>v>>.>.v.>v.v.v..>.>.v.>>.v>>v>.v...vv>....vv.>.vv...>v... +v..v..>..v...v>>..>.>v...>v..vvv>...>.>.>.v...v>vv...>.>vv.>.v.>v..v>v..>..>v>>..vv>.>.>>..v.>>.v....>.>.....v>v....>v.v>>>.v.vv........... +>....v.v..>.>>..v>v...vv.....v.>..>.>..v>..v>....v>>.vv>>..v>...>..>v..>v>vvv.>.>v>v..vv.>.v.vv.>v>...>>.>.>...vv>.>..>>v>.>..v.v.>vv>>..v. +..v>>...>>.vv...vv>.>v.v....v>>v.>.......vv>v.v.v>v.>v.>...v>>.vv>>....v..>...v..v>vvv>..v..>v>..>>..v....>v>.....vv.>>.>..v>>v.v.>>v.>.>.. +..v...vv>>.......>.v>.>vv>.vv>..v>.v...>..>v>.v.>>>v>v.vv.>>.>>.>v.v.v>..>..v>>v..>>vvv>v.vvvvv..v.>.v.....v.....vv.>v.v.>.>>v...v...>vvv>v +.v...vvv>....v...v.>v.v>.v>>>....vv>....v>.v>.vvvv.vv.v.v.>v.v..>>v.>.vvvv....v..>vv....>..vv>.vv..>.vv.>v.>v>..v.v...>>v.v...v.>.>v.>>..vv +..v>>v..>>>vv>.v...>>>.>.......vv>.v.>>...>>>.vv>..>.>.v>......>v....>>>v>.>.>>.v>..v>>.>.vv..v..>..>..>.>.vvv....v>..v.v>>..>>.....>>.>>.. +v>v>>>>v...v>>.v>>v>>...>.>>..>v..>v.v.>>..>..>>...vv>.v...>.>.>...>.v......v>>.v..>..v>v>v....>v...v.v.>.....v......>v.v..v.>>>.v...>>>>.. +>v..>.........>.v>.....v>..>.v>v..>v..v>v>>v>.>.vv..v...v>vvv..>.v..>.v.v>>>>...v>v.>>v>.....>..>>..v.>..>>..>>.v.>...vv.>...>v.>v>.v.v...> +>..>vvv..>...vvv>>v>.vvvv.vv.......>..>vvv.>>>v.v.>vv>vv.v.>.>.>...v.v.>>>..v.>....>.>v.>>v...>v..v.vvvvv>>>>v.vvvv>v.v>v.v.vv.>..>v..v.v>> +..v.....>>v..v>>v.v.vv.....v.>..>...>......>...>.v>..>..vv.vv...>vv>vvv..>v>v>>v.....>>..vv>>..>>>>......v..v.v...v.vv>.>vv..>v...>..>..>.> +...>>vvv.>.>>>v...v....v.>.v>.v.>......>....>v.>.v>v.vv.>>>v>>v...v.>.>vv.v.v>>v..vv>vv>>.......vv.>.v.>v..vv.vvv.v.v>...v..>>.v.v..vv.v.>. +v.vv>..v...v.>>..>v.>v.>>.>......>v..>>>v>....v.v..v>.v.v.v..v....v.v.>v>vv>.>>.v>v..v.v>....v.v>>v.v.>>..v...>v.>v>v.>..>>.>>vvv.>>..v.>>v +..vv..>...v...>>...>>.vv>>>v.v>.vvv.>vvv>v.v....>.v>....>>....>.v..>....v.>.>.>>.>...v.v.....>>>v.>vv>>>..v>>v....>>.>.v>.v>>..>>vv>...vv.. +.v>v>..>>......>.>>v...>v.vvvv.vvv.v.....v>vv.v>vvv...v.>..>>....>>...>.v....>....v...vv..vv>...v>.>v.>v.>..>.>>......>v..>v>v..vvvv.v...v. +.v...v>.....v>v>.>>vv.......vvv.vv>.>....v...>...vv.>>>...>>...v>.vvv..>>v......>v...>...v.v>v...>.v..>>vvvv...v>>..>.>..v.v.v..v.v>>v.v.v. +...v>...>>vv>....v.>.v>.>....v......>vv....v>.>..vv.>...>....v>.......>v>>>v.>.....>..>>.>v.>>.>...v>.v.>vv>.v>vv.>v..v>>>....>...>..vv.>.. +..>v.vv>>vvvvvv.>v.v....>.v.vvv..>v....vv..v>v.>v.>v.vv....vvvv....v>>..v>>>.>.>.>vv..>.>>vv>.>>>.v...v....>vv...vv.vv.v>v>........>.v>.vvv +.>..>...v..>>>..>...v>>v.vv.>>v.v..>..v>.>>.v>vv.>..>v..v.>vv..vv....v...>.v.>>>.>v..vvv.>v>.v.v..>.>..>v.>>>>.v>.v...>v.>..v.>vv.>..vvv.>. +>.v.......v...v.....v.v>v...vv>.>>vv.v>.vvvv.>v>vv..v>v>>..>.....v...v..........v>v>.v>v>.>..v..v.>.vv>.>>v>.vvv>.v.>vv...vv>v..v.>>.v..v.. +>.v.v>..v.>v...>.v>>.>v..>....v.>.v>v.>>.v....v.>>vvv>..vv.>>>...>>>v.v>>..v.v.>.>vv...vv.v..v>>>.vv.>v.>...v..>>..v...>....>..>>.>..>>>.>v +>..v..>.>v>.>.>.....v.>..v>.v>>.v>..>.vv...v...v.>...v...v..vvv.>v>v..>>>.>>>>.v.>v..>..vv..v>...>v.>...vv..>>.>v..>..v.>.>.>vv.v..vv>.v..> +>.>vv...>v>..v>..>>..>.v.>.>..>>.v.>>...v>.v...>vvv>v..>.>.v.vv.v.vvv.vv.>...vvv..v.v.>.>>>....v...>...>..v>v>..>v>.>.>..>>.....vv..vvv.v.v +>..>.>v>..v>.>.>>v>.v.....>>..>....>>>>>.>>...v>.>..>.>..vvv>..>vvv.>.>..v.>>.>..vv...>...>..v..vv.>..v...v..>.>vvv.>>v.>.>..>..>...>>..v.. +..v.>.v..>..v.v...vvvv.vv.>v.v.>v>>.v.vv.>........>....vv.>>....>v....v.v.>.>...vv....>..v.vv>.......v..v..vvv.>v...vv>>..vv...>v..v.v.>.v. +.>..v>.v>..>>.v..>.>..>...vvv..>.v..vv.>>v..v>>v.>.v.>>>......v.v>>v..v>...>.v..v.....v....>>.>v........v>vv>..v....>>.v.vv>.v...v.>.>>.v.. +..>..v>...v.vv.>.v>>.v.v.vv...>...>.vv..>.>..v.v>v..v.v...v.>.>...v..>>v>.v>.v.>v>...v>>...>>..>.v>..vv>v>v.>v.v..>..v.v>v.v...vvvvv.v.v>.> +vv>>v..v..>>v.>..v..vv>>.>...>>...v..>.>>.>vv.....v......v...v>.vv>..>v..vvvvv.v.....>>v.v.>>.v..v.v>..>v.>v>>>........v.v>.....vv.>.v.>... +.>..vv>...vv>>v>..>vv.v...>.....vvv>..vv>.>..v.vv....>.....>..vv.>..v...vv.>..>....>v>vv>>>.>..>v>vvvv..>>>v..>..v........v...>>>vvv.v..v>. +.>....v>v.>.vv>>>v>....>.v>.v>.>.>.v>v.>>..v.>.....v.>>>>..vv>.v.vv..>v>>.>>.v>>.v>v......>.>v..v.v.>..>...v.>..>..v.....v>.....>.vv.>..>v> +.>.....v..v...vv>....>>>.v..>>>v..>.v.v.>.>>...vv>>v......>>.v..>>.v>.v..>.v>.....>v>>.>v.vv..>...v..v>.v..v>.v..v..>>>v>>..v>..v.vv>.>.v.> +.v......v.>vv>>v.......v..v.v...v>...v>v>.>>vvv.vvv>vvv.>.v>.>....v>v.v..>>..v>>>v......v....>v.v....v>.>.>>v.>.....v>v......v.>>.>.v.v>vvv +.vv.v..vv>...v.v..v.v....>....v.>..>>.v.>..vv..>>...v..>>.>>.v.>>.>>v>..v...>>.>..>..>vv>>>vv>..v>v..v.........v>v.>>.v.>>>.v>..>>v>.v..>.v +>.v>>>>>.vvv>>.v.vv>>>..v.v.v...>>>.>.v>...>.vvvv..>.>>.vv..v....v.>.>v>>..v.>vv...>.....>>>.>>...v..v..v>......v.>..vv.......v....v.....v. +.>.....v.>>.v..v..>..>v..>vv.v..v>v>>>.vvvv.>....v>v...>v.vv.>....>.vvvv>>v..>.>v.v>.v.>>...>..>.>>v.>..v>......>..v>>v..v..v>v.>.>.>v.>v>> +....vv..v.vv.v>..v.vv>>>.......vv....v>.vv>..vvv.vv.>>..v...>v>...>v.>..>.>.vv..>.>>.v.>.v>.>.>....v..>v.>...>v....v>>..v>vv..>>..>.>.....> +...>..v.vv>.vv.>..v>>v....vvv>.>.v.>.....>.v.>>>v>...vv...v>>......v.>.v.v.....v>.>>v>v.>.v.vv.>v>vv>..>>v..v...>>...v...vv.>>...>>.vv..>.> +>>.v.>v..v.>vv.>.>>...v.>.>.>.>>vvvv>>.>..v.v.....vv>v....>>..>.......v...v..>.v>..v....>>vv...vv>..v>v...v>vv....>>..>.>....v..>v>>v.....> +>.>.v>.vv..>.>>..v....v..>..v>v.v.>vv>..v.v.v>>>>..>vv>>>...v..v>..v..v.>..>..>.>>....v>vvvv...v>>.>v...vv.v.>.v>vv.>.vv.v....v.>..>>...>.v +v.>.>.vv>>v..>>..v..v..>.v..>v..>.v....>>..>...>.vvv....>v.v..v>>v.......v>vv>v>.v.v..v.v>.>>.v>.vv>.>v.vvv>>.>>v.vvvv.v.v>vvvvv.>>>vv>..>> +.vv..>>..>..v...>.vv...v.....v>>.v>>>....>v..vv.v..>..>....>.v.>..v..vvv>>v>....>..>.v>vvvv.>>>>vvv>>>v>v.>.v.v....>..>...v.v....v>>...>.>v +>.v..>.......v.>vv...>..v..v>>v...>..vv.>...v..vv>>.v>vv....v..vv..>v.....vv>...v.>v>....>v.v>..>.v.vvv>v>>>.>>>.>v...>>....vvv.v>.>.>v>>.> +>.v.>>....v......vv..>.>>>.>>...>>v..vv....>>.>v....v.>.>.>v.>>.v>....v...>>>..vv...>.v.vv.>..>v...>.>.>.....>....>>vv>>.v>>>...>.v.....>v. +..>>v...>>v.>.>>>.v..>>...>>.....vv.>>v.>..>>v>.vv..v..v.>.>.>v>.v>v>.vvvv>v>v..v>.v...>.v.v.vv>>v.v..v..vv.>vv>>.vv>...v>>.>.v>..v...v.>.> +>v..v.>..v...v....v.v.>>v.v>.>.>.>>..v...vv.v.vvv.vvv.v.v>.>..>.v..>v>.>.>...v.>>...>v>..>.vv.v.....>v...v..>..>.>...v.v.>..v.>.>vv...v.v>> +>.v..v.....>v>v.>.v....>...>....>v......>.v.>..v.v.....vv...v..>...v.>>.>..>...>.>..v>.>..>>v..>v.>>.>.vv.>v.>.>.>>..>>..v>.>>>.v..>v>>.v.. +v>..>v>..v>.v>......v>v.v...>..>>..>.v>...v.>v.v..>..v>>.vv.>>..vv.>.>vv.>>>..>.>>v.vv....v>..>v>..>>vv>.vvv.v>vvvv..vv>.....>.>v>....>>>>. +..>v.>>>..vv.>>>...>......v...>..>vv>vv.>..>....vvvv...v.......vv.v>>>.>..vv>v>vvvvv>v.v...>..>.>......>....>v>..>.vv..>v.v...v>..v.>v.>>.. +>.>>...v.>..vv.>.>..v.>>..>>.v...>.>v>>v.....vv.v>>>vv>..v>.>..vvv.vv..>..>.v.>v>.>.>>v..>.....>v.>v.>vv>.>.>>>.v..vv.......>.>v....vv.v.vv +v.>>vv>v>v.>.>>.v.v>vv>.v.>...>>....vvv.>v>..>..>...>>..>..>v>.>>.vvv.>...v>>.>..v.>v>..v.>.v..v.v..>..v.......v...vvv>>.>.vvv....>v.vv>v.> +>>>.v>.>v>>>>v>>..>...>v.>....>v.vv.>.>....>...v..v.>v........v>.>v>.>..v>>....vvv.vv.>vvv.v...vvv>.....v.......>..>>v.vv.>v...>.vv>>v.>vvv +.>....>.v.v...v..>v.v..v...v.v.>...>.v.v.v..v.vv..v..>.>......v>>v.v.v...>.vv.>>v.v.....>.v...>.v>>vv.>..>vv..>>.v....>.>.v..>>v.....>>>vv. +v..>v.v.v..>>....v....v.v>.v..>>.>..v>..vvvvvv>v>v...>....>.v>.>.v.>...>..v>>.>>>v.....>>>.v.>.>v>v>>..>..v..>v..>v>vv.v>v...v>..>v>>.v.>v. +....>v>...........v.>.v..>>v.>...>.>.vv..v>..v.v>...>.v>>v.>>>v>.v>..>..v.....v>.>>>.v..>>.>.v>v..v>....v>>v.>v.>v>vvv...v...v>.>..v.>..>>. +vv.>.v>v........vvv....>>.v.......>.>>..>>v.>v.v....>>v..>v..>>...>>..vv.>>>>.vv.....>>.v.>.v.>.>>.v..v.v..v.>.>v.v>>>vv.vv.>vv...v>>...vv> +>...vv....>>>.v>........v>vvv..v>>.>>>v.>v>>>..>>.>v.vv...vv.>v>v.>>.>v.>>.....vv.>.>.....>.>.........>v...>vv...>.v..>.v>.v>>..v....v.>v.v +>>vv>>>..>>vvv>v>..v>.>..>>>....v>>>.vv>.>..v...v..>.>v>>....v..v.v.v.vv.v>v..>vvv>>>v.>v..vv.>vvv..........>.vv..>>v>v.....vv>...>>.v..v.. +v....>>..v....>v.>.>vvv.vvvv>..v.vv.....v.>.v>.>.>>v>..>.v.v...v>v>...v.>.>.v.v...>...vv.>vvv..v>....>v>>v....v>....v.>..>>.vv>v.v>.v>>>v.> +.>>.vv...vv.>v..>...v.>v>v>vv.>.>>...v..v...>>.v>.>.v..v.v>.v.>.v>v...vv>.>v....v>.>..v.v.>>.vv.>v.....>....>..v...v....>>.vv...>..>...v..> +v.>>.....>>>>..v.>>..v.....v>v.....v>.v.v>.v.......v.v.....v>v.vv..>..>v..>>.>..v>...>.>.v.v>>.v.>....>>....v.vv.v...v>...v>v.v..v...>v.>.> +.vv>>vvv...>>v..v>v..>>.v>v...>..v..v..>v.v..vvv....>...v.v.>.v>....>...>>v>..>...v.vv>..v>..>...>v>>>.v>........>.>.>.....>>v..v.vv>>...v. +..v>>.>.vv>>....v.v>v.v>.v...vvv.v...v....>.v....>..>v>>.vvv.v>.>.>>.v.v.>..>v.v.v>vvvv>v>v.v>>>v.>......>....v>..>v>..v..v....>v.>.v..v>.> +.>...v.>v>v.v>..>.v>>...>>.>.v.vv>..v.>.....vv>..>>>.>v....v..v..v...>...v.v.v.v>..v..v>.>>.v...>.>..v...>v..v>.>....v....>..v.vv.>..vv.>.v +..v.v>......>>v>v>.v>v>v>>v..>..vvv..v...>vv>.vvv.vv...vv...>.>>.>v....v.>v.v.v.v>vv.>>v.>>vv...v.>..vv>..vvv.>.....>..v..v.>vv.v....>.>.vv +v>>v..v>v..vvvvv.>v.>....v..v..>>>v....v>.>v>v......>...>>.v.vv..vv.>vvvv...>v>>.>..v>>.v>...>vv..vvv.>>v..v>..>v...>.>>..>>.>>.>v.v..>.... +>>>.vvvv.>.v..v.>.v>>.v...>v>vv.v...v..v......>v...vv.v>.v..>..v.>vvv.>vv..>>>.v....v.v...v.vv.vv.v..>.>vvvv...vv..>....v..>...vv>..v>..v>. +..v...v.v>v>.>v>.>..v..>v>..v>..>>...v..>.>.v.>.>vv....>>>>>>..>>>vv..vv>vvv.vv>vvvv.>v...>...v...>v>.....v.v>..vv>..>v.v.vv.vv>>.vv..>>..> +.>.v..>v.v.v...v>>.>....vv.....vv.>...>..v>vv>v>..>..>v.vv>>.v>.v.>vv>>>..>>v.>..>.vv..>.>..vvv..v.>........>v>v>>>v.v.vvv...v..vv>.>>.v>.. +v>v>vv>>>.v.v..v>.>..vv.v.>vv.>.......v>v..>>...v>...v.>vvv>vv.v....>>v.v>>>.v>.>v.>>.v>....v.v.>..>>..>>v..>vv...v..>.>>.>v>.>....v>vv.>v> diff --git a/day25/main.c b/day25/main.c @@ -0,0 +1,29 @@ +#include <stdio.h> +#include <time.h> +#include <string.h> + +void puzzle(const char *filename, long long *res1, long long *res2); + +int main(int argc, char *argv[]) { + printf("Advent of Code: day 25 END\n"); + double time_start = clock(); + + if (argc <= 1) { + printf("Usage: %s inputfile.txt\n", argv[0]); + return -1; + } + + const char *filename = argv[1]; + long long counter1 = -1; + long long counter2 = -1; + + puzzle(filename, &counter1, &counter2); + + printf("Puzzle #1: %lld\n", counter1); + printf("Puzzle #2: %lld\n", counter2); + + double elapsed = clock() - time_start; + printf("Elapsed: %f\n", elapsed / CLOCKS_PER_SEC); + + return 0; +} diff --git a/day25/puzzle.c b/day25/puzzle.c @@ -0,0 +1,149 @@ +#define _DEFAULT_SOURCE + +#include <stdio.h> +#include <stdlib.h> +#include <errno.h> +#include <string.h> +#include <strings.h> +#include <assert.h> +#include <ctype.h> +#include <stdbool.h> +#include <math.h> +#include <unistd.h> + +#include "util.h" + +#define STR_LEN 1024 + +struct cucumber_t { + enum direction_t { SOUTH, EAST } direction; + bool stuck; + uint64_t step; +}; + +struct tile_t { + struct cucumber_t *cucumber; +}; + +void print_tiles(struct tile_t (*tiles)[9][10]); +int step(struct tile_t (*tiles)[9][10], uint64_t step); + +void puzzle(const char *filename, long long *result1, long long *result2) { + FILE *infile = fopen(filename, "r"); + if (infile == NULL) { + fprintf(stderr, "fopen() error: %s\n", strerror(errno)); + return; + } + + char buf[STR_LEN] = {0}; + size_t line = 0; + + // test data only + struct tile_t tiles[9][10] = {0}; + + while (fgets(buf, STR_LEN, infile) != NULL) { + int len = strlen(buf); + assert(len > 0); + for (int i = 0; i < len-1; ++i) { + char c = buf[i]; + if (c == '>' || c == 'v') { + struct cucumber_t *cucumber = malloc(sizeof(struct cucumber_t)); + assert(cucumber != NULL); + cucumber->direction = (c == '>') ? EAST : SOUTH; + cucumber->stuck = false; + cucumber->step = 0; + tiles[line][i].cucumber = cucumber; + } + } + line++; + bzero(buf, STR_LEN); + } + + //print_tiles(&tiles); + for (uint64_t i = 1;; ++i) { + //printf("- step %llu -\n", i); + if (step(&tiles, i) == 0) { + //printf("step %llu is final\n", i); + //print_tiles(&tiles); + *result1 = i; + break; + } + //print_tiles(&tiles); + } + + *result2 = 0; + + // mutiny! ignoring feof/ferror. + fclose(infile); +} + +void print_tiles(struct tile_t (*tiles)[9][10]) { + printf("----------\n"); + for (int y = 0; y < 9; ++y) { + for (int x = 0; x < 10; ++x) { + if ((*tiles)[y][x].cucumber != NULL) { + struct cucumber_t *cucumber = (*tiles)[y][x].cucumber; + printf("%c", cucumber->direction == SOUTH ? 'v' : '>'); + } else { + printf("."); + } + } + printf("\n"); + } + printf("\n"); +} + +int step(struct tile_t (*tiles)[9][10], uint64_t step) { + int moved = 0; + // eastbound cucumbers + for (int y = 0; y < 9; ++y) { + for (int x = 0; x < 10; ++x) { + int nx = (x == 10-1) ? 0 : x+1; + struct tile_t *tile = &(*tiles)[y][x]; + struct tile_t *next = &(*tiles)[y][nx]; + if (tile->cucumber != NULL && tile->cucumber->direction == EAST && tile->cucumber->step != step) { + tile->cucumber->stuck = next->cucumber != NULL; + } + } + } + for (int y = 0; y < 9; ++y) { + for (int x = 0; x < 10; ++x) { + int nx = (x == 10-1) ? 0 : x+1; + struct tile_t *tile = &(*tiles)[y][x]; + struct tile_t *next = &(*tiles)[y][nx]; + if (tile->cucumber != NULL && tile->cucumber->direction == EAST && !tile->cucumber->stuck && tile->cucumber->step != step) { + assert(next->cucumber == NULL); + tile->cucumber->step = step; + next->cucumber = tile->cucumber; + tile->cucumber = NULL; + moved++; + } + } + } + // southbound cucumbers + for (int y = 0; y < 9; ++y) { + int ny = (y == 9-1) ? 0 : y+1; + for (int x = 0; x < 10; ++x) { + struct tile_t *tile = &(*tiles)[y][x]; + struct tile_t *next = &(*tiles)[ny][x]; + if (tile->cucumber != NULL && tile->cucumber->direction == SOUTH && tile->cucumber->step != step) { + tile->cucumber->stuck = next->cucumber != NULL; + } + } + } + for (int y = 0; y < 9; ++y) { + int ny = (y == 9-1) ? 0 : y+1; + for (int x = 0; x < 10; ++x) { + struct tile_t *tile = &(*tiles)[y][x]; + struct tile_t *next = &(*tiles)[ny][x]; + if (tile->cucumber != NULL && tile->cucumber->direction == SOUTH && !tile->cucumber->stuck && tile->cucumber->step != step) { + assert(next->cucumber == NULL); + tile->cucumber->step = step; + next->cucumber = tile->cucumber; + tile->cucumber = NULL; + moved++; + } + } + } + return moved; +} diff --git a/day25/test.txt b/day25/test.txt @@ -0,0 +1,9 @@ +v...>>.vv> +.vv>>.vv.. +>>.>v>...v +>>v>>.>.v. +v>v.vv.v.. +>.>>..v... +.vv..>.>v. +v.v..>>v.v +....v..v.>