jazz up Coord
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
#include <intcode/Grid.hpp>
|
||||
#include <intcode/Coord.hpp>
|
||||
|
||||
namespace intcode {
|
||||
|
||||
@@ -30,39 +30,61 @@ auto Draw(std::ostream & out, std::map<Coord, ValueType> image) -> void {
|
||||
}
|
||||
|
||||
auto Up(Coord c) -> Coord {
|
||||
c.second -= 1;
|
||||
c.y -= 1;
|
||||
return c;
|
||||
}
|
||||
|
||||
auto Down(Coord c) -> Coord {
|
||||
c.second += 1;
|
||||
c.y += 1;
|
||||
return c;
|
||||
}
|
||||
|
||||
auto Left(Coord c) -> Coord {
|
||||
c.first -= 1;
|
||||
c.x -= 1;
|
||||
return c;
|
||||
}
|
||||
|
||||
auto Right(Coord c) -> Coord {
|
||||
c.first += 1;
|
||||
c.x += 1;
|
||||
return c;
|
||||
}
|
||||
|
||||
auto Invert(Coord c) -> Coord {
|
||||
return {c.y, c.x};
|
||||
}
|
||||
|
||||
auto CW(Coord c) -> Coord {
|
||||
std::swap(c.first, c.second);
|
||||
c.first = -c.first;
|
||||
c = Invert(c);
|
||||
c.x = -c.x;
|
||||
return c;
|
||||
}
|
||||
|
||||
auto CCW(Coord c) -> Coord {
|
||||
std::swap(c.first, c.second);
|
||||
c.second = -c.second;
|
||||
c = Invert(c);
|
||||
c.y = -c.y;
|
||||
return c;
|
||||
}
|
||||
|
||||
auto Add(Coord x, Coord y) -> Coord {
|
||||
return {x.first + y.first, x.second + y.second};
|
||||
auto operator+(Coord a, Coord b) -> Coord {
|
||||
return {a.x + b.x, a.y + b.y};
|
||||
}
|
||||
|
||||
auto operator-(Coord a, Coord b) -> Coord {
|
||||
return {a.x - b.x, a.y - b.y};
|
||||
}
|
||||
|
||||
auto operator+=(Coord & a, Coord b) -> Coord & {
|
||||
a = a + b;
|
||||
return a;
|
||||
}
|
||||
|
||||
auto operator-=(Coord & a, Coord b) -> Coord & {
|
||||
a = a - b;
|
||||
return a;
|
||||
}
|
||||
|
||||
auto operator<<(std::ostream & out, Coord c) -> std::ostream & {
|
||||
return out << "(" << c.x << "," << c.y << ")";
|
||||
}
|
||||
|
||||
} // namespace
|
@@ -26,18 +26,12 @@ auto Step(Machine & m) -> std::variant<Input, Output, Halt> {
|
||||
|
||||
switch (instruction % 100) {
|
||||
case 1: {
|
||||
auto a = arg();
|
||||
auto b = arg();
|
||||
auto& c = arg();
|
||||
c = a + b;
|
||||
arg() = arg() + arg();
|
||||
break;
|
||||
}
|
||||
|
||||
case 2: {
|
||||
auto a = arg();
|
||||
auto b = arg();
|
||||
auto& c = arg();
|
||||
c = a * b;
|
||||
arg() = arg() * arg();
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -66,16 +60,12 @@ auto Step(Machine & m) -> std::variant<Input, Output, Halt> {
|
||||
case 7: {
|
||||
auto a = arg();
|
||||
auto b = arg();
|
||||
auto& c = arg();
|
||||
c = a < b;
|
||||
arg() = a < b; // order matters
|
||||
break;
|
||||
}
|
||||
|
||||
case 8: {
|
||||
auto a = arg();
|
||||
auto b = arg();
|
||||
auto& c = arg();
|
||||
c = a == b;
|
||||
arg() = arg() == arg();
|
||||
break;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user