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:
os.mkdir(dirName)
except OSError:
continue
pass
with open(f"{dirName}/Day{pad}.h", "w") as file:
file.write(preH.replace("XX", pad))
with open(f"{dirName}/Day{pad}.cpp", "w") as file:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Loading…
Cancel
Save