diff options
author | kaiwu <kaiwu2004@gmail.com> | 2022-03-27 12:08:53 +0800 |
---|---|---|
committer | kaiwu <kaiwu2004@gmail.com> | 2022-03-27 12:08:53 +0800 |
commit | 6dcf2ca56136c76dd3e72553791db9df5e10a585 (patch) | |
tree | bc87dc5f9919c1d9075587128d4471badd06e107 /src/2015/day19/aoc.cpp | |
parent | f01ca26994a0787a8f874bfbe82c4bf0d646dbbc (diff) | |
download | advent-of-code-6dcf2ca56136c76dd3e72553791db9df5e10a585.tar.gz advent-of-code-6dcf2ca56136c76dd3e72553791db9df5e10a585.zip |
day19 done, the ugliest code ever written
Diffstat (limited to 'src/2015/day19/aoc.cpp')
-rw-r--r-- | src/2015/day19/aoc.cpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/2015/day19/aoc.cpp b/src/2015/day19/aoc.cpp index 019a120..68f5f52 100644 --- a/src/2015/day19/aoc.cpp +++ b/src/2015/day19/aoc.cpp @@ -16,16 +16,20 @@ std::pair<int, int> day19(line_view file) { int steps = 0; line_view lv = m.original; + std::vector<molecule::pattern> ps; do { lv = m.replace(lv, &steps); - printf("%d\n", steps); + // printf("%d\n", steps); - std::vector<molecule::pattern> ps; + ps.clear(); const char* x = nullptr; m.parse_pattern(lv, 0, ps, &x); - std::for_each(ps.begin(), ps.end(), - [](molecule::pattern p) { std::cout << p.depth << " -> " << p.lv << std::endl; }); + // std::for_each(ps.begin(), ps.end(), + // [](molecule::pattern p) { std::cout << p.depth << " -> " << p.lv << std::endl; }); + if (ps[0].lv == "e") { + break; + } if (ps[0].lv.contains("Y")) { std::vector<line_view> ys; m.parse_y(ps[0].lv, ys); @@ -38,11 +42,15 @@ std::pair<int, int> day19(line_view file) { } } else { line_view to = m.deduce(ps[0].lv, &steps); - lv = m.replace(lv, {ps[0].lv, to}, ps[0].lv.line); + if (!(to == ps[0].lv)) { + lv = m.replace(lv, {ps[0].lv, to}, ps[0].lv.line); + } else { + lv = m.deduce(lv, ps[0].lv.line - 2, &steps); + } } } while (true); - return {m.distinct(changes), 0}; + return {m.distinct(changes), steps}; } } // namespace aoc2015 |