diff options
author | kaiwu <kaiwu2004@gmail.com> | 2023-02-16 15:14:51 +0800 |
---|---|---|
committer | kaiwu <kaiwu2004@gmail.com> | 2023-02-16 15:14:51 +0800 |
commit | 89c52c14c90bc32565c7cff44abd7ddb1c51bce1 (patch) | |
tree | fc0b573f667311128f49ab092abd2fbfe92cbe87 | |
parent | c8529be0622c31ff6a88d10e0bf73a39163af1fa (diff) | |
download | advent-of-code-89c52c14c90bc32565c7cff44abd7ddb1c51bce1.tar.gz advent-of-code-89c52c14c90bc32565c7cff44abd7ddb1c51bce1.zip |
2017 day21 flip
-rw-r--r-- | src/2017/day21/aoc.cpp | 1 | ||||
-rw-r--r-- | src/2017/day21/aoc.h | 121 |
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; } |