From 325117d6949f7bf2900d5f4d6a118f3e3b6b2501 Mon Sep 17 00:00:00 2001 From: Federico Igne Date: Wed, 6 Dec 2023 14:28:33 +0100 Subject: aoc(2306): Wait For It --- 2023/06/Makefile | 18 +++++++++++++ 2023/06/resources/input.txt | 2 ++ 2023/06/resources/input_small.txt | 2 ++ 2023/06/src/part1.cpp | 54 +++++++++++++++++++++++++++++++++++++++ 2023/06/src/part2.cpp | 50 ++++++++++++++++++++++++++++++++++++ 5 files changed, 126 insertions(+) create mode 100644 2023/06/Makefile create mode 100644 2023/06/resources/input.txt create mode 100644 2023/06/resources/input_small.txt create mode 100644 2023/06/src/part1.cpp create mode 100644 2023/06/src/part2.cpp (limited to '2023') diff --git a/2023/06/Makefile b/2023/06/Makefile new file mode 100644 index 0000000..a3c2cea --- /dev/null +++ b/2023/06/Makefile @@ -0,0 +1,18 @@ +CXXFLAGS := -std=c++17 +EXE := part1 part2 + +.PHONY: all clean configure + +all: $(EXE) + +configure: + bear -- $(MAKE) all + +%.o: %.cpp + $(CXX) -c $(CXXFLAGS) $< -o $@ + +clean: + rm -rf $(EXE) src/*.o compile_commands.json + +%: src/%.o + $(CXX) $^ -o $@ diff --git a/2023/06/resources/input.txt b/2023/06/resources/input.txt new file mode 100644 index 0000000..e0996e8 --- /dev/null +++ b/2023/06/resources/input.txt @@ -0,0 +1,2 @@ +Time: 60 80 86 76 +Distance: 601 1163 1559 1300 diff --git a/2023/06/resources/input_small.txt b/2023/06/resources/input_small.txt new file mode 100644 index 0000000..28f5ae9 --- /dev/null +++ b/2023/06/resources/input_small.txt @@ -0,0 +1,2 @@ +Time: 7 15 30 +Distance: 9 40 200 diff --git a/2023/06/src/part1.cpp b/2023/06/src/part1.cpp new file mode 100644 index 0000000..2d50385 --- /dev/null +++ b/2023/06/src/part1.cpp @@ -0,0 +1,54 @@ +#include +#include +#include +#include +#include +#include + +int main(void) +{ + int answer{ 1 }; + std::vector time; + std::vector distance; + + std::ifstream input{ "resources/input.txt" }; + if (input.is_open()) + { + int n; + std::string line; + + /* Time */ + { + std::getline(input,line); + line.erase(0, std::strlen("Time:")); + std::istringstream sline{ line }; + while(sline >> n) + { + time.push_back(n); + } + } + + /* Distance */ + { + std::getline(input,line); + line.erase(0, std::strlen("Distance:")); + std::istringstream sline{ line }; + while(sline >> n) + { + distance.push_back(n); + } + } + } + input.close(); + + for (int i = 0; i < time.size(); ++i) + { + double delta = std::sqrt(time[i] * time[i] - 4 * distance[i]); + int from{ static_cast(1 + (time[i] - delta) / 2)}; + int to{ static_cast(std::ceil((time[i] + delta) / 2)) }; + answer *= to - from; + } + + std::cout << answer << std::endl; + return 0; +} diff --git a/2023/06/src/part2.cpp b/2023/06/src/part2.cpp new file mode 100644 index 0000000..db35b57 --- /dev/null +++ b/2023/06/src/part2.cpp @@ -0,0 +1,50 @@ +#include +#include +#include +#include +#include +#include + +int main(void) +{ + long time{}; + long distance{}; + + std::ifstream input{ "resources/input.txt" }; + if (input.is_open()) + { + long n; + std::string line; + + /* Time */ + std::getline(input,line); + for(unsigned char c : line) + { + if (std::isdigit(c)) + { + time *= 10; + time += c - '0'; + } + } + + /* Distance */ + std::getline(input,line); + for(unsigned char c : line) + { + if (std::isdigit(c)) + { + distance *= 10; + distance += c - '0'; + } + } + + } + input.close(); + + double delta = std::sqrt(time * time - 4 * distance); + long from{ static_cast(1 + (time - delta) / 2)}; + long to{ static_cast(std::ceil((time + delta) / 2)) }; + + std::cout << to - from << std::endl; + return 0; +} -- cgit v1.2.3