diff --git a/.gitignore b/.gitignore index 1790c52..6dd3f45 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ .DS_Store /build -d*/.txt +*.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 33f8281..42042ec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,7 +11,7 @@ set(CMAKE_CXX_COMPILER clang++) set(CMAKE_BUILD_TYPE Release) if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -Wno-c23-extensions") endif() set(executables d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 d16 d17 d18 d19 d20 d21 d22 d23 d24 d25) diff --git a/d1/main.cxx b/d1/main.cxx index be50c78..6ba8ee0 100644 --- a/d1/main.cxx +++ b/d1/main.cxx @@ -1,15 +1,56 @@ #include -#include +#include +#include +#include +#include using std::cout, std::endl; -int main() { - std::ifstream file{"../d1/input.txt"}; - std::string line; +constexpr const char content[] = { + #embed "input.txt" +}; - while (std::getline(file, line)) { - +void part_1() { + std::vector left_vec, right_vec; + std::istringstream iss{content}; + + int l_id, r_id; + while (iss >> l_id >> r_id) { + left_vec.emplace_back(l_id); + right_vec.emplace_back(r_id); } - + std::sort(left_vec.begin(), left_vec.end()); + std::sort(right_vec.begin(), right_vec.end()); + + auto diff_acc{0}; + for (auto i{0}; i < left_vec.size(); i++) { + diff_acc += std::abs(left_vec[i] - right_vec[i]); + } + + cout << diff_acc << endl; +} + +void part_2() { + std::vector left_vec; + std::unordered_map right_map; + std::istringstream iss{content}; + + int l_id, r_id; + while (iss >> l_id >> r_id) { + left_vec.emplace_back(l_id); + right_map[r_id]++; + } + + auto sim_acc{0}; + for (auto left_num : left_vec) { + sim_acc += right_map[left_num] * left_num; + } + + cout << sim_acc << endl; +} + +int main() { + part_1(); + part_2(); return 0; }