aboutsummaryrefslogtreecommitdiff
path: root/2025/src
diff options
context:
space:
mode:
Diffstat (limited to '2025/src')
-rw-r--r--2025/src/day01.cpp47
1 files changed, 42 insertions, 5 deletions
diff --git a/2025/src/day01.cpp b/2025/src/day01.cpp
index aa1ea42..2650b3c 100644
--- a/2025/src/day01.cpp
+++ b/2025/src/day01.cpp
@@ -28,8 +28,7 @@ part1(const vector<string>& lines)
28 auto pos = 50; 28 auto pos = 50;
29 29
30 for ( const auto& line: lines ) { 30 for ( const auto& line: lines ) {
31 auto value = stoi(line.substr(1)); 31 const auto value = stoi(line.substr(1)) % 100;
32 value %= 100;
33 pos += (line[0] == 'L') ? (100 - value) : value; 32 pos += (line[0] == 'L') ? (100 - value) : value;
34 if ( pos % 100 == 0 ) { 33 if ( pos % 100 == 0 ) {
35 ++zeros; 34 ++zeros;
@@ -45,9 +44,9 @@ part2(const vector<string>& lines)
45 auto pos = 50; 44 auto pos = 50;
46 45
47 for ( const auto& line: lines ) { 46 for ( const auto& line: lines ) {
48 auto value = stoi(line.substr(1)); 47 const auto delta = (line[0] == 'L') ? 99 : 1;
49 while ( value-- > 0 ) { 48 for ( auto value = stoi(line.substr(1)); value > 0; --value ) {
50 pos += (line[0] == 'L') ? 99 : 1; 49 pos += delta;
51 if ( pos % 100 == 0 ) { 50 if ( pos % 100 == 0 ) {
52 ++zeros; 51 ++zeros;
53 } 52 }
@@ -56,6 +55,43 @@ part2(const vector<string>& lines)
56 cout << "Part 2: " << zeros << '\n'; 55 cout << "Part 2: " << zeros << '\n';
57} 56}
58 57
58void
59part2_opti(const vector<string>& lines)
60{
61 auto zeros = 0;
62 auto pos = 50;
63
64 auto is_zero = [&pos] {
65 return pos % 100 == 0;
66 };
67
68 for ( const auto& line: lines ) {
69 const auto delta = (line[0] == 'L') ? 99 : 1;
70 auto value = stoi(line.substr(1));
71
72 if ( !is_zero() ) {
73 for ( ; value > 0 && !is_zero(); --value ) {
74 pos += delta;
75 }
76
77 if ( is_zero() ) {
78 ++zeros;
79 }
80 }
81
82 zeros += value / 100;
83 value %= 100;
84
85 for ( ; value > 0; --value ) {
86 pos += delta;
87 if ( is_zero() ) {
88 ++zeros;
89 }
90 }
91 }
92 cout << "Part2 (Opti): " << zeros << '\n';
93}
94
59} // namespace 95} // namespace
60 96
61int 97int
@@ -64,4 +100,5 @@ main()
64 auto data = read_file("data/day01.txt"); 100 auto data = read_file("data/day01.txt");
65 part1(data); 101 part1(data);
66 part2(data); 102 part2(data);
103 part2_opti(data);
67} 104}