From 9161b5ca8de4108cfc40def7e0edf91b957f647b Mon Sep 17 00:00:00 2001 From: zv0n Date: Fri, 9 Dec 2022 19:44:28 +0100 Subject: [PATCH] 09 --- 2022/09/Makefile | 16 + 2022/09/input | 2000 ++++++++++++++++++++++++++++++++++++++++++++++ 2022/09/main.cpp | 123 +++ 3 files changed, 2139 insertions(+) create mode 100644 2022/09/Makefile create mode 100644 2022/09/input create mode 100644 2022/09/main.cpp diff --git a/2022/09/Makefile b/2022/09/Makefile new file mode 100644 index 0000000..309a19b --- /dev/null +++ b/2022/09/Makefile @@ -0,0 +1,16 @@ +CXX ?= c++ +CXXFLAGS ?= -std=c++11 -Wall -Wextra -pedantic -O2 +PROJECT = rope_simulator + +all: ${PROJECT} + +${PROJECT}: main.cpp + ${CXX} ${CXXFLAGS} -o $@ $^ + +test: ${PROJECT} + ./${PROJECT} + +clean: + ${RM} *.o ${PROJECT} + +.PHONY: all clean test diff --git a/2022/09/input b/2022/09/input new file mode 100644 index 0000000..97e85a5 --- /dev/null +++ b/2022/09/input @@ -0,0 +1,2000 @@ +D 1 +L 1 +U 1 +R 2 +L 1 +U 1 +L 1 +R 2 +U 1 +D 2 +L 2 +D 1 +L 1 +R 1 +L 1 +U 1 +D 1 +R 2 +L 2 +U 1 +R 2 +L 1 +R 1 +U 2 +D 1 +R 2 +L 1 +U 2 +D 1 +R 2 +L 1 +D 1 +R 1 +U 1 +R 1 +L 1 +U 1 +L 1 +D 2 +U 1 +R 1 +D 2 +L 1 +U 1 +L 1 +U 2 +R 1 +D 2 +U 1 +R 1 +L 2 +D 1 +L 2 +R 1 +U 2 +L 1 +R 1 +L 2 +U 1 +R 1 +L 1 +U 2 +D 1 +L 1 +U 1 +R 2 +U 1 +D 1 +L 1 +R 2 +L 1 +D 1 +L 2 +R 1 +L 2 +U 2 +D 2 +U 1 +D 2 +R 2 +L 2 +R 2 +D 2 +R 1 +L 1 +U 1 +L 2 +D 2 +L 1 +U 1 +R 2 +D 2 +L 1 +U 2 +L 1 +U 2 +D 1 +R 2 +D 1 +U 2 +D 2 +L 2 +U 1 +L 1 +R 2 +D 2 +L 1 +U 1 +R 1 +L 1 +U 2 +D 1 +L 1 +R 1 +D 1 +L 2 +D 1 +U 1 +D 3 +L 1 +U 1 +D 2 +U 2 +D 2 +L 1 +R 1 +L 3 +R 2 +U 2 +R 1 +U 3 +L 2 +R 3 +U 1 +R 2 +D 2 +U 3 +R 3 +D 2 +L 1 +R 2 +L 3 +R 2 +D 1 +R 1 +D 2 +R 1 +L 1 +U 3 +D 1 +U 2 +D 3 +R 2 +U 2 +L 1 +D 1 +U 1 +D 1 +R 1 +U 2 +R 1 +L 2 +U 1 +D 1 +L 2 +R 2 +D 1 +R 3 +L 2 +R 1 +U 1 +R 2 +U 1 +R 1 +L 3 +R 3 +D 3 +L 1 +R 3 +D 2 +L 2 +R 3 +D 2 +R 2 +L 2 +U 3 +L 3 +U 3 +R 1 +D 2 +R 1 +D 3 +L 3 +D 1 +U 1 +D 3 +R 1 +U 2 +L 3 +U 1 +L 3 +R 1 +U 1 +R 1 +D 1 +R 1 +L 2 +D 1 +R 3 +L 1 +D 1 +U 3 +D 3 +L 1 +U 1 +D 2 +U 3 +R 2 +U 2 +L 1 +D 3 +U 1 +L 1 +R 1 +U 3 +D 4 +R 3 +U 2 +R 2 +U 3 +L 3 +U 4 +L 3 +U 1 +D 2 +L 1 +U 4 +R 3 +L 1 +R 1 +L 4 +R 4 +L 2 +U 3 +D 4 +U 2 +R 1 +D 4 +R 4 +L 1 +R 2 +U 3 +L 2 +D 3 +U 1 +L 3 +U 3 +L 4 +D 3 +R 2 +D 1 +L 4 +D 4 +L 2 +D 1 +L 2 +R 4 +U 4 +L 3 +R 1 +D 1 +R 1 +U 2 +L 4 +U 3 +D 2 +U 3 +D 3 +U 4 +L 4 +U 3 +D 2 +R 2 +U 3 +R 2 +L 4 +D 4 +R 2 +D 1 +L 3 +U 4 +D 4 +R 1 +U 4 +D 4 +U 4 +R 1 +U 4 +R 2 +D 4 +U 1 +R 4 +L 2 +R 3 +U 3 +D 4 +R 1 +D 2 +U 2 +R 1 +U 4 +D 4 +L 4 +U 2 +R 1 +U 1 +D 1 +L 2 +D 2 +U 1 +D 2 +U 3 +D 2 +L 3 +U 3 +D 3 +L 3 +R 3 +L 2 +U 4 +L 4 +U 4 +L 1 +D 1 +R 4 +D 2 +L 1 +R 1 +L 4 +D 4 +U 1 +D 2 +U 5 +R 2 +U 3 +D 2 +L 2 +R 1 +U 1 +R 4 +D 4 +R 2 +L 1 +D 3 +U 3 +L 2 +D 4 +U 4 +D 4 +R 1 +U 1 +D 3 +R 1 +D 5 +U 4 +R 4 +D 5 +U 5 +L 5 +D 3 +R 2 +D 4 +L 2 +R 5 +D 5 +R 4 +D 1 +L 1 +R 5 +D 1 +U 1 +L 4 +R 5 +D 2 +L 1 +U 1 +R 5 +D 4 +L 1 +R 1 +D 5 +L 2 +D 4 +R 3 +L 3 +U 2 +D 1 +R 5 +L 3 +U 1 +D 3 +U 3 +D 1 +L 2 +R 3 +U 3 +D 5 +L 1 +D 5 +R 2 +U 2 +D 5 +L 4 +R 4 +L 2 +R 4 +D 4 +U 3 +D 1 +U 5 +L 5 +U 4 +D 4 +U 4 +R 2 +D 2 +L 2 +U 5 +L 5 +R 1 +L 4 +D 1 +R 5 +D 5 +L 3 +U 4 +R 2 +U 3 +L 1 +U 1 +D 2 +L 3 +D 2 +L 1 +U 4 +L 1 +D 6 +L 5 +U 4 +R 2 +L 6 +R 3 +L 4 +U 1 +D 5 +R 4 +L 5 +R 5 +U 5 +R 6 +D 2 +U 2 +D 3 +U 5 +R 6 +U 5 +L 3 +R 1 +L 6 +D 3 +L 6 +D 6 +R 6 +D 3 +R 6 +D 1 +U 5 +R 1 +U 2 +R 6 +U 2 +L 1 +R 4 +D 6 +L 4 +R 5 +D 1 +R 5 +U 1 +L 3 +U 3 +L 2 +D 2 +R 5 +L 1 +R 5 +L 4 +R 6 +U 3 +R 6 +U 5 +R 4 +D 2 +L 4 +U 2 +R 6 +L 3 +U 2 +L 6 +U 4 +R 6 +L 6 +D 5 +U 5 +L 1 +R 4 +L 1 +D 4 +R 4 +L 6 +D 3 +U 2 +D 6 +R 4 +D 6 +U 3 +L 6 +U 6 +R 3 +L 2 +R 1 +D 5 +R 2 +L 1 +U 1 +D 1 +L 3 +D 5 +R 5 +L 3 +U 2 +R 1 +U 4 +R 2 +D 6 +R 2 +U 4 +R 1 +U 3 +L 5 +D 5 +L 1 +R 4 +L 5 +D 5 +R 2 +U 7 +L 4 +U 6 +R 5 +U 7 +D 1 +R 4 +D 3 +R 5 +U 5 +D 6 +L 4 +U 2 +D 2 +R 6 +L 1 +R 4 +D 1 +U 2 +L 2 +R 2 +U 2 +R 6 +D 2 +U 5 +R 3 +U 3 +D 6 +L 3 +R 4 +U 4 +R 2 +D 3 +U 1 +L 3 +U 5 +D 7 +U 4 +R 5 +D 4 +R 6 +U 1 +D 5 +U 3 +R 6 +U 4 +R 6 +L 5 +R 6 +L 4 +R 2 +U 7 +L 5 +R 5 +D 4 +L 7 +D 7 +U 1 +L 2 +D 4 +R 3 +U 4 +R 3 +U 6 +D 4 +L 2 +R 2 +U 4 +D 6 +U 4 +D 1 +R 5 +L 7 +D 4 +U 1 +D 3 +R 7 +D 7 +U 4 +R 4 +D 6 +U 4 +R 7 +D 3 +L 4 +U 7 +R 5 +D 6 +U 1 +L 4 +U 6 +D 5 +R 3 +U 2 +D 7 +U 7 +D 7 +U 4 +D 7 +U 4 +D 2 +U 7 +R 3 +U 7 +R 7 +D 3 +L 3 +R 5 +D 3 +R 5 +U 8 +L 6 +R 7 +L 4 +R 8 +U 6 +L 2 +U 8 +R 3 +U 5 +R 2 +D 5 +R 7 +D 4 +R 3 +L 5 +R 4 +D 8 +U 4 +L 4 +U 2 +L 4 +R 8 +D 2 +U 5 +D 3 +R 1 +U 5 +L 2 +R 2 +U 6 +L 3 +R 8 +L 3 +U 3 +R 5 +U 1 +L 3 +R 6 +L 4 +R 5 +D 5 +R 7 +L 3 +R 1 +D 8 +R 1 +U 3 +L 1 +U 6 +D 4 +R 8 +U 1 +D 6 +L 5 +R 5 +U 4 +D 8 +R 8 +L 1 +R 3 +U 5 +L 4 +U 2 +R 6 +U 5 +R 6 +U 7 +L 1 +R 1 +L 8 +R 7 +U 8 +R 6 +U 1 +L 1 +R 3 +D 4 +R 6 +L 7 +D 4 +U 7 +R 7 +U 6 +L 6 +D 4 +R 5 +U 1 +D 8 +R 2 +D 1 +R 6 +L 3 +D 7 +R 5 +L 4 +D 4 +U 3 +D 3 +R 3 +U 3 +L 8 +D 1 +L 7 +D 7 +R 2 +L 1 +U 2 +D 8 +R 1 +U 7 +L 8 +U 3 +R 5 +U 7 +D 7 +U 3 +L 5 +U 1 +D 3 +U 6 +R 9 +L 7 +U 8 +L 6 +R 4 +L 1 +R 6 +U 4 +L 4 +R 4 +D 6 +L 9 +D 2 +L 2 +R 5 +L 8 +U 2 +R 5 +U 4 +L 2 +D 6 +U 8 +D 8 +U 4 +R 1 +D 9 +U 5 +D 8 +R 1 +U 7 +D 4 +L 4 +R 3 +L 2 +D 4 +L 9 +D 1 +U 2 +L 2 +R 1 +D 5 +U 8 +R 8 +U 9 +L 8 +D 4 +U 6 +L 1 +D 8 +L 6 +U 3 +R 2 +L 7 +D 6 +U 7 +D 7 +L 8 +R 2 +U 2 +L 6 +D 6 +U 4 +R 3 +L 5 +D 4 +R 3 +D 6 +L 5 +R 7 +U 3 +L 6 +U 6 +R 8 +D 5 +U 7 +R 4 +U 2 +D 6 +R 9 +U 3 +D 3 +U 1 +L 4 +R 8 +D 8 +L 2 +D 3 +L 9 +U 6 +R 4 +L 3 +R 8 +L 3 +D 9 +L 2 +D 3 +U 1 +D 3 +U 2 +L 1 +U 9 +L 8 +D 1 +L 9 +U 1 +L 2 +D 9 +R 10 +D 8 +R 9 +D 3 +U 9 +D 5 +R 9 +U 5 +D 3 +U 4 +D 10 +L 3 +R 1 +D 4 +U 1 +L 4 +U 4 +D 7 +L 8 +D 8 +L 3 +R 3 +L 9 +R 3 +D 4 +R 9 +L 1 +D 4 +U 5 +L 7 +D 9 +R 4 +U 3 +L 4 +D 2 +L 9 +U 3 +D 10 +L 4 +D 7 +R 7 +L 6 +U 2 +D 9 +U 5 +R 7 +L 7 +U 4 +L 7 +R 1 +L 10 +R 9 +U 1 +L 9 +U 3 +L 6 +U 9 +R 8 +L 2 +R 1 +U 9 +R 7 +D 1 +L 1 +R 5 +U 7 +L 7 +D 6 +R 2 +U 2 +D 1 +L 10 +U 9 +D 1 +L 5 +R 9 +D 2 +L 1 +R 6 +D 9 +U 3 +L 9 +R 7 +L 6 +U 2 +R 6 +L 2 +D 6 +U 8 +D 7 +L 1 +R 2 +U 7 +R 5 +U 2 +L 10 +D 2 +L 4 +R 8 +L 5 +D 4 +L 4 +R 3 +U 3 +D 10 +R 8 +U 8 +D 10 +U 4 +R 2 +L 11 +U 10 +R 2 +U 2 +L 11 +R 11 +D 3 +U 11 +L 11 +R 1 +L 9 +D 10 +R 8 +L 2 +D 1 +L 1 +D 9 +R 6 +D 10 +U 4 +L 7 +U 5 +L 3 +U 1 +D 3 +U 1 +L 10 +R 3 +D 11 +U 11 +L 9 +R 5 +L 7 +D 1 +R 11 +U 10 +D 6 +L 8 +R 2 +L 7 +U 7 +L 6 +D 11 +R 1 +L 11 +D 9 +U 6 +D 2 +L 2 +U 1 +L 10 +D 5 +U 8 +D 3 +R 6 +U 11 +R 3 +D 5 +U 7 +L 3 +U 4 +D 5 +L 8 +D 10 +R 7 +D 4 +U 10 +L 7 +R 5 +L 3 +R 6 +U 5 +D 9 +R 8 +L 2 +U 6 +R 5 +D 3 +U 11 +R 3 +U 3 +D 1 +L 11 +D 10 +R 1 +U 11 +R 6 +U 1 +L 8 +D 10 +U 5 +L 4 +R 5 +U 4 +L 5 +D 3 +U 9 +L 9 +D 3 +R 6 +D 8 +U 8 +R 3 +L 8 +R 3 +U 2 +D 11 +R 7 +L 2 +U 1 +L 8 +R 6 +L 1 +D 6 +U 9 +L 9 +D 2 +L 7 +D 7 +U 8 +D 4 +R 11 +D 2 +U 7 +D 10 +R 8 +L 9 +U 9 +R 11 +L 9 +D 9 +U 1 +R 2 +D 4 +U 2 +D 8 +R 2 +D 3 +R 8 +L 5 +R 5 +U 7 +D 3 +R 12 +L 1 +U 8 +L 9 +R 1 +U 8 +L 1 +U 8 +L 4 +D 3 +R 9 +L 8 +U 11 +D 3 +L 12 +D 1 +U 11 +R 8 +D 1 +R 4 +D 3 +U 12 +R 6 +U 12 +R 6 +U 5 +D 10 +L 9 +R 1 +U 12 +D 5 +L 1 +R 6 +U 9 +L 9 +D 3 +R 9 +D 11 +U 1 +L 3 +U 10 +D 4 +L 9 +R 3 +L 8 +D 2 +R 2 +D 2 +R 5 +D 8 +R 7 +L 9 +D 12 +L 5 +U 8 +L 5 +R 5 +U 3 +D 7 +R 7 +U 8 +R 1 +D 6 +R 12 +D 9 +R 9 +L 5 +R 11 +L 10 +R 9 +L 2 +R 4 +D 1 +R 3 +U 11 +L 10 +U 6 +D 11 +U 13 +D 6 +L 1 +D 7 +R 13 +U 4 +D 1 +R 12 +D 11 +L 7 +U 11 +D 9 +U 10 +R 1 +D 7 +U 11 +R 11 +U 8 +L 6 +D 3 +L 3 +D 9 +R 3 +D 1 +U 11 +D 1 +R 6 +L 2 +R 8 +U 10 +L 7 +D 8 +U 12 +R 12 +U 8 +L 1 +U 8 +R 13 +L 9 +D 1 +L 8 +R 6 +L 10 +R 8 +D 11 +R 3 +U 4 +L 2 +U 4 +D 12 +U 1 +L 12 +R 9 +L 11 +R 2 +U 12 +R 5 +L 12 +D 4 +L 7 +U 10 +L 4 +R 11 +D 6 +R 6 +L 3 +D 3 +U 9 +D 6 +L 8 +R 1 +U 12 +R 12 +U 12 +D 1 +R 3 +L 11 +D 7 +U 7 +R 12 +D 1 +R 10 +D 10 +U 5 +D 8 +R 11 +L 13 +U 5 +D 10 +L 4 +R 13 +L 1 +U 6 +L 10 +D 7 +L 3 +R 4 +U 13 +D 4 +R 12 +U 6 +D 7 +R 10 +U 3 +R 1 +L 11 +R 3 +L 3 +D 8 +R 6 +U 7 +D 13 +U 13 +L 12 +R 14 +D 7 +U 2 +R 4 +L 14 +U 4 +L 10 +R 13 +U 9 +D 2 +U 1 +L 9 +D 13 +R 4 +U 10 +L 8 +D 9 +U 9 +D 6 +U 13 +R 2 +U 13 +L 5 +U 5 +D 14 +R 9 +L 7 +D 8 +R 12 +L 7 +U 6 +D 4 +L 14 +U 11 +D 4 +L 12 +U 7 +L 3 +U 12 +R 13 +U 6 +R 6 +L 8 +R 5 +U 4 +D 5 +R 9 +U 7 +D 9 +U 4 +R 2 +D 5 +L 4 +D 1 +R 13 +D 11 +U 12 +L 7 +R 12 +U 8 +L 3 +U 13 +D 5 +R 12 +U 6 +D 7 +U 1 +D 11 +L 4 +R 14 +U 12 +L 3 +D 13 +U 2 +R 2 +L 6 +D 8 +U 6 +D 14 +U 1 +R 1 +D 1 +U 13 +L 6 +U 11 +D 9 +L 1 +D 7 +U 8 +D 6 +U 7 +D 11 +R 5 +U 11 +D 13 +L 5 +D 14 +L 4 +U 1 +L 8 +R 9 +D 11 +U 2 +L 9 +D 13 +L 5 +D 1 +L 5 +R 11 +U 15 +D 8 +U 9 +D 3 +L 5 +R 12 +U 11 +L 5 +D 2 +L 1 +U 14 +R 13 +D 9 +L 2 +U 8 +D 5 +R 2 +D 13 +L 10 +U 1 +L 5 +D 10 +U 13 +L 15 +U 2 +R 3 +D 15 +R 15 +L 12 +R 14 +L 7 +U 3 +R 12 +L 5 +R 4 +L 8 +D 11 +R 2 +L 13 +D 15 +U 9 +R 10 +U 6 +L 1 +D 11 +L 14 +D 5 +R 11 +L 5 +U 13 +R 9 +L 2 +D 2 +U 7 +L 11 +D 8 +L 11 +R 3 +D 2 +L 13 +D 15 +R 2 +D 13 +L 7 +U 8 +D 8 +U 9 +R 1 +D 7 +L 5 +R 1 +D 9 +R 3 +L 5 +D 10 +R 6 +D 11 +U 15 +L 15 +U 12 +D 7 +L 11 +D 13 +L 11 +D 13 +L 1 +D 15 +L 3 +R 1 +U 2 +L 6 +R 7 +D 5 +L 6 +R 12 +L 3 +U 1 +D 1 +L 10 +R 15 +L 9 +U 1 +L 12 +U 14 +L 3 +U 10 +L 5 +U 5 +L 13 +R 15 +L 1 +D 11 +U 4 +R 7 +D 13 +U 3 +D 12 +R 14 +U 5 +R 12 +D 5 +U 6 +R 3 +U 2 +D 12 +R 3 +L 3 +D 10 +U 6 +L 12 +U 8 +L 1 +U 13 +L 2 +R 3 +L 9 +R 10 +U 10 +D 2 +U 15 +D 3 +U 13 +L 13 +R 12 +L 12 +U 7 +L 14 +D 15 +U 14 +D 14 +L 14 +U 5 +R 2 +D 12 +U 14 +L 2 +D 12 +L 8 +U 7 +L 6 +D 6 +L 13 +U 2 +L 10 +R 11 +U 4 +D 6 +R 15 +U 7 +R 10 +U 4 +L 7 +D 13 +U 8 +L 13 +U 3 +L 4 +D 11 +U 14 +R 8 +L 1 +R 16 +L 1 +D 8 +R 6 +D 12 +U 4 +L 9 +D 9 +U 10 +R 8 +L 10 +D 14 +R 11 +L 6 +U 14 +R 9 +U 13 +D 9 +U 3 +R 14 +U 16 +D 16 +R 2 +L 12 +R 5 +L 1 +U 4 +D 8 +U 15 +L 1 +U 5 +D 4 +L 3 +D 7 +R 8 +L 6 +U 3 +L 10 +R 9 +D 2 +R 7 +L 15 +R 6 +D 8 +U 17 +D 9 +U 9 +L 8 +U 7 +D 3 +U 11 +L 2 +R 17 +U 13 +D 4 +R 9 +L 9 +U 4 +D 12 +R 16 +L 12 +U 17 +R 8 +D 7 +R 6 +D 8 +L 7 +D 4 +U 15 +D 11 +R 15 +D 8 +R 6 +U 4 +D 11 +U 4 +R 17 +D 7 +L 12 +D 3 +U 10 +D 11 +L 5 +U 7 +L 8 +D 14 +U 9 +D 9 +U 5 +R 4 +D 1 +U 16 +D 5 +R 10 +L 9 +D 15 +R 16 +U 7 +R 16 +D 8 +U 3 +D 9 +L 13 +D 16 +L 10 +U 12 +R 13 +L 9 +U 5 +D 2 +U 12 +L 17 +U 7 +D 8 +R 13 +D 17 +L 8 +U 9 +R 15 +D 17 +U 8 +L 5 +R 2 +U 3 +R 14 +L 7 +R 17 +D 1 +L 7 +R 12 +D 11 +U 4 +L 17 +U 5 +R 14 +D 13 +U 16 +L 16 +R 14 +L 17 +U 9 +L 5 +U 11 +L 17 +R 11 +D 14 +R 15 +D 15 +L 1 +D 7 +U 14 +R 7 +U 8 +L 2 +U 2 +D 16 +L 7 +U 11 +R 9 +L 14 +R 8 +U 17 +D 16 +R 11 +U 1 +D 11 +R 3 +U 9 +D 9 +R 2 +U 15 +L 13 +U 2 +R 1 +L 8 +D 2 +L 16 +U 5 +R 1 +L 11 +D 17 +L 17 +U 1 +L 8 +U 11 +R 12 +D 10 +U 11 +L 13 +R 12 +L 6 +D 2 +L 17 +D 9 +U 12 +L 5 +U 1 +R 1 +D 5 +U 5 +L 4 +D 7 +R 13 +D 3 +U 8 +D 1 +R 7 +L 15 +D 15 +R 11 +U 18 +L 3 +D 16 +U 17 +D 13 +R 9 +L 14 +R 14 +L 8 +U 16 +R 13 +D 7 +R 15 +U 16 +R 3 +U 9 +R 8 +L 2 +D 3 +R 10 +D 17 +U 6 +L 10 +U 15 +L 7 +D 3 +R 2 +D 1 +R 18 +D 6 +U 9 +R 13 +D 14 +U 13 +L 13 +D 17 +R 16 +L 6 +U 8 +L 1 +R 7 +L 7 +U 13 +R 3 +D 4 +L 16 +U 15 +L 5 +U 3 +D 3 +U 12 +L 5 +D 14 +R 6 +D 3 +R 4 +L 18 +D 16 +U 12 +R 14 +U 9 +R 5 +U 19 +L 17 +R 8 +U 15 +D 9 +L 8 +D 8 +U 6 +L 4 +U 19 +D 17 +U 8 +R 19 +L 8 +U 8 +L 16 +R 6 +L 5 +U 7 +D 6 +U 10 +L 11 +D 11 +U 7 +L 6 +U 13 +D 18 +U 17 +R 11 +U 19 +D 5 +L 3 +U 6 +D 3 +U 9 +R 8 +L 7 +R 16 +L 15 +D 12 +U 10 +L 16 +R 17 +U 12 +L 1 +D 5 +L 9 +U 12 +L 2 +D 18 +L 1 +R 1 +L 2 +R 2 +L 9 +U 18 +R 8 +D 8 +R 4 +L 16 +U 6 +R 11 +D 13 +R 1 +D 14 +L 6 +D 14 +R 8 +L 5 +D 6 +L 14 +U 11 +L 5 +R 8 +D 11 +L 6 +U 17 +R 15 +L 13 +U 16 +D 2 +R 8 +D 5 +L 8 +D 7 +R 5 +U 10 +L 19 +R 7 +D 16 +R 1 +L 12 +D 8 +L 8 +R 10 +L 10 +U 1 +R 10 +U 15 diff --git a/2022/09/main.cpp b/2022/09/main.cpp new file mode 100644 index 0000000..aacddd1 --- /dev/null +++ b/2022/09/main.cpp @@ -0,0 +1,123 @@ +#include +#include +#include +#include +#include + +enum Directions { + UP, + DOWN, + LEFT, + RIGHT +}; + +struct Command { + Directions direction; + int steps; +}; + +struct Position { + int x; + int y; +}; + +Directions charToDirection(char c) { + switch(c) { + case 'R': + return RIGHT; + case 'L': + return LEFT; + case 'U': + return UP; + case 'D': + return DOWN; + } + std::cerr << "Invalid direction" << std::endl; + exit(1); +} + +std::vector getCommands( std::ifstream &file ) { + std::vector ret{}; + int tmp_i = 0; + char tmp_c = 0; + std::string str; + while ( std::getline( file, str ) ) { + std::stringstream ss( str ); + ss >> tmp_c; + ss >> tmp_i; + ret.push_back({charToDirection(tmp_c), tmp_i}); + } + return ret; +} + +void handleMovement(const Position &head, Position &tail) { + auto x_diff = head.x - tail.x; + auto y_diff = head.y - tail.y; + if(abs(x_diff) > 1 || abs(y_diff) > 1) { + if(x_diff != 0) { + x_diff /= abs(x_diff); + } + if(y_diff != 0) { + y_diff /= abs(y_diff); + } + tail.x += x_diff; + tail.y += y_diff; + } +} + +int ropeSimulation(const std::vector &commands, int rope_length) { + std::vector positions; + positions.resize(rope_length); + for(int i = 0; i < rope_length; i++) { + positions[i] = {0, 0}; + } + std::unordered_map> visits{}; + visits[0][0] = true; + for(auto &command : commands) { + Position addition{0, 0}; + switch(command.direction) { + case RIGHT: + addition = {1, 0}; + break; + case LEFT: + addition = {-1, 0}; + break; + case UP: + addition = {0, -1}; + break; + case DOWN: + addition = {0, 1}; + break; + } + for(int i = 0; i < command.steps; i++) { + positions[0].x += addition.x; + positions[0].y += addition.y; + for(int i = 1; i < rope_length; i++) { + handleMovement(positions[i-1], positions[i]); + } + visits[positions.back().x][positions.back().y] = true; + } + } + int result = 0; + for(auto &visit : visits) { + result += visit.second.size(); + } + return result; +} + +int part1(const std::vector &commands) { + return ropeSimulation(commands, 2); +} + +int part2(const std::vector &commands) { + return ropeSimulation(commands, 10); +} + +int main() { + std::ifstream input_file( "input" ); + auto commands = getCommands( input_file ); + std::cout << "The rope's tail visits \033[91;1m" << part1(commands) + << "\033[0m positions." << std::endl; + std::cout << "The long rope's tail visits \033[91;1m" << part2(commands) + << "\033[0m positions." << std::endl; +}