diff options
author | kaiwu <kaiwu2004@gmail.com> | 2022-04-14 22:42:10 +0800 |
---|---|---|
committer | kaiwu <kaiwu2004@gmail.com> | 2022-04-14 22:42:10 +0800 |
commit | 5221877e962e70625921c2084c8a42996050aa94 (patch) | |
tree | 3f51aba7202744ca44ad6be24b18ee6b7125baed /src | |
parent | 9dcf63c0a3c8cfd0b1c1d6b335d38524775cd933 (diff) | |
download | advent-of-code-5221877e962e70625921c2084c8a42996050aa94.tar.gz advent-of-code-5221877e962e70625921c2084c8a42996050aa94.zip |
2016 2017 day6
Diffstat (limited to 'src')
-rw-r--r-- | src/2016/day6/aoc.cpp | 22 | ||||
-rw-r--r-- | src/2016/day6/aoc.h | 2 | ||||
-rw-r--r-- | src/2017/day6/aoc.cpp | 13 | ||||
-rw-r--r-- | src/2017/day6/aoc.h | 4 |
4 files changed, 27 insertions, 14 deletions
diff --git a/src/2016/day6/aoc.cpp b/src/2016/day6/aoc.cpp index 521ca55..02478fd 100644 --- a/src/2016/day6/aoc.cpp +++ b/src/2016/day6/aoc.cpp @@ -6,20 +6,26 @@ struct counter { int az[26] = {0}; void add(char c) { az[c - 'a'] += 1; } - char most() { + std::pair<char, char> minmax() const noexcept { int max{INT32_MIN}; - int index{0}; + int min{INT32_MAX}; + int i1{0}; + int i2{0}; for (int i = 0; i < 26; i++) { - if (az[i] > max) { + if (az[i] > 0 && az[i] > max) { max = az[i]; - index = i; + i1 = i; + } + if (az[i] > 0 && az[i] < min) { + min = az[i]; + i2 = i; } } - return 'a' + index; + return {'a' + i1, 'a' + i2}; } }; -void day6(line_view file, char msg[]) { +void day6(line_view file, char msg1[], char msg2[]) { counter cs[8]; per_line(file, [&cs](line_view lv) { const char* p = lv.line; @@ -34,7 +40,9 @@ void day6(line_view file, char msg[]) { }); for (size_t i = 0; i < ARRAY_SIZE(cs); i++) { - msg[i] = cs[i].most(); + auto p = cs[i].minmax(); + msg1[i] = p.first; + msg2[i] = p.second; } } diff --git a/src/2016/day6/aoc.h b/src/2016/day6/aoc.h index 2ab2c4c..28bd318 100644 --- a/src/2016/day6/aoc.h +++ b/src/2016/day6/aoc.h @@ -3,5 +3,5 @@ namespace aoc2016 { -void day6(line_view, char[]); +void day6(line_view, char[], char[]); } diff --git a/src/2017/day6/aoc.cpp b/src/2017/day6/aoc.cpp index 66511fd..c77e74f 100644 --- a/src/2017/day6/aoc.cpp +++ b/src/2017/day6/aoc.cpp @@ -3,7 +3,7 @@ namespace aoc2017 { -void next(int* step, memory_bank& m, std::set<memory_bank>& ms) { +void next(int* step, int* gap, memory_bank& m, std::set<memory_bank>& ms) { if (ms.find(m) == ms.end()) { ms.insert(m); *step += 1; @@ -11,16 +11,19 @@ void next(int* step, memory_bank& m, std::set<memory_bank>& ms) { int i = m.highest(&d); // printf("%d %d %d\n", *step, i, d); m.distribute(i, d); - next(step, m, ms); + next(step, gap, m, ms); } + auto it = ms.find(m); + *gap = *step - it->index; } -int day6(line_view file) { +std::pair<int, int> day6(line_view file) { std::set<memory_bank> ms; memory_bank m{file}; int steps{0}; - next(&steps, m, ms); - return steps; + int gap{0}; + next(&steps, &gap, m, ms); + return {steps, gap}; } } // namespace aoc2017 diff --git a/src/2017/day6/aoc.h b/src/2017/day6/aoc.h index 8e8f043..328f382 100644 --- a/src/2017/day6/aoc.h +++ b/src/2017/day6/aoc.h @@ -5,6 +5,7 @@ namespace aoc2017 { struct memory_bank { int banks[16]; + int index = 0; void get_number(const char** pp, int* d) { const char* p = *pp; @@ -59,9 +60,10 @@ struct memory_bank { banks[i] += 1; x -= 1; } + index += 1; } }; -int day6(line_view); +std::pair<int, int> day6(line_view); } // namespace aoc2017 |