rename input/output
This commit is contained in:
parent
6a34b0f309
commit
041c055f43
@ -24,7 +24,7 @@ auto Feed(R &&s, ValueType start) -> std::optional<ValueType> {
|
||||
for (auto &m : amps) {
|
||||
auto e = Step(m);
|
||||
if (auto i = std::get_if<Input>(&e)) {
|
||||
i->pos = start;
|
||||
i->input = start;
|
||||
start = StepOutput(m);
|
||||
} else {
|
||||
return {};
|
||||
|
@ -19,7 +19,7 @@ using Ethernet = std::deque<Packet>;
|
||||
|
||||
auto BuildNetwork(Machine m) -> std::vector<Machine> {
|
||||
std::vector<Machine> machines;
|
||||
auto& i = std::get<Input>(Step(m)).pos;
|
||||
auto& i = std::get<Input>(Step(m)).input;
|
||||
for (i = 0; i < 50; i++) {
|
||||
machines.push_back(m);
|
||||
}
|
||||
@ -32,7 +32,7 @@ auto Interact(Ethernet & ethernet, Machine & m, std::optional<Payload> p) -> voi
|
||||
switch (e.index()) {
|
||||
default: throw std::runtime_error{"unexpected halt"};
|
||||
case 0: {
|
||||
auto& i = std::get<0>(e).pos;
|
||||
auto& i = std::get<0>(e).input;
|
||||
if (p) {
|
||||
i = p->x;
|
||||
StepInput(m, p->y);
|
||||
@ -43,7 +43,7 @@ auto Interact(Ethernet & ethernet, Machine & m, std::optional<Payload> p) -> voi
|
||||
return;
|
||||
}
|
||||
case 1: {
|
||||
auto d = std::get<1>(e).val;
|
||||
auto d = std::get<1>(e).output;
|
||||
auto x = StepOutput(m);
|
||||
auto y = StepOutput(m);
|
||||
ethernet.push_back({d, {x,y}});
|
||||
|
@ -9,11 +9,11 @@
|
||||
namespace intcode {
|
||||
|
||||
struct Input {
|
||||
ValueType &pos;
|
||||
ValueType &input;
|
||||
};
|
||||
|
||||
struct Output {
|
||||
ValueType val;
|
||||
ValueType output;
|
||||
};
|
||||
|
||||
struct Halt {};
|
||||
@ -32,8 +32,8 @@ template <std::invocable<ValueType&> Fin, std::invocable<ValueType> Fout, std::i
|
||||
auto Advance(Machine & machine, Fin input, Fout output, Fhalt halt) {
|
||||
return std::visit(overloaded{
|
||||
[&](Halt) { return halt(); },
|
||||
[&](Input i) { return input(i.pos); },
|
||||
[&](Output o) { return output(o.val); },
|
||||
[&](Input i) { return input(i.input); },
|
||||
[&](Output o) { return output(o.output); },
|
||||
}, Step(machine));
|
||||
}
|
||||
|
||||
|
@ -6,11 +6,11 @@ BadInstruction::BadInstruction(char const* what)
|
||||
: std::runtime_error{what} {}
|
||||
|
||||
auto StepInput(Machine & m, ValueType input) -> void {
|
||||
std::get<Input>(Step(m)).pos = input;
|
||||
std::get<Input>(Step(m)).input = input;
|
||||
}
|
||||
|
||||
auto StepOutput(Machine & m) -> ValueType {
|
||||
return std::get<Output>(Step(m)).val;
|
||||
return std::get<Output>(Step(m)).output;
|
||||
}
|
||||
|
||||
auto Step(Machine & m) -> std::variant<Input, Output, Halt> {
|
||||
|
Loading…
Reference in New Issue
Block a user