From 5810fe22e9f7099ed59056bd6771b88a63547b3d Mon Sep 17 00:00:00 2001 From: Pratchaya Khansomboon Date: Tue, 17 Dec 2024 18:01:49 +0100 Subject: [PATCH] aoc24: day17 started --- dat/24/ex/17.txt | 5 ++++ dat/24/re/17.txt | 5 ++++ sol/24/CMakeLists.txt | 1 + sol/24/aoc.cpp | 1 + sol/24/day17.cpp | 59 +++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 71 insertions(+) create mode 100644 dat/24/ex/17.txt create mode 100644 dat/24/re/17.txt create mode 100644 sol/24/day17.cpp diff --git a/dat/24/ex/17.txt b/dat/24/ex/17.txt new file mode 100644 index 0000000..f09839b --- /dev/null +++ b/dat/24/ex/17.txt @@ -0,0 +1,5 @@ +Register A: 729 +Register B: 0 +Register C: 0 + +Program: 0,1,5,4,3,0 diff --git a/dat/24/re/17.txt b/dat/24/re/17.txt new file mode 100644 index 0000000..5627e5e --- /dev/null +++ b/dat/24/re/17.txt @@ -0,0 +1,5 @@ +Register A: 22817223 +Register B: 0 +Register C: 0 + +Program: 2,4,1,2,7,5,4,5,0,3,1,7,5,5,3,0 diff --git a/sol/24/CMakeLists.txt b/sol/24/CMakeLists.txt index 52a9f00..41ccd9c 100644 --- a/sol/24/CMakeLists.txt +++ b/sol/24/CMakeLists.txt @@ -16,6 +16,7 @@ set(SOURCES # "day11.cpp" "day14.cpp" "day16.cpp" + "day17.cpp" ) add_library(aoc24 STATIC ${HEADERS} ${SOURCES}) target_include_directories(aoc24 diff --git a/sol/24/aoc.cpp b/sol/24/aoc.cpp index 046a15b..84ef906 100644 --- a/sol/24/aoc.cpp +++ b/sol/24/aoc.cpp @@ -31,6 +31,7 @@ auto entry([[maybe_unused]]std::span const& args) -> std::expected< // case 11: return day11(args); case 14: return day14(args); case 16: return day16(args); + case 17: return day17(args); default: return aoc::make_error(fmt::format("day {}", day), std::errc::not_supported); } diff --git a/sol/24/day17.cpp b/sol/24/day17.cpp new file mode 100644 index 0000000..7f6b277 --- /dev/null +++ b/sol/24/day17.cpp @@ -0,0 +1,59 @@ +#include +#include +#include +#include + +#include "aoc.hpp" +#include "aoc/utils.hpp" +#include "fmt/format.h" +#include "stb_image_write.h" + +using namespace aoc::types; +using namespace std::string_view_literals; + +namespace uec { +enum class opcode : u8 { + adv, + bxl, + bst, + jnz, + bxc, + out, + bdv, + cdv +}; + +struct regs { + u64 a; + u64 b; + u64 c; +}; + +class cpu { +public: + cpu() {} + + auto load(uec::regs const& regs, std::vector const& program) -> void { + m_regs = regs; + m_program = program; + } + + auto registers() const -> uec::regs { return m_regs; } + auto program() const -> std::vector const& { return m_program; } + +private: + uec::regs m_regs{}; + std::vector m_program{}; +}; +} + +auto aoc24::day17([[maybe_unused]]std::span const& args) -> std::expected { + auto res = aoc::read_text("./dat/24/ex/17.txt"); + // auto res = aoc::read_text("./dat/24/re/17.txt"); + if (!res) return std::unexpected(res.error()); + auto const txt = *res; + + auto + + return {}; +}