aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkaiwu <kaiwu2004@gmail.com>2022-04-10 22:43:23 +0800
committerkaiwu <kaiwu2004@gmail.com>2022-04-10 22:43:23 +0800
commit4a1e85f964a4079f138b52b5e55b97dfb426b7e5 (patch)
tree334d6493791dfe0e907e451aeeceee02ed8645ea /src
parentac146284fd54e11c7657a39f45fe8cc0213ebeb7 (diff)
downloadadvent-of-code-4a1e85f964a4079f138b52b5e55b97dfb426b7e5.tar.gz
advent-of-code-4a1e85f964a4079f138b52b5e55b97dfb426b7e5.zip
2018 day5
Diffstat (limited to 'src')
-rw-r--r--src/2018/day5/aoc.cpp37
-rw-r--r--src/2018/day5/aoc.h2
2 files changed, 36 insertions, 3 deletions
diff --git a/src/2018/day5/aoc.cpp b/src/2018/day5/aoc.cpp
index 5b6d3cb..4ce6e5c 100644
--- a/src/2018/day5/aoc.cpp
+++ b/src/2018/day5/aoc.cpp
@@ -52,12 +52,45 @@ void deduct(char* p1, char* p2) {
char* pb = p + 1;
deduct(&pa, &pb, p1, p2);
p = pb;
+ } else if (*p == ' ') {
+ char* pa = p - 1;
+ while (*p == ' ')
+ p++;
+ char* pb = p;
+ deduct(&pa, &pb, p1, p2);
+ p = pb;
} else {
p++;
}
}
}
+void remove(char* p1, char* p2, char c) {
+ while (p1 < p2) {
+ if (*p1 == c || *p1 == c - 32) {
+ *p1 = ' ';
+ }
+ p1++;
+ }
+}
+
+int shortest(line_view file) {
+ int s{INT32_MAX};
+ for (char i = 'a'; i <= 'z'; i++) {
+ char* p1 = (char*)malloc(file.length);
+ memcpy(p1, file.line, file.length);
+ char* p2 = p1 + file.length;
+ remove(p1, p2, i);
+ deduct(p1, p2);
+ int c = count({p1, p2});
+ if (c < s) {
+ s = c;
+ }
+ free(p1);
+ }
+ return s;
+}
+
void print(char* p1, char* p2) {
while (p1 < p2) {
if (*p1 != ' ') {
@@ -68,13 +101,13 @@ void print(char* p1, char* p2) {
printf("\n");
}
-int day5(line_view file) {
+std::pair<int, int> day5(line_view file) {
char* p1 = (char*)malloc(file.length);
memcpy(p1, file.line, file.length);
char* p2 = p1 + file.length;
deduct(p1, p2);
// print(p1, p2);
- return count({p1, p2});
+ return {count({p1, p2}), shortest(file)};
}
} // namespace aoc2018
diff --git a/src/2018/day5/aoc.h b/src/2018/day5/aoc.h
index a6d2d5c..3c49886 100644
--- a/src/2018/day5/aoc.h
+++ b/src/2018/day5/aoc.h
@@ -4,5 +4,5 @@
namespace aoc2018 {
-int day5(line_view);
+std::pair<int, int> day5(line_view);
}