60 lines
1.1 KiB
C++
60 lines
1.1 KiB
C++
#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 {};
|
|
}
|