From e3d8709aeac42e5c2658e97fbf0fefaab0443e7c Mon Sep 17 00:00:00 2001 From: Federico Igne Date: Sat, 9 Dec 2023 11:58:03 +0100 Subject: aoc(2309): Mirage Maintenance --- 2023/09/Makefile | 19 +++++++++++++++++ 2023/09/resources/input_small.txt | 3 +++ 2023/09/src/part1.cpp | 43 +++++++++++++++++++++++++++++++++++++ 2023/09/src/part2.cpp | 45 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 110 insertions(+) create mode 100644 2023/09/Makefile create mode 100644 2023/09/resources/input_small.txt create mode 100644 2023/09/src/part1.cpp create mode 100644 2023/09/src/part2.cpp (limited to '2023') diff --git a/2023/09/Makefile b/2023/09/Makefile new file mode 100644 index 0000000..af6a294 --- /dev/null +++ b/2023/09/Makefile @@ -0,0 +1,19 @@ +CXXFLAGS := -std=c++17 +CPPFLAGS := -I../include +EXE := part1 part2 + +.PHONY: all clean configure + +all: $(EXE) + +configure: + bear -- $(MAKE) all + +%.o: %.cpp + $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $< -o $@ + +clean: + rm -rf $(EXE) src/*.o compile_commands.json + +%: src/%.o + $(CXX) $^ -o $@ diff --git a/2023/09/resources/input_small.txt b/2023/09/resources/input_small.txt new file mode 100644 index 0000000..539a763 --- /dev/null +++ b/2023/09/resources/input_small.txt @@ -0,0 +1,3 @@ +0 3 6 9 12 15 +1 3 6 10 15 21 +10 13 16 21 30 45 diff --git a/2023/09/src/part1.cpp b/2023/09/src/part1.cpp new file mode 100644 index 0000000..4087486 --- /dev/null +++ b/2023/09/src/part1.cpp @@ -0,0 +1,43 @@ +#include +#include +#include +#include + +void solve(std::vector v, int& answer) +{ + for (int a = v.size() - 1; a > 0; --a) + { + answer += v[a]; + for (int b = 0; b < a; ++b) + { + v[b] = v[b+1] - v[b]; + } + } +} + +int main(int argc, char* argv[]) +{ + int answer{}; + + std::ifstream input{ argv[1] }; + if (input.is_open()) + { + std::string line; + while (not std::getline(input,line).eof()) + { + int n; + std::vector v{}; + std::istringstream sline{ line }; + while(sline >> n) + { + v.push_back(n); + } + + solve(std::move(v), answer); + } + } + input.close(); + + std::cout << answer << std::endl; + return 0; +} diff --git a/2023/09/src/part2.cpp b/2023/09/src/part2.cpp new file mode 100644 index 0000000..df1ec5a --- /dev/null +++ b/2023/09/src/part2.cpp @@ -0,0 +1,45 @@ +#include +#include +#include +#include +#include + +void solve(std::vector v, int& answer) +{ + for (int a = 0; a < v.size() - 1; ++a) + { + answer += v[a]; + for (int b = v.size() - 1; b > a; --b) + { + v[b] = v[b-1] - v[b]; + } + } +} + +int main(int argc, char* argv[]) +{ + int answer{}; + + std::ifstream input{ argv[1] }; + if (input.is_open()) + { + std::string line; + while (not std::getline(input,line).eof()) + { + int n; + std::vector v{}; + std::istringstream sline{ line }; + while(sline >> n) + { + v.push_back(n); + } + + solve(std::move(v), answer); + } + } + input.close(); + + std::cout << answer << std::endl; + return 0; +} + -- cgit v1.2.3