master
Benjamin Kraft 3 years ago
parent c3677a6dea
commit 4cf318a360
  1. 2
      fill.py
  2. 1
      pre.cpp
  3. 8
      pre.h
  4. 56
      src/Day.h
  5. 1
      src/days/01/Day01.cpp
  6. 8
      src/days/01/Day01.h
  7. 1
      src/days/02/Day02.cpp
  8. 8
      src/days/02/Day02.h
  9. 1
      src/days/03/Day03.cpp
  10. 8
      src/days/03/Day03.h
  11. 1
      src/days/04/Day04.cpp
  12. 8
      src/days/04/Day04.h
  13. 1
      src/days/05/Day05.cpp
  14. 8
      src/days/05/Day05.h
  15. 1
      src/days/06/Day06.cpp
  16. 8
      src/days/06/Day06.h
  17. 1
      src/days/07/Day07.cpp
  18. 8
      src/days/07/Day07.h
  19. 1
      src/days/08/Day08.cpp
  20. 8
      src/days/08/Day08.h
  21. 1
      src/days/09/Day09.cpp
  22. 8
      src/days/09/Day09.h
  23. 1
      src/days/10/Day10.cpp
  24. 8
      src/days/10/Day10.h
  25. 1
      src/days/11/Day11.cpp
  26. 8
      src/days/11/Day11.h
  27. 1
      src/days/12/Day12.cpp
  28. 8
      src/days/12/Day12.h
  29. 1
      src/days/13/Day13.cpp
  30. 8
      src/days/13/Day13.h
  31. 1
      src/days/14/Day14.cpp
  32. 8
      src/days/14/Day14.h
  33. 1
      src/days/15/Day15.cpp
  34. 8
      src/days/15/Day15.h
  35. 1
      src/days/16/Day16.cpp
  36. 8
      src/days/16/Day16.h
  37. 1
      src/days/17/Day17.cpp
  38. 8
      src/days/17/Day17.h
  39. 1
      src/days/18/Day18.cpp
  40. 8
      src/days/18/Day18.h
  41. 1
      src/days/19/Day19.cpp
  42. 8
      src/days/19/Day19.h
  43. 1
      src/days/20/Day20.cpp
  44. 8
      src/days/20/Day20.h
  45. 1
      src/days/21/Day21.cpp
  46. 8
      src/days/21/Day21.h
  47. 1
      src/days/22/Day22.cpp
  48. 8
      src/days/22/Day22.h
  49. 1
      src/days/23/Day23.cpp
  50. 8
      src/days/23/Day23.h
  51. 1
      src/days/24/Day24.cpp
  52. 8
      src/days/24/Day24.h
  53. 1
      src/days/25/Day25.cpp
  54. 8
      src/days/25/Day25.h
  55. 62
      src/days/days.h
  56. 104
      src/main.cpp
  57. 5
      src/util.h

@ -10,7 +10,7 @@ for dayNum in range(1, 26):
try: try:
os.mkdir(dirName) os.mkdir(dirName)
except OSError: except OSError:
continue pass
with open(f"{dirName}/Day{pad}.h", "w") as file: with open(f"{dirName}/Day{pad}.h", "w") as file:
file.write(preH.replace("XX", pad)) file.write(preH.replace("XX", pad))
with open(f"{dirName}/Day{pad}.cpp", "w") as file: with open(f"{dirName}/Day{pad}.cpp", "w") as file:

