diff --git a/CMakeLists.txt b/CMakeLists.txt index 9b3bdb7..2e088ad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,5 +3,11 @@ project(AdventOfCode2022) set(CMAKE_CXX_STANDARD 23) +include(FetchContent) +FetchContent_Declare(cpr GIT_REPOSITORY https://github.com/libcpr/cpr.git GIT_TAG 67e12da316754ff3c6c91b50aafb2658438f3c1e) # the commit hash for 1.7.0 +# FetchContent_MakeAvailable(cpr) + file(GLOB_RECURSE SRC_FILES src/**.cpp src/**.h) add_executable(AdventOfCode2022 ${SRC_FILES}) + +# target_link_libraries(AdventOfCode2022 PRIVATE cpr::cpr) \ No newline at end of file diff --git a/input/01_input.txt b/input/01_input.txt new file mode 100644 index 0000000..975a1e1 --- /dev/null +++ b/input/01_input.txt @@ -0,0 +1,252 @@ +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 11 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 16 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 12 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 11 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 13 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 12 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -5 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 12 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -3 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 12 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 14 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 2 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 15 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 11 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -16 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 4 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 14 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 12 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 15 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 9 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -7 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 10 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -11 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 11 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -6 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 6 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -11 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 15 +mul y x +add z y diff --git a/src/01/Day01.cpp b/src/01/Day01.cpp new file mode 100644 index 0000000..05e811e --- /dev/null +++ b/src/01/Day01.cpp @@ -0,0 +1,6 @@ + +#include "Day01.h" + +int Day01::run() { + return 0; +} diff --git a/src/01/Day01.h b/src/01/Day01.h new file mode 100644 index 0000000..f2a5610 --- /dev/null +++ b/src/01/Day01.h @@ -0,0 +1,14 @@ + +#ifndef ADVENTOFCODE2022_DAY01_H +#define ADVENTOFCODE2022_DAY01_H + +#include "../Day.h" + +class Day01 : public Day { +public: + explicit Day01(std::vector &input) : Day(input) {} + int run() override; +}; + + +#endif diff --git a/src/02/Day02.cpp b/src/02/Day02.cpp new file mode 100644 index 0000000..cb1c2ad --- /dev/null +++ b/src/02/Day02.cpp @@ -0,0 +1,6 @@ + +#include "Day02.h" + +int Day02::run() { + return 1; +} diff --git a/src/02/Day02.h b/src/02/Day02.h new file mode 100644 index 0000000..2f9d11d --- /dev/null +++ b/src/02/Day02.h @@ -0,0 +1,14 @@ + +#ifndef ADVENTOFCODE2022_DAY02_H +#define ADVENTOFCODE2022_DAY02_H + +#include "../Day.h" + +class Day02 : public Day { +public: + explicit Day02(std::vector &input) : Day(input) {} + int run() override; +}; + + +#endif diff --git a/src/03/Day03.cpp b/src/03/Day03.cpp new file mode 100644 index 0000000..6e1e7e0 --- /dev/null +++ b/src/03/Day03.cpp @@ -0,0 +1,6 @@ + +#include "Day03.h" + +int Day03::run() { + return 1; +} diff --git a/src/03/Day03.h b/src/03/Day03.h new file mode 100644 index 0000000..0187de2 --- /dev/null +++ b/src/03/Day03.h @@ -0,0 +1,14 @@ + +#ifndef ADVENTOFCODE2022_DAY03_H +#define ADVENTOFCODE2022_DAY03_H + +#include "../Day.h" + +class Day03 : public Day { +public: + explicit Day03(std::vector &input) : Day(input) {} + int run() override; +}; + + +#endif diff --git a/src/Day.h b/src/Day.h new file mode 100644 index 0000000..7cfe824 --- /dev/null +++ b/src/Day.h @@ -0,0 +1,19 @@ +#ifndef ADVENTOFCODE2022_DAY_H +#define ADVENTOFCODE2022_DAY_H + +#include +#include + +class Day { + +protected: + std::vector input; + +public: + explicit Day(std::vector &input) : input(input) {} + virtual int run() { + return 0; + } +}; + +#endif diff --git a/src/days.h b/src/days.h new file mode 100644 index 0000000..fa9d6ab --- /dev/null +++ b/src/days.h @@ -0,0 +1,27 @@ + +#ifndef ADVENTOFCODE2022_DAYS_H +#define ADVENTOFCODE2022_DAYS_H + +#include "01/Day01.h" +#include "02/Day02.h" +#include "03/Day03.h" + +Day* getDay(int dayNum, std::vector &input){ + Day* day; + switch (dayNum){ + case 1: + day = new Day01(input); + break; + case 2: + day = new Day02(input); + break; + case 3: + day = new Day03(input); + break; + default: + day = nullptr; + } + return day; +} + +#endif diff --git a/src/main.cpp b/src/main.cpp index bc8f460..10791de 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,6 +1,49 @@ #include +#include +#include +#include +#include +#include "days.h" + +std::vector getInput(int day){ + + char dayStrPadded[3]; + sprintf(dayStrPadded, "%02u", day); + std::string localFilePath = "input/" + std::string(dayStrPadded) + "_input.txt"; + + if (!std::filesystem::exists({localFilePath})){ + std::string dayStr = std::to_string(day); + std::string url = "https://adventofcode.com/2021/day/" + dayStr + "/input"; + std::string key = "sdfsd"; + std::string cookie = "session=" + key; + std::cout << "Input does not exist. Fetching from " + url << std::endl; + //cpr::Response res = cpr::Get(cpr::Url {url}, cpr::Header{{"Cookie", cookie}}); + //std::cout << res.text << std::endl; + } + + std::fstream file; + file.open(localFilePath, std::ios::in); + + std::vector result; + std::string line; + while (std::getline(file, line)) + result.push_back(line); + + return result; +} + +int main(int argc, char *argv[]) { + + for (int i = 1; i < argc; i++){ + int dayNum = std::stoi(argv[i]); + std::vector input = getInput(dayNum); + auto day = getDay(dayNum, input); + int code = day->run(); + if (code != 0) + return code; + } -int main() { - std::cout << "Hello, World!" << std::endl; return 0; } + +