aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas Schmucker <ts@its1.de>2023-12-09 11:51:54 +0100
committerThomas Schmucker <ts@its1.de>2023-12-09 11:51:54 +0100
commit40023c113c17ff0e8b5b7dfffef7c24d6632d63a (patch)
tree78be174b94200707d1634f7ad2c2e2c6eb492c29 /src
parent827acfa3ef141939665fafab8019153519ddd9fb (diff)
downloadadvent-of-code-40023c113c17ff0e8b5b7dfffef7c24d6632d63a.tar.gz
advent-of-code-40023c113c17ff0e8b5b7dfffef7c24d6632d63a.tar.bz2
advent-of-code-40023c113c17ff0e8b5b7dfffef7c24d6632d63a.zip
Code nochmals vereinfacht und auf das eig. Problem angepasst :)
Diffstat (limited to 'src')
-rw-r--r--src/day09.cpp28
1 files changed, 6 insertions, 22 deletions
diff --git a/src/day09.cpp b/src/day09.cpp
index 1e9bde5..0019d05 100644
--- a/src/day09.cpp
+++ b/src/day09.cpp
@@ -28,7 +28,7 @@ read_ints(const string& line)
28 28
29template<typename T> 29template<typename T>
30T 30T
31solve_rec_part1(const vector<T>& values) 31solve_rec(const vector<T>& values)
32{ 32{
33 vector<T> differences; 33 vector<T> differences;
34 34
@@ -37,7 +37,7 @@ solve_rec_part1(const vector<T>& values)
37 } 37 }
38 auto all_zeros = all_of(differences.begin(), differences.end(), [](T diff) { return diff == 0; }); 38 auto all_zeros = all_of(differences.begin(), differences.end(), [](T diff) { return diff == 0; });
39 if ( !all_zeros ) { 39 if ( !all_zeros ) {
40 return solve_rec_part1(differences) + values.back(); 40 return solve_rec(differences) + values.back();
41 } 41 }
42 else { 42 else {
43 return values.back(); 43 return values.back();
@@ -51,35 +51,19 @@ part1()
51 51
52 long sum = 0; 52 long sum = 0;
53 for ( const auto& line: lines ) { 53 for ( const auto& line: lines ) {
54 sum += solve_rec_part1(read_ints(line)); 54 sum += solve_rec(read_ints(line));
55 } 55 }
56 cout << sum << endl; 56 cout << sum << endl;
57} 57}
58 58
59template<typename T>
60T
61solve_rec_part2(const vector<T>& values)
62{
63 vector<T> differences;
64
65 for ( size_t idx = 1; idx < values.size(); ++idx ) {
66 differences.emplace_back(values[idx] - values[idx - 1]);
67 }
68 auto all_zeros = all_of(differences.begin(), differences.end(), [](T diff) { return diff == 0; });
69 if ( !all_zeros ) {
70 return values.front() - solve_rec_part2(differences);
71 }
72 else {
73 return values.front();
74 }
75}
76
77void 59void
78part2() 60part2()
79{ 61{
80 long sum = 0; 62 long sum = 0;
81 for ( const auto& line: read_file("data/day09.txt") ) { 63 for ( const auto& line: read_file("data/day09.txt") ) {
82 sum += solve_rec_part2(read_ints(line)); 64 auto values = read_ints(line);
65 reverse(values.begin(), values.end());
66 sum += solve_rec(values);
83 } 67 }
84 cout << sum << endl; 68 cout << sum << endl;
85} 69}