@ -1,4 +1,3 @@
#include "DayXX.h" #include "DayXX.h"
Result DayXX::Task1() { Result DayXX::Task1() {

@ -1,14 +1,10 @@
#pragma once
#ifndef ADVENTOFCODE2022_DAYXX_H
#define ADVENTOFCODE2022_DAYXX_H
#include "../../Day.h" #include "../../Day.h"
class DayXX : public Day { class DayXX : public Day {
protected: protected:
Result Task1() override; Result Task1() override;
Result Task2() override; Result Task2() override;
}; };
#endif

@ -1,5 +1,4 @@
#ifndef ADVENTOFCODE2022_DAY_H #pragma once
#define ADVENTOFCODE2022_DAY_H
#include <chrono> #include <chrono>
#include "util.h" #include "util.h"
@ -10,31 +9,32 @@ typedef std::vector<std::string> Input;
class Day { class Day {
protected: protected:
Input input; Input input;
virtual Result Task1() { return ""; }
virtual Result Task2() { return ""; } virtual Result Task1() { return ""; }
virtual Result Task2() { return ""; }
public: public:
int run(Input &_input) { int run(Input &_input) {
input = _input; input = _input;
auto start = high_resolution_clock::now(); auto start = high_resolution_clock::now();
std::cout << "Task 1" << std::endl; std::cout << "Task 1" << std::endl;
Result result1 = Task1(); Result result1 = Task1();
auto stop1 = high_resolution_clock::now(); auto stop1 = high_resolution_clock::now();
auto dur1 = duration_cast<milliseconds>(stop1 - start); auto dur1 = duration_cast<milliseconds>(stop1 - start);
std::cout << "Result: " << result1 << std::endl; std::cout << "Result: " << result1 << std::endl;
std::cout << "Duration: " << dur1.count() << "ms" << std::endl; std::cout << "Duration: " << dur1.count() << "ms" << std::endl;
std::cout << "Task 2" << std::endl; std::cout << "Task 2" << std::endl;
Result result2 = Task2(); Result result2 = Task2();
auto stop2 = high_resolution_clock::now(); auto stop2 = high_resolution_clock::now();
auto dur2 = duration_cast<milliseconds>(stop2 - stop1); auto dur2 = duration_cast<milliseconds>(stop2 - stop1);
std::cout << "Result: " << result2 << std::endl; std::cout << "Result: " << result2 << std::endl;
std::cout << "Duration: " << dur2.count() << "ms" << std::endl << std::endl; std::cout << "Duration: " << dur2.count() << "ms" << std::endl << std::endl;
return 0; return 0;
} }
}; };
#endif

@ -1,4 +1,3 @@
#include "Day01.h" #include "Day01.h"
Result Day01::Task1() { Result Day01::Task1() {

@ -1,14 +1,10 @@
#pragma once
#ifndef ADVENTOFCODE2022_DAY01_H
#define ADVENTOFCODE2022_DAY01_H
#include "../../Day.h" #include "../../Day.h"
class Day01 : public Day { class Day01 : public Day {
protected: protected:
Result Task1() override; Result Task1() override;
Result Task2() override; Result Task2() override;
}; };
#endif

@ -1,4 +1,3 @@
#include "Day02.h" #include "Day02.h"
Result Day02::Task1() { Result Day02::Task1() {

@ -1,14 +1,10 @@
#pragma once
#ifndef ADVENTOFCODE2022_DAY02_H
#define ADVENTOFCODE2022_DAY02_H
#include "../../Day.h" #include "../../Day.h"
class Day02 : public Day { class Day02 : public Day {
protected: protected:
Result Task1() override; Result Task1() override;
Result Task2() override; Result Task2() override;
}; };
#endif

@ -1,4 +1,3 @@
#include "Day03.h" #include "Day03.h"
Result Day03::Task1() { Result Day03::Task1() {

@ -1,14 +1,10 @@
#pragma once
#ifndef ADVENTOFCODE2022_DAY03_H
#define ADVENTOFCODE2022_DAY03_H
#include "../../Day.h" #include "../../Day.h"
class Day03 : public Day { class Day03 : public Day {
protected: protected:
Result Task1() override; Result Task1() override;
Result Task2() override; Result Task2() override;
}; };
#endif

@ -1,4 +1,3 @@
#include "Day04.h" #include "Day04.h"
Result Day04::Task1() { Result Day04::Task1() {

@ -1,14 +1,10 @@
#pragma once
#ifndef ADVENTOFCODE2022_DAY04_H
#define ADVENTOFCODE2022_DAY04_H
#include "../../Day.h" #include "../../Day.h"
class Day04 : public Day { class Day04 : public Day {
protected: protected:
Result Task1() override; Result Task1() override;
Result Task2() override; Result Task2() override;
}; };
#endif

@ -1,4 +1,3 @@
#include "Day05.h" #include "Day05.h"
Result Day05::Task1() { Result Day05::Task1() {

@ -1,14 +1,10 @@
#pragma once
#ifndef ADVENTOFCODE2022_DAY05_H
#define ADVENTOFCODE2022_DAY05_H
#include "../../Day.h" #include "../../Day.h"
class Day05 : public Day { class Day05 : public Day {
protected: protected:
Result Task1() override; Result Task1() override;
Result Task2() override; Result Task2() override;
}; };
#endif

@ -1,4 +1,3 @@
#include "Day06.h" #include "Day06.h"
Result Day06::Task1() { Result Day06::Task1() {

@ -1,14 +1,10 @@
#pragma once
#ifndef ADVENTOFCODE2022_DAY06_H
#define ADVENTOFCODE2022_DAY06_H
#include "../../Day.h" #include "../../Day.h"
class Day06 : public Day { class Day06 : public Day {
protected: protected:
Result Task1() override; Result Task1() override;
Result Task2() override; Result Task2() override;
}; };
#endif

@ -1,4 +1,3 @@
#include "Day07.h" #include "Day07.h"
Result Day07::Task1() { Result Day07::Task1() {

@ -1,14 +1,10 @@
#pragma once
#ifndef ADVENTOFCODE2022_DAY07_H
#define ADVENTOFCODE2022_DAY07_H
#include "../../Day.h" #include "../../Day.h"
class Day07 : public Day { class Day07 : public Day {
protected: protected:
Result Task1() override; Result Task1() override;
Result Task2() override; Result Task2() override;
}; };
#endif

@ -1,4 +1,3 @@
#include "Day08.h" #include "Day08.h"
Result Day08::Task1() { Result Day08::Task1() {

@ -1,14 +1,10 @@
#pragma once
#ifndef ADVENTOFCODE2022_DAY08_H
#define ADVENTOFCODE2022_DAY08_H
#include "../../Day.h" #include "../../Day.h"
class Day08 : public Day { class Day08 : public Day {
protected: protected:
Result Task1() override; Result Task1() override;
Result Task2() override; Result Task2() override;
}; };
#endif

@ -1,4 +1,3 @@
#include "Day09.h" #include "Day09.h"
Result Day09::Task1() { Result Day09::Task1() {

@ -1,14 +1,10 @@
#pragma once
#ifndef ADVENTOFCODE2022_DAY09_H
#define ADVENTOFCODE2022_DAY09_H
#include "../../Day.h" #include "../../Day.h"
class Day09 : public Day { class Day09 : public Day {
protected: protected:
Result Task1() override; Result Task1() override;
Result Task2() override; Result Task2() override;
}; };
#endif

@ -1,4 +1,3 @@
#include "Day10.h" #include "Day10.h"
Result Day10::Task1() { Result Day10::Task1() {

@ -1,14 +1,10 @@
#pragma once
#ifndef ADVENTOFCODE2022_DAY10_H
#define ADVENTOFCODE2022_DAY10_H
#include "../../Day.h" #include "../../Day.h"
class Day10 : public Day { class Day10 : public Day {
protected: protected:
Result Task1() override; Result Task1() override;
Result Task2() override; Result Task2() override;
}; };
#endif

@ -1,4 +1,3 @@
#include "Day11.h" #include "Day11.h"
Result Day11::Task1() { Result Day11::Task1() {

@ -1,14 +1,10 @@
#pragma once
#ifndef ADVENTOFCODE2022_DAY11_H
#define ADVENTOFCODE2022_DAY11_H
#include "../../Day.h" #include "../../Day.h"
class Day11 : public Day { class Day11 : public Day {
protected: protected:
Result Task1() override; Result Task1() override;
Result Task2() override; Result Task2() override;
}; };
#endif

@ -1,4 +1,3 @@
#include "Day12.h" #include "Day12.h"
Result Day12::Task1() { Result Day12::Task1() {

@ -1,14 +1,10 @@
#pragma once
#ifndef ADVENTOFCODE2022_DAY12_H
#define ADVENTOFCODE2022_DAY12_H
#include "../../Day.h" #include "../../Day.h"
class Day12 : public Day { class Day12 : public Day {
protected: protected:
Result Task1() override; Result Task1() override;
Result Task2() override; Result Task2() override;
}; };
#endif

@ -1,4 +1,3 @@
#include "Day13.h" #include "Day13.h"
Result Day13::Task1() { Result Day13::Task1() {

@ -1,14 +1,10 @@
#pragma once
#ifndef ADVENTOFCODE2022_DAY13_H
#define ADVENTOFCODE2022_DAY13_H
#include "../../Day.h" #include "../../Day.h"
class Day13 : public Day { class Day13 : public Day {
protected: protected:
Result Task1() override; Result Task1() override;
Result Task2() override; Result Task2() override;
}; };
#endif

@ -1,4 +1,3 @@
#include "Day14.h" #include "Day14.h"
Result Day14::Task1() { Result Day14::Task1() {

@ -1,14 +1,10 @@
#pragma once
#ifndef ADVENTOFCODE2022_DAY14_H
#define ADVENTOFCODE2022_DAY14_H
#include "../../Day.h" #include "../../Day.h"
class Day14 : public Day { class Day14 : public Day {
protected: protected:
Result Task1() override; Result Task1() override;
Result Task2() override; Result Task2() override;
}; };
#endif

@ -1,4 +1,3 @@
#include "Day15.h" #include "Day15.h"
Result Day15::Task1() { Result Day15::Task1() {

@ -1,14 +1,10 @@
#pragma once
#ifndef ADVENTOFCODE2022_DAY15_H
#define ADVENTOFCODE2022_DAY15_H
#include "../../Day.h" #include "../../Day.h"
class Day15 : public Day { class Day15 : public Day {
protected: protected:
Result Task1() override; Result Task1() override;
Result Task2() override; Result Task2() override;
}; };
#endif

@ -1,4 +1,3 @@
#include "Day16.h" #include "Day16.h"
Result Day16::Task1() { Result Day16::Task1() {

@ -1,14 +1,10 @@
#pragma once
#ifndef ADVENTOFCODE2022_DAY16_H
#define ADVENTOFCODE2022_DAY16_H
#include "../../Day.h" #include "../../Day.h"
class Day16 : public Day { class Day16 : public Day {
protected: protected:
Result Task1() override; Result Task1() override;
Result Task2() override; Result Task2() override;
}; };
#endif

@ -1,4 +1,3 @@
#include "Day17.h" #include "Day17.h"
Result Day17::Task1() { Result Day17::Task1() {

@ -1,14 +1,10 @@
#pragma once
#ifndef ADVENTOFCODE2022_DAY17_H
#define ADVENTOFCODE2022_DAY17_H
#include "../../Day.h" #include "../../Day.h"
class Day17 : public Day { class Day17 : public Day {
protected: protected:
Result Task1() override; Result Task1() override;
Result Task2() override; Result Task2() override;
}; };
#endif

@ -1,4 +1,3 @@
#include "Day18.h" #include "Day18.h"
Result Day18::Task1() { Result Day18::Task1() {

@ -1,14 +1,10 @@
#pragma once
#ifndef ADVENTOFCODE2022_DAY18_H
#define ADVENTOFCODE2022_DAY18_H
#include "../../Day.h" #include "../../Day.h"
class Day18 : public Day { class Day18 : public Day {
protected: protected:
Result Task1() override; Result Task1() override;
Result Task2() override; Result Task2() override;
}; };
#endif

@ -1,4 +1,3 @@
#include "Day19.h" #include "Day19.h"
Result Day19::Task1() { Result Day19::Task1() {

@ -1,14 +1,10 @@
#pragma once
#ifndef ADVENTOFCODE2022_DAY19_H
#define ADVENTOFCODE2022_DAY19_H
#include "../../Day.h" #include "../../Day.h"
class Day19 : public Day { class Day19 : public Day {
protected: protected:
Result Task1() override; Result Task1() override;
Result Task2() override; Result Task2() override;
}; };
#endif

@ -1,4 +1,3 @@
#include "Day20.h" #include "Day20.h"
Result Day20::Task1() { Result Day20::Task1() {

@ -1,14 +1,10 @@
#pragma once
#ifndef ADVENTOFCODE2022_DAY20_H
#define ADVENTOFCODE2022_DAY20_H
#include "../../Day.h" #include "../../Day.h"
class Day20 : public Day { class Day20 : public Day {
protected: protected:
Result Task1() override; Result Task1() override;
Result Task2() override; Result Task2() override;
}; };
#endif

@ -1,4 +1,3 @@
#include "Day21.h" #include "Day21.h"
Result Day21::Task1() { Result Day21::Task1() {

@ -1,14 +1,10 @@
#pragma once
#ifndef ADVENTOFCODE2022_DAY21_H
#define ADVENTOFCODE2022_DAY21_H
#include "../../Day.h" #include "../../Day.h"
class Day21 : public Day { class Day21 : public Day {
protected: protected:
Result Task1() override; Result Task1() override;
Result Task2() override; Result Task2() override;
}; };
#endif

@ -1,4 +1,3 @@
#include "Day22.h" #include "Day22.h"
Result Day22::Task1() { Result Day22::Task1() {

@ -1,14 +1,10 @@
#pragma once
#ifndef ADVENTOFCODE2022_DAY22_H
#define ADVENTOFCODE2022_DAY22_H
#include "../../Day.h" #include "../../Day.h"
class Day22 : public Day { class Day22 : public Day {
protected: protected:
Result Task1() override; Result Task1() override;
Result Task2() override; Result Task2() override;
}; };
#endif

@ -1,4 +1,3 @@
#include "Day23.h" #include "Day23.h"
Result Day23::Task1() { Result Day23::Task1() {

@ -1,14 +1,10 @@
#pragma once
#ifndef ADVENTOFCODE2022_DAY23_H
#define ADVENTOFCODE2022_DAY23_H
#include "../../Day.h" #include "../../Day.h"
class Day23 : public Day { class Day23 : public Day {
protected: protected:
Result Task1() override; Result Task1() override;
Result Task2() override; Result Task2() override;
}; };
#endif

@ -1,4 +1,3 @@
#include "Day24.h" #include "Day24.h"
Result Day24::Task1() { Result Day24::Task1() {

@ -1,14 +1,10 @@
#pragma once
#ifndef ADVENTOFCODE2022_DAY24_H
#define ADVENTOFCODE2022_DAY24_H
#include "../../Day.h" #include "../../Day.h"
class Day24 : public Day { class Day24 : public Day {
protected: protected:
Result Task1() override; Result Task1() override;
Result Task2() override; Result Task2() override;
}; };
#endif

@ -1,4 +1,3 @@
#include "Day25.h" #include "Day25.h"
Result Day25::Task1() { Result Day25::Task1() {

@ -1,14 +1,10 @@
#pragma once
#ifndef ADVENTOFCODE2022_DAY25_H
#define ADVENTOFCODE2022_DAY25_H
#include "../../Day.h" #include "../../Day.h"
class Day25 : public Day { class Day25 : public Day {
protected: protected:
Result Task1() override; Result Task1() override;
Result Task2() override; Result Task2() override;
}; };
#endif

@ -1,6 +1,4 @@
#pragma once
#ifndef ADVENTOFCODE2022_DAYS_H
#define ADVENTOFCODE2022_DAYS_H
#include "01/Day01.h" #include "01/Day01.h"
#include "02/Day02.h" #include "02/Day02.h"
@ -28,34 +26,32 @@
#include "24/Day24.h" #include "24/Day24.h"
#include "25/Day25.h" #include "25/Day25.h"
std::vector<Day*> getAllDays(){ std::vector<Day *> getAllDays() {
return { return {
new Day01(), new Day01(),
new Day02(), new Day02(),
new Day03(), new Day03(),
new Day04(), new Day04(),
new Day05(), new Day05(),
new Day06(), new Day06(),
new Day07(), new Day07(),
new Day08(), new Day08(),
new Day09(), new Day09(),
new Day10(), new Day10(),
new Day11(), new Day11(),
new Day12(), new Day12(),
new Day13(), new Day13(),
new Day14(), new Day14(),
new Day15(), new Day15(),
new Day16(), new Day16(),
new Day17(), new Day17(),
new Day18(), new Day18(),
new Day19(), new Day19(),
new Day20(), new Day20(),
new Day21(), new Day21(),
new Day22(), new Day22(),
new Day23(), new Day23(),
new Day24(), new Day24(),
new Day25() new Day25()
}; };
} }
#endif

@ -3,66 +3,64 @@
#include "days/days.h" #include "days/days.h"
std::vector<std::string> getInput(int day, std::string key, bool useTestInput){ std::vector<std::string> getInput(int day, std::string key, bool useTestInput) {
std::vector<std::string> result; std::vector<std::string> result;
char dayStrPadded[3]; char dayStrPadded[3];
sprintf(dayStrPadded, "%02u", day); sprintf(dayStrPadded, "%02u", day);
std::string postfix = useTestInput ? "_testInput.txt" : "_input.txt"; std::string postfix = useTestInput ? "_testInput.txt" : "_input.txt";
std::string localFilePath = "input/" + std::string(dayStrPadded) + postfix; std::string localFilePath = "input/" + std::string(dayStrPadded) + postfix;
if (!std::filesystem::exists({localFilePath})){ if (!std::filesystem::exists({localFilePath})) {
if (key.empty()) if (key.empty())
return result; return result;
std::string dayStr = std::to_string(day); std::string dayStr = std::to_string(day);
std::string url = "https://adventofcode.com/2021/day/" + dayStr + "/input"; std::string url = "https://adventofcode.com/2021/day/" + dayStr + "/input";
std::cout << "Input does not exist. Fetching from " + url << std::endl; std::cout << "Input does not exist. Fetching from " + url << std::endl;
std::ofstream file(localFilePath); std::ofstream file(localFilePath);
file << cpr::Get(cpr::Url {url}, cpr::Cookies{{"session", key}}).text; file << cpr::Get(cpr::Url{url}, cpr::Cookies{{"session", key}}).text;
file.close(); file.close();
} }
std::ifstream file(localFilePath); std::ifstream file(localFilePath);
std::string line; std::string line;
while (std::getline(file, line)) while (std::getline(file, line))
result.push_back(line); result.push_back(line);
file.close(); file.close();
return result; return result;
} }
std::string getSessionKey(){ std::string getSessionKey() {
std::string key; std::string key;
std::ifstream file("session"); std::ifstream file("session");
if (!file.good()) if (!file.good())
return ""; return "";
file >> key; file >> key;
file.close(); file.close();
return key; return key;
} }
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
auto key = getSessionKey(); auto key = getSessionKey();
bool useTestInput = false; bool useTestInput = false;
auto days = getAllDays(); auto days = getAllDays();
std::filesystem::create_directory("input"); std::filesystem::create_directory("input");
for (int i = 1; i < argc; i++){ for (int i = 1; i < argc; i++) {
int dayNum = std::stoi(argv[i]); int dayNum = std::stoi(argv[i]);
std::cout << "Running day " << dayNum << std::endl; std::cout << "Running day " << dayNum << std::endl;
Input input = getInput(dayNum, key, useTestInput); Input input = getInput(dayNum, key, useTestInput);
Day* day = days[dayNum - 1]; Day *day = days[dayNum - 1];
int code = day->run(input); int code = day->run(input);
if (code != 0) if (code != 0)
return code; return code;
} }
days.clear(); days.clear();
return 0; return 0;
} }

@ -1,11 +1,8 @@
#ifndef ADVENTOFCODE2022_UTIL_H #pragma once
#define ADVENTOFCODE2022_UTIL_H
#include <vector> #include <vector>
#include <numeric> #include <numeric>
#include <string> #include <string>
#include <tuple> #include <tuple>
#include <iostream> #include <iostream>
#endif

Loading…
Cancel
Save