aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/2017/day21/aoc.cpp1
-rw-r--r--src/2017/day21/aoc.h121
2 files changed, 51 insertions, 71 deletions
diff --git a/src/2017/day21/aoc.cpp b/src/2017/day21/aoc.cpp
index 876f1a0..ff0ae10 100644
--- a/src/2017/day21/aoc.cpp
+++ b/src/2017/day21/aoc.cpp
@@ -21,6 +21,7 @@ static std::string match(T t, const std::vector<rule>& rs) {
for (auto& r : rs) {
for (auto&& sx : t.combo()) {
if (sx.to_string() == r.k) {
+ // printf("%s matched %s\n", s.c_str(), r.k.c_str());
return r.v;
}
}
diff --git a/src/2017/day21/aoc.h b/src/2017/day21/aoc.h
index 1f743c2..1381fb9 100644
--- a/src/2017/day21/aoc.h
+++ b/src/2017/day21/aoc.h
@@ -18,20 +18,14 @@ struct square2 {
square2() {}
- std::vector<square2> flip() const noexcept {
+ square2 flip() const noexcept {
square2 s0;
s0.s[0] = s[1];
s0.s[1] = s[0];
s0.s[2] = s[3];
s0.s[3] = s[2];
- square2 s1;
- s1.s[0] = s[2];
- s1.s[1] = s[3];
- s1.s[2] = s[0];
- s1.s[3] = s[1];
-
- return {s0, s1};
+ return s0;
}
std::vector<square2> rotate() const noexcept {
@@ -57,13 +51,10 @@ struct square2 {
}
std::vector<square2> combo() const noexcept {
- std::vector<square2> c{*this};
+ std::vector<square2> c{*this, flip()};
for (auto&& s : rotate()) {
c.emplace_back(s);
}
- for (auto&& s : flip()) {
- c.emplace_back(s);
- }
return c;
}
@@ -104,7 +95,7 @@ struct square3 {
}
square3() {}
- std::vector<square3> flip() const noexcept {
+ square3 flip() const noexcept {
square3 s0;
s0.s[0] = s[2];
s0.s[1] = s[1];
@@ -116,31 +107,20 @@ struct square3 {
s0.s[7] = s[7];
s0.s[8] = s[6];
- square3 s1;
- s1.s[0] = s[6];
- s1.s[6] = s[0];
- s1.s[3] = s[3];
- s1.s[1] = s[7];
- s1.s[7] = s[1];
- s1.s[4] = s[4];
- s1.s[2] = s[8];
- s1.s[8] = s[2];
- s1.s[5] = s[5];
-
- return {s0, s1};
+ return s0;
}
std::vector<square3> rotate() const noexcept {
- square3 s0;
- s0.s[0] = s[3];
- s0.s[1] = s[0];
- s0.s[2] = s[1];
- s0.s[3] = s[6];
- s0.s[4] = s[4];
- s0.s[5] = s[2];
- s0.s[6] = s[7];
- s0.s[7] = s[8];
- s0.s[8] = s[5];
+ // square3 s0;
+ // s0.s[0] = s[3];
+ // s0.s[1] = s[0];
+ // s0.s[2] = s[1];
+ // s0.s[3] = s[6];
+ // s0.s[4] = s[4];
+ // s0.s[5] = s[2];
+ // s0.s[6] = s[7];
+ // s0.s[7] = s[8];
+ // s0.s[8] = s[5];
square3 s1;
s1.s[0] = s[6];
@@ -153,16 +133,16 @@ struct square3 {
s1.s[7] = s[5];
s1.s[8] = s[2];
- square3 s2;
- s2.s[0] = s[7];
- s2.s[1] = s[6];
- s2.s[2] = s[3];
- s2.s[3] = s[8];
- s2.s[4] = s[4];
- s2.s[5] = s[0];
- s2.s[6] = s[5];
- s2.s[7] = s[2];
- s2.s[8] = s[1];
+ // square3 s2;
+ // s2.s[0] = s[7];
+ // s2.s[1] = s[6];
+ // s2.s[2] = s[3];
+ // s2.s[3] = s[8];
+ // s2.s[4] = s[4];
+ // s2.s[5] = s[0];
+ // s2.s[6] = s[5];
+ // s2.s[7] = s[2];
+ // s2.s[8] = s[1];
square3 s3;
s3.s[0] = s[8];
@@ -175,16 +155,16 @@ struct square3 {
s3.s[7] = s[1];
s3.s[8] = s[0];
- square3 s4;
- s4.s[0] = s[5];
- s4.s[1] = s[8];
- s4.s[2] = s[7];
- s4.s[3] = s[2];
- s4.s[4] = s[4];
- s4.s[5] = s[6];
- s4.s[6] = s[1];
- s4.s[7] = s[0];
- s4.s[8] = s[3];
+ // square3 s4;
+ // s4.s[0] = s[5];
+ // s4.s[1] = s[8];
+ // s4.s[2] = s[7];
+ // s4.s[3] = s[2];
+ // s4.s[4] = s[4];
+ // s4.s[5] = s[6];
+ // s4.s[6] = s[1];
+ // s4.s[7] = s[0];
+ // s4.s[8] = s[3];
square3 s5;
s5.s[0] = s[2];
@@ -197,27 +177,26 @@ struct square3 {
s5.s[7] = s[3];
s5.s[8] = s[6];
- square3 s6;
- s6.s[0] = s[1];
- s6.s[1] = s[2];
- s6.s[2] = s[5];
- s6.s[3] = s[0];
- s6.s[4] = s[4];
- s6.s[5] = s[8];
- s6.s[6] = s[3];
- s6.s[7] = s[6];
- s6.s[8] = s[7];
-
- return {s0, s1, s2, s3, s4, s5, s6};
+ // square3 s6;
+ // s6.s[0] = s[1];
+ // s6.s[1] = s[2];
+ // s6.s[2] = s[5];
+ // s6.s[3] = s[0];
+ // s6.s[4] = s[4];
+ // s6.s[5] = s[8];
+ // s6.s[6] = s[3];
+ // s6.s[7] = s[6];
+ // s6.s[8] = s[7];
+
+ return {s1, s3, s5};
+ // return {s0, s1, s2, s3, s4, s5, s6};
}
std::vector<square3> combo() const noexcept {
- std::vector<square3> c{*this};
+ std::vector<square3> c{*this, flip()};
for (auto&& s : rotate()) {
c.emplace_back(s);
- }
- for (auto&& s : flip()) {
- c.emplace_back(s);
+ c.emplace_back(s.flip());
}
return c;
}