aoc24: day17 started
This commit is contained in:
5
dat/24/ex/17.txt
Normal file
5
dat/24/ex/17.txt
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
Register A: 729
|
||||||
|
Register B: 0
|
||||||
|
Register C: 0
|
||||||
|
|
||||||
|
Program: 0,1,5,4,3,0
|
||||||
5
dat/24/re/17.txt
Normal file
5
dat/24/re/17.txt
Normal file
@@ -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
|
||||||
@@ -16,6 +16,7 @@ set(SOURCES
|
|||||||
# "day11.cpp"
|
# "day11.cpp"
|
||||||
"day14.cpp"
|
"day14.cpp"
|
||||||
"day16.cpp"
|
"day16.cpp"
|
||||||
|
"day17.cpp"
|
||||||
)
|
)
|
||||||
add_library(aoc24 STATIC ${HEADERS} ${SOURCES})
|
add_library(aoc24 STATIC ${HEADERS} ${SOURCES})
|
||||||
target_include_directories(aoc24
|
target_include_directories(aoc24
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ auto entry([[maybe_unused]]std::span<char const*> const& args) -> std::expected<
|
|||||||
// case 11: return day11(args);
|
// case 11: return day11(args);
|
||||||
case 14: return day14(args);
|
case 14: return day14(args);
|
||||||
case 16: return day16(args);
|
case 16: return day16(args);
|
||||||
|
case 17: return day17(args);
|
||||||
default:
|
default:
|
||||||
return aoc::make_error(fmt::format("day {}", day), std::errc::not_supported);
|
return aoc::make_error(fmt::format("day {}", day), std::errc::not_supported);
|
||||||
}
|
}
|
||||||
|
|||||||
59
sol/24/day17.cpp
Normal file
59
sol/24/day17.cpp
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
#include <vector>
|
||||||
|
#include <ranges>
|
||||||
|
#include <numeric>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
#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<opcode> const& program) -> void {
|
||||||
|
m_regs = regs;
|
||||||
|
m_program = program;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto registers() const -> uec::regs { return m_regs; }
|
||||||
|
auto program() const -> std::vector<opcode> const& { return m_program; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
uec::regs m_regs{};
|
||||||
|
std::vector<opcode> m_program{};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
auto aoc24::day17([[maybe_unused]]std::span<char const*> const& args) -> std::expected<void, aoc::error> {
|
||||||
|
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 {};
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user