From 1cc596397d1569d5e4f1aa48258215854822a672 Mon Sep 17 00:00:00 2001 From: Ben Kyd Date: Tue, 2 Dec 2025 18:05:25 +0000 Subject: [PATCH] day generator --- 2025/3.txt | 0 2025/aoc | Bin 80320 -> 82944 bytes 2025/aoc.cpp | 76 ++++++++++++++++++++++++++++++++++++++++++++++++-- 2025/day3.hpp | 24 ++++++++++++++++ 4 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 2025/3.txt create mode 100644 2025/day3.hpp diff --git a/2025/3.txt b/2025/3.txt new file mode 100644 index 0000000..e69de29 diff --git a/2025/aoc b/2025/aoc index d83ea8e5d040f7fd7f7268deba833ef2a20ac612..cdae1ccd7b947391c42a0e0044cecf1c373f24dd 100755 GIT binary patch delta 20740 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 UKOD+wdpGvclJ>(7{Oe!;7szMq=Kufz delta 13380 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 RplyDB?5kG|38B2@{{cn2j|2b! diff --git a/2025/aoc.cpp b/2025/aoc.cpp index 990f830..f98c52f 100644 --- a/2025/aoc.cpp +++ b/2025/aoc.cpp @@ -1,9 +1,67 @@ #include #include +#include +#include +#include #include "aoc.hpp" #include "day1.hpp" #include "day2.hpp" +#include "day3.hpp" + +void GenerateDay(int day, std::filesystem::path base) +{ + std::cout << "Ganerating template for day " << day << std::endl; + std::ostringstream className; + className << "Day" << std::setw(2) << std::setfill('0') << day; // Day01 + std::string classStr = className.str(); + + std::string headerName = "day" + std::to_string(day) + ".hpp"; // day1.hpp + std::string inputName = std::to_string(day) + ".txt"; // 1.txt + + std::filesystem::path headerPath = base / headerName; + std::filesystem::path inputPath = base / inputName; + + if (std::filesystem::exists(headerPath)) { + std::cerr << headerName << " already exists. Aborting." << std::endl; + return; + } + + std::ofstream out(headerPath); + if (!out) { + std::cerr << "Failed to write " << headerName << std::endl; + return; + } + + out << "#pragma once\n"; + out << "#include \"aoc.hpp\"\n\n"; + out << "class " << classStr << " : public AOCDay\n"; + out << "{\n"; + out << "public:\n"; + out << " " << classStr << "() {}\n"; + out << " ~" << classStr << "() {}\n"; + out << " int Day() override { return " << day << "; }\n\n"; + out << " uint64_t PartOne(File& f) override\n"; + out << " {\n"; + out << " return 0;\n"; + out << " }\n\n"; + out << " uint64_t PartTwo(File& f) override\n"; + out << " {\n"; + out << " return 0;\n"; + out << " }\n"; + out << "};\n\n"; + out << "ADD_AOC_DAY(" << classStr << ");\n"; + + out.close(); + + std::ofstream input(inputPath); + input.close(); + + std::cout << "Generated:" << std::endl; + std::cout << " " << headerPath << std::endl; + std::cout << " " << inputPath << std::endl << std::endl; + std::cout << "Remember to include `" << headerName << "`" << std::endl; +} int main(int argc, char** argv) { @@ -19,7 +77,7 @@ int main(int argc, char** argv) std::string arg = argv[i]; // Day flag - if (arg == "-d") + if (arg == "-d" || arg == "--day") { if (i + 1 >= argc) { @@ -44,12 +102,25 @@ int main(int argc, char** argv) std::cout << "Selected base path: " << base.string() << "\n"; } + if (arg == "-g" || arg == "--generate") + { + if (i + 1 >= argc) + { + std::cerr << "Error: -g requires a day number\n"; + return 1; + } + ++i; + GenerateDay(std::atoi(argv[i]), base); + return 1; + } + // Help flag if (arg == "help" || arg == "--help" || arg == "-h") { std::cout << "\nUsage:\n" << " -d [day] Run a specific day\n" << " -p [path] Set a base path for input\n" + << " -g [day] Generate a new day! (Stil need to add to compiler)\n" << " help Show this help message\n" << " (no args) Run all days\n"; return 0; @@ -57,7 +128,8 @@ int main(int argc, char** argv) // Unknown argument if (arg != "-d" && arg != "-p" && arg != "--path" && - arg != "help" && arg != "--help" && arg != "-h") + arg != "help" && arg != "--help" && arg != "-h" && + arg != "-g" && arg != "--generate") { std::cerr << "Unknown argument: " << arg << "\n" << "Use 'help' for usage information.\n"; diff --git a/2025/day3.hpp b/2025/day3.hpp new file mode 100644 index 0000000..3200649 --- /dev/null +++ b/2025/day3.hpp @@ -0,0 +1,24 @@ +#include "aoc.hpp" + +#include + +class Day03 : public AOCDay +{ +public: + Day03() {} + ~Day03() {} + int Day() override {return 3;} + + uint64_t PartOne(File& f) override + { + + } + + uint64_t PartTwo(File& f) override + { + } + +}; + +ADD_AOC_DAY(Day03); +