diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3e0f233 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +a.out + diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..c934201 --- /dev/null +++ b/main.cpp @@ -0,0 +1,63 @@ +#include +#include +#include + +struct Data{ char dir; int64_t cnt; }; + +using std::cout, std::endl, std::vector, std::ifstream; + +int64_t part_1(const vector&); +int64_t part_2(const vector&); + +int main() { + ifstream file{"input/2025-1.txt"}; + Data line; + vector v; + while (file >> line.dir >> line.cnt) { + v.push_back(line); + } + cout << "Part 1: " << part_1(v) << endl; + cout << "Part 1: " << part_2(v) << endl; +} + +int64_t part_1(const vector& v) { + int64_t loc{50}, presses{0}; + for (auto data : v) { + if (data.dir == 'L') { + loc -= data.cnt % 100; + } else { + loc += data.cnt % 100; + } + loc %= 100; + if (loc < 0) { + loc += 100; + } + if (loc == 0) { + ++presses; + } + } + + return presses; +} + +int64_t part_2(const vector& v) { + int64_t loc{50}, presses{0}; + for (auto data : v) { + auto last_loc = loc; + if (data.dir == 'L') { + loc -= data.cnt % 100; + } else { + loc += data.cnt % 100; + } + presses += std::abs(data.cnt / 100); + if ((loc != last_loc && loc >= 100) || (loc <= 0 && last_loc != 0)) { + presses += 1; + } + loc %= 100; + if (loc < 0) { + loc += 100; + } + } + + return presses; +} diff --git a/run b/run new file mode 100755 index 0000000..bbfdc25 --- /dev/null +++ b/run @@ -0,0 +1,6 @@ +#!/bin/bash + +set -e + +g++ main.cpp -std=c++23 +./a.out