aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkaiwu <kaiwu2004@gmail.com>2022-04-14 22:42:10 +0800
committerkaiwu <kaiwu2004@gmail.com>2022-04-14 22:42:10 +0800
commit5221877e962e70625921c2084c8a42996050aa94 (patch)
tree3f51aba7202744ca44ad6be24b18ee6b7125baed /src
parent9dcf63c0a3c8cfd0b1c1d6b335d38524775cd933 (diff)
downloadadvent-of-code-5221877e962e70625921c2084c8a42996050aa94.tar.gz
advent-of-code-5221877e962e70625921c2084c8a42996050aa94.zip
2016 2017 day6
Diffstat (limited to 'src')
-rw-r--r--src/2016/day6/aoc.cpp22
-rw-r--r--src/2016/day6/aoc.h2
-rw-r--r--src/2017/day6/aoc.cpp13
-rw-r--r--src/2017/day6/aoc.h4
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