aboutsummaryrefslogtreecommitdiff
path: root/src/2017/day10/aoc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/2017/day10/aoc.cpp')
-rw-r--r--src/2017/day10/aoc.cpp57
1 files changed, 33 insertions, 24 deletions
diff --git a/src/2017/day10/aoc.cpp b/src/2017/day10/aoc.cpp
index 1e8461e..8b652b1 100644
--- a/src/2017/day10/aoc.cpp
+++ b/src/2017/day10/aoc.cpp
@@ -20,14 +20,14 @@ knot* make_knot(int n) {
return k;
}
-static void print(knot* k) {
- knot* n = k;
- do {
- printf("%d ", n->val);
- n = n->next;
- } while (n != k);
- printf("\n");
-}
+// static void print(knot* k) {
+// knot* n = k;
+// do {
+// printf("%d ", n->val);
+// n = n->next;
+// } while (n != k);
+// printf("\n");
+// }
void forward(knot** k, int n) {
knot* x = *k;
@@ -37,8 +37,29 @@ void forward(knot** k, int n) {
*k = x;
}
-// static void reverse(knot* head, knot* tail) {
-// }
+static void reverse(knot* left, knot* right, int d) {
+ while (d-- > 0) {
+ std::swap(left->val, right->val);
+ left = left->next;
+ right = right->prev;
+ }
+}
+
+static void reverse(knot* head, int d) {
+ knot* tail = head;
+ int n = d;
+ while (--n > 0) {
+ tail = tail->next;
+ }
+ reverse(head, tail, d / 2);
+}
+
+static void reverse_skip(knot** current, int d) {
+ static int skip = 0;
+ reverse(*current, d);
+ forward(current, d + skip);
+ skip += 1;
+}
static int get_number(const char** pp) {
int d{0};
@@ -51,30 +72,18 @@ static int get_number(const char** pp) {
return d;
}
-static void reverse(knot* head, int d) {}
-
-static void reverse_skip(knot** current, int d) {
- static int skip = 0;
-
- reverse(*current, d);
- forward(current, d + skip);
- skip += 1;
-}
-
std::pair<int64_t, int64_t> day10(line_view file) {
+ // knot* k = make_knot(5); // demo
knot* k = make_knot(256);
const char* p = file.line;
knot* current = k;
- print(current);
while (p < file.line + file.length) {
int d = get_number(&p);
- // printf("%d\n", d);
reverse_skip(&current, d);
p++;
}
- print(current);
- return {0, 0};
+ return {k->val * k->next->val, 0};
}
} // namespace aoc2017