aboutsummaryrefslogtreecommitdiff
path: root/src/day06.cpp
diff options
context:
space:
mode:
authorThomas Schmucker <ts@its1.de>2023-12-06 18:08:52 +0100
committerThomas Schmucker <ts@its1.de>2023-12-06 18:08:52 +0100
commit87948e3f7a475c12259aac9c2b883691328c1130 (patch)
treec77040461a2abadb70d070a0ee9a60e4e365bd6f /src/day06.cpp
parentf95d6c39353700924a71014ea4b05b1d9c865284 (diff)
downloadadvent-of-code-87948e3f7a475c12259aac9c2b883691328c1130.tar.gz
advent-of-code-87948e3f7a475c12259aac9c2b883691328c1130.tar.bz2
advent-of-code-87948e3f7a475c12259aac9c2b883691328c1130.zip
Lösung für Tag6
Diffstat (limited to 'src/day06.cpp')
-rw-r--r--src/day06.cpp74
1 files changed, 74 insertions, 0 deletions
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 @@
1#include <cstdint>
2#include <fstream>
3#include <iostream>
4#include <numeric>
5#include <sstream>
6#include <vector>
7using namespace std;
8
9template<typename T = long>
10vector<T>
11read_ints(const string& line)
12{
13 stringstream iss{ line };
14 return vector<T>{ istream_iterator<T>{ iss }, istream_iterator<T>{} };
15}
16
17long
18solve(long time, long winningDistance)
19{
20 long counter = 0;
21 for ( long pushTime = 0; pushTime < time; ++pushTime ) {
22 auto distance = (time * pushTime - pushTime * pushTime);
23 counter += long(distance > winningDistance);
24 }
25 return counter;
26}
27
28void
29part1()
30{
31 fstream input{ "data/day06.txt" };
32 string line;
33
34 getline(input, line);
35 auto times = read_ints(line.substr(line.find(':') + 1));
36
37 getline(input, line);
38 auto distances = read_ints(line.substr(line.find(':') + 1));
39
40 long result = 1;
41 for ( size_t idx = 0; idx != times.size(); ++idx ) {
42 result *= solve(times[idx], distances[idx]);
43 }
44 cout << result << endl;
45}
46
47string
48join(const string& line)
49{
50 stringstream iss{ line };
51 return accumulate(istream_iterator<string>{ iss }, istream_iterator<string>{}, string{});
52}
53
54void
55part2()
56{
57 fstream input{ "data/day06.txt" };
58 string line;
59
60 getline(input, line);
61 auto time = stol(join(line.substr(line.find(':') + 1)));
62
63 getline(input, line);
64 auto distance = stol(join(line.substr(line.find(':') + 1)));
65
66 cout << solve(time, distance) << endl;
67}
68
69int
70main()
71{
72 part1();
73 part2();
74}