From 87948e3f7a475c12259aac9c2b883691328c1130 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Wed, 6 Dec 2023 18:08:52 +0100 Subject: Lösung für Tag6 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- makefile | 3 ++- src/day06.cpp | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 src/day06.cpp diff --git a/makefile b/makefile index a9b0da4..298d71e 100644 --- a/makefile +++ b/makefile @@ -4,7 +4,8 @@ all: bin/day01 \ bin/day02 \ bin/day03 \ bin/day04 \ - bin/day05 + bin/day05 \ + bin/day06 bin: mkdir $@ diff --git a/src/day06.cpp b/src/day06.cpp new file mode 100644 index 0000000..9a429c5 --- /dev/null +++ b/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