From 44e3ccb22735fbcb10572469180f1aba4979b354 Mon Sep 17 00:00:00 2001 From: zvon Date: Thu, 2 Dec 2021 10:54:48 +0100 Subject: [PATCH] 02 --- 02/CMakeLists.txt | 22 + 02/input | 1000 +++++++++++++++++++++++++++++++++++++++++++++ 02/main.cpp | 97 +++++ 3 files changed, 1119 insertions(+) create mode 100644 02/CMakeLists.txt create mode 100644 02/input create mode 100644 02/main.cpp diff --git a/02/CMakeLists.txt b/02/CMakeLists.txt new file mode 100644 index 0000000..69a7922 --- /dev/null +++ b/02/CMakeLists.txt @@ -0,0 +1,22 @@ +cmake_minimum_required(VERSION 3.10) +set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDARD_REQUIRED True) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +enable_language(CXX) + +project(AoC02) + +if(APPLE) + include_directories(/usr/local/include) + link_directories(/usr/local/lib) +endif() + +if(WIN32) + add_executable(${CMAKE_PROJECT_NAME} WIN32) +else() + add_executable(${CMAKE_PROJECT_NAME}) +endif() + +target_sources(${CMAKE_PROJECT_NAME} + PRIVATE main.cpp + ) diff --git a/02/input b/02/input new file mode 100644 index 0000000..4b708f6 --- /dev/null +++ b/02/input @@ -0,0 +1,1000 @@ +forward 1 +forward 8 +down 9 +forward 3 +down 6 +down 1 +down 1 +forward 5 +forward 5 +forward 8 +down 6 +forward 7 +down 3 +down 4 +up 1 +forward 7 +forward 5 +forward 8 +down 1 +forward 9 +forward 9 +forward 7 +up 8 +forward 5 +forward 9 +down 3 +forward 2 +down 5 +down 4 +up 2 +up 5 +forward 3 +forward 8 +down 9 +down 1 +forward 2 +forward 6 +up 2 +up 9 +forward 8 +down 7 +forward 2 +up 5 +forward 7 +down 9 +forward 9 +forward 5 +down 8 +down 6 +forward 2 +up 4 +down 2 +down 9 +forward 4 +down 4 +forward 9 +down 8 +down 7 +down 4 +forward 6 +forward 9 +up 7 +down 2 +up 6 +down 8 +forward 3 +forward 9 +forward 7 +down 1 +forward 1 +forward 7 +forward 5 +down 4 +down 1 +forward 4 +forward 9 +forward 6 +down 5 +down 1 +forward 9 +down 6 +down 4 +forward 8 +up 8 +forward 9 +up 9 +up 9 +up 7 +forward 4 +down 4 +forward 4 +forward 2 +forward 2 +forward 9 +up 4 +forward 4 +forward 3 +forward 5 +down 3 +up 4 +forward 3 +forward 5 +forward 9 +forward 7 +down 1 +forward 4 +down 5 +up 6 +down 9 +forward 8 +down 1 +forward 3 +down 2 +up 8 +down 5 +down 8 +forward 5 +down 6 +forward 6 +down 7 +up 5 +forward 8 +forward 5 +forward 7 +up 3 +down 6 +up 9 +forward 1 +forward 7 +forward 3 +forward 8 +up 4 +up 9 +down 5 +forward 5 +forward 4 +forward 4 +down 9 +up 6 +forward 5 +forward 2 +down 6 +down 2 +forward 9 +down 7 +forward 8 +down 4 +forward 8 +forward 8 +up 7 +up 5 +forward 6 +forward 4 +up 4 +forward 2 +up 3 +down 8 +forward 1 +forward 8 +forward 8 +forward 4 +up 7 +forward 2 +down 8 +forward 1 +down 1 +down 4 +up 3 +forward 8 +forward 1 +down 9 +up 5 +down 5 +forward 9 +forward 4 +up 7 +down 2 +down 4 +forward 1 +forward 6 +up 8 +up 1 +forward 8 +down 5 +down 5 +forward 9 +down 8 +forward 9 +down 1 +up 7 +forward 8 +up 2 +down 2 +up 1 +up 9 +forward 6 +down 5 +forward 1 +down 2 +forward 5 +down 3 +up 8 +down 2 +down 8 +forward 7 +forward 2 +up 3 +forward 3 +down 1 +forward 4 +down 7 +up 5 +forward 8 +forward 8 +up 6 +up 4 +up 4 +down 7 +forward 2 +forward 1 +forward 6 +up 3 +forward 3 +forward 9 +down 4 +forward 2 +down 9 +down 8 +forward 5 +forward 2 +forward 4 +forward 5 +forward 7 +down 4 +up 5 +down 7 +forward 4 +up 7 +down 9 +down 4 +down 3 +forward 8 +down 5 +forward 8 +forward 8 +down 3 +down 8 +down 2 +forward 4 +forward 5 +down 7 +down 7 +down 6 +up 9 +down 9 +down 5 +forward 4 +down 1 +down 7 +up 4 +down 8 +up 5 +up 1 +down 9 +down 7 +forward 9 +forward 7 +down 6 +up 2 +forward 1 +down 8 +up 2 +forward 8 +down 2 +forward 2 +down 9 +forward 2 +forward 3 +forward 7 +up 3 +up 3 +up 3 +forward 5 +up 9 +up 1 +down 9 +down 4 +down 5 +up 9 +up 7 +down 9 +forward 3 +down 5 +down 6 +down 3 +up 6 +forward 8 +up 6 +up 8 +down 4 +forward 8 +down 8 +forward 7 +up 1 +forward 4 +down 2 +forward 7 +down 6 +up 8 +forward 1 +down 8 +down 4 +forward 7 +forward 2 +up 4 +forward 9 +forward 9 +down 8 +up 1 +down 3 +forward 7 +down 9 +forward 2 +forward 5 +down 4 +down 8 +down 3 +up 1 +down 2 +up 3 +forward 1 +forward 5 +forward 3 +down 2 +up 2 +forward 7 +down 6 +forward 3 +down 8 +forward 5 +forward 4 +up 2 +forward 4 +up 2 +down 4 +forward 8 +forward 5 +down 1 +forward 6 +down 2 +down 5 +up 8 +forward 5 +down 2 +up 5 +down 5 +forward 4 +forward 3 +forward 8 +down 9 +up 3 +forward 4 +forward 2 +forward 2 +forward 2 +down 4 +forward 8 +forward 5 +up 3 +down 1 +forward 3 +up 5 +forward 8 +down 6 +forward 6 +down 9 +forward 6 +up 5 +down 6 +up 9 +forward 8 +down 2 +forward 9 +down 7 +down 5 +down 4 +forward 3 +forward 2 +forward 1 +forward 7 +down 3 +forward 4 +up 6 +down 5 +down 4 +down 8 +down 4 +up 6 +forward 3 +down 4 +down 6 +forward 9 +forward 6 +up 4 +down 2 +down 7 +forward 2 +forward 9 +down 4 +down 8 +down 3 +down 4 +forward 9 +forward 4 +forward 1 +down 7 +forward 2 +up 1 +forward 7 +down 7 +forward 7 +forward 5 +up 8 +down 4 +up 7 +up 2 +up 7 +up 8 +down 9 +forward 8 +forward 8 +down 3 +forward 9 +down 3 +up 7 +down 1 +down 9 +forward 2 +up 4 +down 2 +forward 2 +up 5 +up 5 +up 1 +forward 7 +up 5 +down 3 +up 8 +down 9 +down 7 +up 4 +down 8 +down 4 +forward 8 +up 6 +down 2 +down 4 +forward 7 +forward 8 +forward 8 +forward 1 +down 4 +down 4 +forward 4 +down 7 +forward 3 +down 3 +down 6 +down 7 +down 6 +forward 8 +down 4 +down 7 +down 1 +down 7 +down 5 +down 2 +up 5 +forward 9 +down 3 +down 4 +down 4 +forward 5 +down 9 +forward 1 +up 1 +up 1 +down 3 +forward 8 +up 6 +up 6 +down 1 +up 2 +down 7 +down 9 +up 7 +forward 7 +down 6 +down 5 +down 5 +up 8 +forward 7 +down 1 +down 6 +forward 4 +forward 5 +forward 5 +forward 2 +down 5 +up 6 +down 5 +forward 1 +down 9 +up 4 +down 7 +down 8 +down 5 +down 8 +forward 7 +forward 2 +up 3 +down 7 +forward 1 +forward 4 +forward 5 +forward 1 +forward 7 +down 6 +forward 9 +forward 8 +down 5 +forward 5 +forward 8 +forward 3 +up 1 +forward 6 +forward 9 +forward 8 +down 3 +forward 8 +forward 7 +down 1 +forward 9 +down 9 +forward 6 +forward 4 +forward 2 +forward 9 +down 7 +down 6 +forward 4 +forward 1 +forward 3 +forward 9 +up 4 +down 5 +forward 6 +down 8 +up 5 +down 9 +down 6 +forward 7 +down 9 +forward 6 +forward 5 +down 1 +down 4 +up 6 +forward 2 +down 8 +down 5 +up 5 +forward 6 +forward 5 +down 8 +down 4 +down 3 +down 8 +forward 3 +forward 9 +up 6 +down 9 +down 1 +forward 7 +forward 5 +down 5 +down 1 +forward 7 +forward 3 +up 6 +forward 1 +up 9 +forward 1 +down 4 +down 3 +down 3 +up 6 +forward 9 +forward 5 +up 9 +up 5 +forward 5 +forward 7 +forward 9 +down 8 +forward 2 +down 7 +down 7 +forward 3 +down 2 +up 1 +down 4 +down 6 +down 8 +forward 8 +forward 6 +up 3 +forward 9 +down 8 +up 7 +forward 6 +forward 9 +up 8 +forward 3 +down 9 +forward 3 +forward 4 +down 3 +down 2 +forward 2 +down 5 +down 9 +down 2 +down 7 +down 4 +down 6 +forward 5 +up 1 +forward 9 +forward 2 +up 8 +forward 8 +down 3 +forward 7 +down 5 +forward 5 +down 5 +down 9 +down 9 +down 6 +down 5 +down 4 +up 6 +forward 9 +down 2 +down 5 +up 3 +forward 8 +forward 1 +down 4 +down 8 +forward 6 +forward 7 +up 2 +forward 1 +forward 2 +down 7 +down 6 +up 7 +forward 7 +down 6 +down 6 +down 8 +forward 8 +up 5 +up 9 +forward 8 +forward 1 +down 6 +down 6 +up 7 +forward 6 +up 5 +forward 7 +down 1 +forward 1 +forward 9 +up 7 +down 3 +forward 4 +down 6 +down 6 +up 5 +up 7 +down 1 +up 2 +down 8 +down 1 +forward 2 +down 3 +forward 8 +forward 2 +up 2 +down 7 +forward 5 +forward 7 +down 2 +up 1 +down 1 +down 6 +down 4 +up 1 +forward 2 +forward 7 +forward 8 +down 1 +forward 6 +down 5 +down 8 +up 6 +down 7 +forward 6 +down 8 +down 6 +down 9 +forward 8 +down 9 +down 6 +up 2 +down 2 +down 5 +down 5 +up 8 +forward 6 +forward 7 +up 4 +down 5 +up 5 +forward 6 +forward 8 +up 6 +up 7 +up 3 +up 9 +down 6 +forward 3 +forward 3 +down 6 +down 8 +down 2 +down 2 +up 7 +up 6 +forward 5 +forward 4 +down 2 +down 3 +forward 8 +down 9 +forward 3 +down 8 +down 8 +forward 9 +forward 7 +down 8 +down 7 +up 2 +down 8 +down 1 +down 7 +up 7 +forward 3 +forward 5 +up 1 +down 9 +forward 3 +down 4 +down 5 +down 3 +down 8 +up 7 +forward 4 +down 6 +forward 9 +forward 9 +forward 1 +up 6 +up 8 +forward 6 +down 6 +down 6 +forward 1 +up 4 +down 2 +forward 8 +forward 6 +down 2 +down 9 +down 6 +down 4 +forward 5 +down 5 +down 7 +down 6 +forward 8 +down 8 +down 2 +up 2 +up 2 +down 3 +forward 2 +down 2 +down 5 +down 3 +up 5 +down 8 +forward 8 +down 8 +down 4 +down 3 +forward 7 +forward 1 +forward 1 +down 7 +down 6 +down 2 +up 9 +up 7 +down 9 +forward 1 +down 3 +down 4 +down 7 +forward 6 +down 8 +forward 3 +down 6 +forward 4 +down 3 +down 5 +down 4 +forward 4 +up 4 +up 1 +up 2 +down 3 +forward 6 +up 6 +forward 8 +forward 9 +forward 3 +forward 4 +forward 2 +forward 8 +forward 7 +up 4 +down 5 +forward 8 +forward 6 +down 2 +forward 3 +down 5 +down 8 +forward 3 +forward 4 +down 3 +down 9 +down 6 +up 6 +down 1 +down 8 +forward 7 +down 3 +forward 8 +forward 4 +down 2 +up 7 +down 5 +forward 1 +forward 7 +forward 1 +forward 3 +down 8 +down 7 +forward 5 +forward 3 +down 1 +forward 7 +down 4 +down 3 +down 6 +down 9 +forward 6 +down 1 +forward 3 +forward 3 +forward 5 +forward 9 +up 3 +up 6 +forward 7 +up 5 +up 9 +down 2 +down 5 +up 5 +forward 4 +forward 4 +forward 6 +up 2 +down 9 +down 4 +down 2 +forward 7 +down 3 +up 4 +up 6 +forward 7 +forward 1 +forward 1 +down 7 +forward 5 +forward 4 +up 6 +forward 4 +forward 2 +forward 6 +up 1 +up 5 +forward 8 +up 2 +forward 3 +forward 5 +up 9 +down 4 +forward 1 +up 7 +down 5 +forward 7 +forward 2 +forward 8 +down 8 +down 2 +forward 2 +forward 4 +forward 8 +forward 1 +forward 8 +forward 2 +down 9 +forward 7 +down 7 +down 5 +up 9 +forward 5 +down 1 +down 9 +down 2 +forward 6 +down 8 +up 9 +forward 5 +down 2 +forward 1 +up 4 +forward 1 +down 9 +up 3 +down 3 +down 2 +forward 9 +down 5 +forward 4 +down 1 +forward 4 +down 8 +down 3 +forward 8 +forward 2 +forward 3 +down 1 +forward 1 +down 2 +forward 6 +up 3 +up 5 +up 9 +forward 9 +down 5 +down 5 +forward 4 +up 6 +down 7 +down 2 +forward 8 +forward 6 +forward 6 +up 6 +down 7 +forward 8 diff --git a/02/main.cpp b/02/main.cpp new file mode 100644 index 0000000..57c028c --- /dev/null +++ b/02/main.cpp @@ -0,0 +1,97 @@ +#include +#include +#include +#include + +enum Command { + Forward, + Down, + Up, + Undefined, +}; +using CommandPair = std::pair; + +std::vector getCommands(const std::string &file_name) { + std::ifstream file(file_name); + std::vector result{}; + std::string tmp_command{}; + int tmp_num{}; + std::string str; + while (std::getline(file, str)) { + std::stringstream ss(str); + ss >> tmp_command; + ss >> tmp_num; + Command cmd = Undefined; + if (tmp_command == "forward") { + cmd = Forward; + } else if (tmp_command == "down") { + cmd = Down; + } else if (tmp_command == "up") { + cmd = Up; + } + if (cmd == Undefined) { + std::cerr << "Invalid input line: \"" << str << "\"" << std::endl; + return {}; + } + result.emplace_back(cmd, tmp_num); + } + return result; +} + +int part1(const std::vector &commands) { + int x = 0; + int y = 0; + for (const auto &command : commands) { + switch (command.first) { + case Forward: + x += command.second; + break; + case Down: + y += command.second; + break; + case Up: + y -= command.second; + default: + break; + } + } + return x * y; +} + +int part2(const std::vector &commands) { + int x = 0; + int y = 0; + int aim = 0; + for (const auto &command : commands) { + switch (command.first) { + case Forward: + x += command.second; + y += aim * command.second; + break; + case Down: + aim += command.second; + break; + case Up: + aim -= command.second; + default: + break; + } + } + return x * y; +} + +int main(int argc, char **argv) { + if (argc < 2) { + std::cerr << "You must provide input file!" << std::endl; + return 1; + } + auto commands = getCommands(argv[1]); + if (commands.empty()) { + return 1; + } + std::cout << "The resulting multiplication is \033[91;1m" << part1(commands) + << "\033[0m." << std::endl; + std::cout << "The correct resulting multiplication is \033[91;1m" + << part2(commands) << "\033[0m." << std::endl; + return 0; +}