From 56e890cec0a28c0a485212ccebfaf774235a79a2 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Wed, 3 Jan 2024 23:35:54 +0100 Subject: prepare for more puzzles ... :) --- 2023/src/day06.cpp | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 2023/src/day06.cpp (limited to '2023/src/day06.cpp') diff --git a/2023/src/day06.cpp b/2023/src/day06.cpp new file mode 100644 index 0000000..9a429c5 --- /dev/null +++ b/2023/src/day06.cpp @@ -0,0 +1,74 @@ +#include +#include +#include +#include +#include +#include +using namespace std; + +template +vector +read_ints(const string& line) +{ + stringstream iss{ line }; + return vector{ istream_iterator{ iss }, istream_iterator{} }; +} + +long +solve(long time, long winningDistance) +{ + long counter = 0; + for ( long pushTime = 0; pushTime < time; ++pushTime ) { + auto distance = (time * pushTime - pushTime * pushTime); + counter += long(distance > winningDistance); + } + return counter; +} + +void +part1() +{ + fstream input{ "data/day06.txt" }; + string line; + + getline(input, line); + auto times = read_ints(line.substr(line.find(':') + 1)); + + getline(input, line); + auto distances = read_ints(line.substr(line.find(':') + 1)); + + long result = 1; + for ( size_t idx = 0; idx != times.size(); ++idx ) { + result *= solve(times[idx], distances[idx]); + } + cout << result << endl; +} + +string +join(const string& line) +{ + stringstream iss{ line }; + return accumulate(istream_iterator{ iss }, istream_iterator{}, string{}); +} + +void +part2() +{ + fstream input{ "data/day06.txt" }; + string line; + + getline(input, line); + auto time = stol(join(line.substr(line.find(':') + 1))); + + getline(input, line); + auto distance = stol(join(line.substr(line.find(':') + 1))); + + cout << solve(time, distance) << endl; +} + +int +main() +{ + part1(); + part2(); +} -- cgit v1.3