aboutsummaryrefslogtreecommitdiff
path: root/advent-of-code/2022/09
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2024-01-27 14:28:51 +0800
committerMistivia <i@mistivia.com>2024-01-27 14:28:51 +0800
commit087a111b3417cbda03a3453b3d16dd4d1cf54a9e (patch)
tree000a15054865c3fb974970238568bb1d81a3f29e /advent-of-code/2022/09
parent203658f4a5b8649d0142ab8ff6440eb0eefa48e9 (diff)
add aoc 2022
Diffstat (limited to 'advent-of-code/2022/09')
-rw-r--r--advent-of-code/2022/09/1.c91
-rw-r--r--advent-of-code/2022/09/2.c106
-rw-r--r--advent-of-code/2022/09/Makefile12
-rw-r--r--advent-of-code/2022/09/input2001
4 files changed, 2210 insertions, 0 deletions
diff --git a/advent-of-code/2022/09/1.c b/advent-of-code/2022/09/1.c
new file mode 100644
index 0000000..e23a089
--- /dev/null
+++ b/advent-of-code/2022/09/1.c
@@ -0,0 +1,91 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <htable.h>
+#include <crc32.h>
+
+typedef struct {
+ int x;
+ int y;
+} Point;
+
+uint32_t point_hash(void *point) {
+ return crc32(0, point, sizeof(Point));
+}
+
+bool point_eq(void *x, void *y) {
+ Point *a = x, *b = y;
+ return (a->x == b->x) && (a->y == b->y);
+}
+
+typedef struct {
+ Point head;
+ Point tail;
+} State;
+
+bool is_adjacent(Point p1, Point p2) {
+ if (abs(p1.x - p2.x) <= 1 && abs(p2.y - p1.y) <= 1) {
+ return true;
+ }
+ return false;
+}
+
+void run_impl(State *s, HTable *record, int dx, int dy) {
+ Point new = {s->head.x + dx, s->head.y + dy};
+ if (!is_adjacent(s->tail, new)) {
+ s->tail = s->head;
+ htable_insert(record , &(s->tail));
+ }
+ s->head = new;
+}
+
+void run(State *s, HTable *record, char direction, int step) {
+ int dx, dy;
+ switch (direction) {
+ case 'U':
+ dx = 0; dy = 1;
+ break;
+ case 'D':
+ dx = 0; dy = -1;
+ break;
+ case 'L':
+ dx = -1; dy = 0;
+ break;
+ case 'R':
+ dx = 1; dy = 0;
+ break;
+ default:
+ return;
+ }
+ for (int i = 0; i < step; i++) {
+ run_impl(s, record, dx, dy);
+ }
+}
+
+int count_htable(HTable *ht) {
+ int count = 0;
+ for (void *iter = htable_begin(ht);
+ iter != NULL;
+ iter = htable_next(ht, iter)) {
+ count++;
+ }
+ return count;
+}
+
+int main() {
+ FILE *fp = fopen("input", "r");
+ State state;
+ state.head = (Point){0, 0};
+ state.tail = (Point){0, 0};
+ char direction;
+ int step;
+ HTable record;
+ htable_init(&record, sizeof(Point), -1, point_hash, point_eq);
+ while (fscanf(fp, "%c %d", &direction, &step) != EOF) {
+ run(&state, &record, direction, step);
+ }
+ int count = count_htable(&record);
+ printf("%d\n", count);
+ return 0;
+}
+
diff --git a/advent-of-code/2022/09/2.c b/advent-of-code/2022/09/2.c
new file mode 100644
index 0000000..7659e9b
--- /dev/null
+++ b/advent-of-code/2022/09/2.c
@@ -0,0 +1,106 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <htable.h>
+#include <crc32.h>
+
+typedef struct {
+ int x;
+ int y;
+} Point;
+
+uint32_t point_hash(void *point) {
+ return crc32(0, point, sizeof(Point));
+}
+
+bool point_eq(void *x, void *y) {
+ Point *a = x, *b = y;
+ return (a->x == b->x) && (a->y == b->y);
+}
+
+typedef struct {
+ Point knots[10];
+} State;
+
+bool is_adjacent(Point p1, Point p2) {
+ if (abs(p1.x - p2.x) <= 1 && abs(p2.y - p1.y) <= 1) {
+ return true;
+ }
+ return false;
+}
+
+Point catchup(Point prev, Point new) {
+ int dx = new.x - prev.x;
+ int dy = new.y - prev.y;
+ int cx = 0, cy = 0;
+ if (dx > 0) cx = 1;
+ if (dx < 0) cx = -1;
+ if (dy > 0) cy = 1;
+ if (dy < 0) cy = -1;
+ return (Point){prev.x + cx, prev.y + cy};
+}
+
+void run_impl(State *s, HTable *record, int dx, int dy) {
+ s->knots[0].x += dx;
+ s->knots[0].y += dy;
+ for (int i = 1; i < 10; i++) {
+ if (is_adjacent(s->knots[i], s->knots[i-1])) {
+ continue;
+ }
+ s->knots[i] = catchup(s->knots[i], s->knots[i-1]);
+ if (i == 9) {
+ htable_insert(record , &(s->knots[i]));
+ }
+ }
+}
+
+void run(State *s, HTable *record, char direction, int step) {
+ int dx, dy;
+ switch (direction) {
+ case 'U':
+ dx = 0; dy = 1;
+ break;
+ case 'D':
+ dx = 0; dy = -1;
+ break;
+ case 'L':
+ dx = -1; dy = 0;
+ break;
+ case 'R':
+ dx = 1; dy = 0;
+ break;
+ default:
+ return;
+ }
+ for (int i = 0; i < step; i++) {
+ run_impl(s, record, dx, dy);
+ }
+}
+
+int count_htable(HTable *ht) {
+ int count = 0;
+ for (void *iter = htable_begin(ht);
+ iter != NULL;
+ iter = htable_next(ht, iter)) {
+ Point *p = iter;
+ count++;
+ }
+ return count;
+}
+
+int main() {
+ FILE *fp = fopen("input", "r");
+ State state = {0};
+ char direction;
+ int step;
+ HTable record;
+ htable_init(&record, sizeof(Point), -1, point_hash, point_eq);
+ htable_insert(&record, &state.knots[9]);
+ while (fscanf(fp, "%c %d", &direction, &step) != EOF) {
+ run(&state, &record, direction, step);
+ }
+ int count = count_htable(&record);
+ printf("%d\n", count);
+ return 0;
+}
+
diff --git a/advent-of-code/2022/09/Makefile b/advent-of-code/2022/09/Makefile
new file mode 100644
index 0000000..28d6768
--- /dev/null
+++ b/advent-of-code/2022/09/Makefile
@@ -0,0 +1,12 @@
+all: 1.out 2.out
+LIB=../lib/crc32.c ../lib/htable.c
+
+1.out: 1.c
+ cc -g -I../lib/ $< $(LIB) -o $@
+
+2.out: 2.c
+ cc -g -I../lib/ $< $(LIB) -o $@
+
+.PHONY: clean
+clean:
+ -rm *.out
diff --git a/advent-of-code/2022/09/input b/advent-of-code/2022/09/input
new file mode 100644
index 0000000..b272ede
--- /dev/null
+++ b/advent-of-code/2022/09/input
@@ -0,0 +1,2001 @@
+D 1
+L 2
+D 2
+L 1
+R 1
+D 1
+R 2
+U 1
+R 1
+D 2
+R 1
+L 2
+U 1
+D 2
+R 1
+L 2
+R 1
+U 2
+D 2
+L 1
+U 2
+R 2
+D 1
+R 2
+D 1
+U 2
+D 2
+L 1
+U 1
+R 1
+D 1
+U 1
+D 1
+U 2
+L 2
+R 1
+U 1
+R 2
+L 2
+U 2
+R 1
+L 1
+U 1
+L 2
+R 1
+D 1
+L 1
+D 2
+U 1
+D 1
+R 1
+L 2
+D 1
+R 2
+L 2
+U 1
+D 2
+R 2
+D 1
+U 1
+R 2
+D 1
+L 1
+U 2
+R 2
+D 1
+U 2
+R 1
+D 2
+R 1
+D 1
+U 2
+R 2
+U 1
+R 1
+U 1
+L 1
+U 2
+D 1
+R 2
+D 2
+R 2
+D 1
+L 2
+D 2
+L 1
+R 1
+U 1
+D 2
+L 2
+D 2
+L 1
+D 2
+R 1
+D 1
+R 2
+L 2
+R 2
+D 2
+R 1
+D 2
+R 2
+U 2
+L 2
+R 1
+U 1
+R 1
+U 1
+D 1
+U 1
+R 2
+L 1
+R 1
+D 2
+U 3
+R 1
+L 2
+D 1
+R 3
+U 1
+D 2
+R 1
+D 1
+R 2
+L 1
+R 2
+L 2
+D 3
+R 3
+D 1
+U 2
+D 2
+R 1
+D 2
+R 1
+L 3
+D 1
+L 1
+R 2
+D 3
+R 2
+D 3
+R 3
+L 2
+U 3
+D 3
+L 2
+R 3
+L 1
+U 1
+L 2
+D 2
+U 1
+D 2
+U 1
+D 2
+R 1
+U 1
+D 2
+U 1
+L 1
+R 2
+L 2
+D 3
+U 2
+L 3
+D 2
+U 1
+D 3
+L 1
+U 1
+D 2
+R 2
+U 1
+L 2
+D 3
+L 3
+D 3
+U 1
+R 1
+U 2
+D 1
+R 3
+L 1
+D 1
+U 3
+D 1
+L 2
+U 1
+L 3
+D 2
+L 2
+R 1
+L 3
+U 3
+R 3
+U 1
+R 2
+D 1
+L 3
+U 3
+D 3
+L 2
+D 1
+U 2
+D 2
+U 2
+R 3
+U 2
+L 1
+U 1
+R 2
+L 3
+D 3
+U 3
+R 1
+L 1
+U 1
+D 1
+U 2
+R 1
+D 3
+L 1
+R 3
+L 4
+D 3
+R 2
+U 3
+R 1
+L 4
+R 1
+L 3
+R 3
+U 2
+D 1
+L 3
+D 4
+U 4
+L 3
+U 4
+R 4
+L 1
+R 4
+D 1
+R 1
+L 3
+R 3
+L 1
+R 4
+D 2
+L 3
+D 2
+U 1
+R 3
+D 2
+L 3
+R 4
+L 3
+U 3
+D 3
+R 1
+D 2
+U 4
+L 1
+R 1
+L 4
+R 3
+U 1
+L 4
+R 1
+U 3
+R 1
+L 1
+U 3
+R 3
+U 2
+R 2
+L 4
+U 1
+R 1
+D 3
+L 2
+D 1
+L 3
+R 3
+D 3
+L 4
+U 2
+L 3
+U 4
+L 2
+U 2
+D 4
+L 3
+D 1
+U 2
+L 3
+R 4
+U 1
+L 4
+R 4
+L 3
+U 2
+D 4
+L 1
+R 3
+D 2
+L 3
+U 1
+L 3
+U 4
+R 2
+U 2
+R 1
+D 2
+L 4
+R 3
+D 2
+L 3
+U 3
+D 3
+L 1
+D 4
+R 3
+U 1
+R 3
+L 1
+U 3
+R 2
+D 3
+L 3
+U 3
+L 3
+D 5
+U 4
+L 5
+D 2
+R 1
+D 2
+U 5
+R 1
+U 2
+D 2
+R 4
+U 2
+L 3
+U 2
+R 5
+D 4
+L 3
+U 3
+D 1
+R 2
+L 3
+U 1
+R 5
+D 1
+U 2
+R 1
+U 3
+L 2
+U 5
+R 4
+D 5
+L 4
+D 4
+L 2
+U 4
+R 5
+L 1
+D 1
+R 2
+U 2
+D 5
+R 2
+U 4
+L 3
+D 2
+R 4
+L 1
+R 1
+L 2
+U 4
+D 4
+R 5
+D 3
+R 1
+D 4
+L 4
+U 5
+L 2
+U 2
+L 3
+R 4
+U 5
+L 4
+U 2
+D 1
+R 2
+U 4
+L 1
+U 3
+R 1
+U 5
+D 5
+U 4
+D 3
+L 3
+U 3
+D 2
+U 4
+R 3
+D 1
+U 5
+D 3
+R 1
+U 2
+R 1
+D 4
+R 4
+L 4
+U 1
+L 5
+R 3
+D 2
+U 2
+L 5
+R 1
+L 1
+U 3
+D 4
+R 5
+L 4
+D 5
+L 2
+U 1
+D 1
+U 3
+R 4
+D 4
+L 4
+U 3
+L 2
+D 2
+L 5
+U 1
+R 6
+U 4
+R 3
+D 2
+R 6
+D 2
+R 6
+L 3
+R 4
+L 3
+D 5
+U 2
+R 5
+L 5
+R 4
+U 6
+R 6
+D 1
+U 4
+D 4
+L 3
+D 2
+U 5
+R 2
+U 5
+D 2
+U 3
+R 2
+D 5
+R 2
+D 6
+R 1
+U 5
+D 2
+L 6
+U 2
+L 4
+R 6
+L 6
+D 6
+L 3
+D 5
+L 1
+R 5
+D 4
+L 4
+U 1
+R 3
+D 6
+R 6
+U 2
+R 4
+D 1
+R 4
+U 4
+L 6
+U 6
+D 6
+R 2
+D 2
+L 4
+R 6
+L 1
+U 5
+D 4
+U 4
+R 3
+U 1
+D 3
+R 6
+D 4
+U 5
+R 3
+D 5
+R 5
+D 4
+U 4
+D 3
+U 6
+L 1
+D 4
+U 6
+L 3
+R 3
+D 6
+U 4
+R 3
+L 3
+R 1
+D 6
+R 4
+U 2
+R 6
+L 3
+D 3
+L 4
+R 3
+L 4
+R 3
+U 4
+R 3
+D 4
+R 6
+D 2
+U 1
+D 2
+L 3
+D 4
+L 1
+D 5
+L 6
+U 4
+L 7
+R 6
+U 7
+R 7
+L 5
+D 1
+U 3
+R 6
+U 6
+R 2
+U 5
+R 4
+U 7
+R 1
+L 3
+D 7
+L 4
+D 6
+U 1
+L 1
+R 3
+D 2
+L 5
+R 1
+U 1
+L 1
+R 6
+L 6
+D 2
+U 3
+L 6
+R 6
+L 3
+D 3
+R 2
+L 1
+U 5
+R 6
+D 2
+L 5
+U 1
+D 4
+R 3
+L 6
+R 2
+L 4
+D 4
+R 5
+D 3
+R 2
+L 5
+U 7
+D 5
+L 3
+R 2
+D 5
+U 5
+D 2
+U 2
+L 2
+R 5
+L 2
+D 5
+R 3
+U 4
+R 4
+D 1
+L 6
+U 2
+R 7
+L 3
+U 4
+D 2
+R 5
+L 6
+R 7
+L 1
+U 5
+L 3
+U 7
+D 6
+R 3
+D 3
+U 7
+L 4
+R 2
+U 1
+L 1
+R 6
+D 5
+R 7
+U 4
+D 2
+R 2
+D 4
+L 1
+U 4
+D 2
+R 2
+D 5
+U 7
+D 1
+U 7
+R 3
+U 5
+L 1
+R 7
+L 2
+R 5
+U 5
+R 5
+D 4
+U 5
+L 7
+D 3
+R 5
+L 3
+R 1
+U 8
+L 4
+U 3
+D 4
+U 1
+L 2
+D 5
+L 5
+D 4
+U 3
+L 2
+R 3
+D 6
+L 4
+U 3
+R 1
+U 1
+D 3
+R 5
+D 4
+L 7
+U 7
+R 7
+L 6
+D 7
+U 5
+L 2
+U 4
+R 8
+L 4
+U 4
+R 5
+U 1
+R 1
+D 7
+R 6
+L 8
+R 1
+D 4
+U 5
+R 6
+L 3
+R 7
+L 4
+D 7
+U 8
+R 5
+D 5
+U 4
+L 3
+D 4
+U 1
+L 8
+R 8
+U 2
+L 5
+R 7
+D 5
+L 5
+D 3
+L 5
+U 4
+D 1
+U 6
+R 7
+D 5
+R 4
+D 6
+U 4
+L 5
+D 8
+U 5
+L 7
+D 1
+U 8
+R 3
+U 4
+R 5
+U 7
+R 6
+L 3
+U 4
+L 7
+R 5
+U 6
+L 2
+R 2
+U 7
+R 4
+D 2
+L 2
+D 6
+L 5
+D 5
+L 1
+R 5
+D 1
+U 5
+L 8
+R 3
+D 4
+R 2
+U 2
+L 5
+D 4
+U 7
+D 9
+R 9
+U 9
+R 3
+L 2
+D 8
+U 6
+L 1
+R 1
+D 4
+L 9
+R 9
+L 3
+U 4
+D 7
+U 9
+D 5
+R 8
+D 6
+R 9
+U 2
+R 2
+U 8
+R 5
+U 6
+L 8
+D 7
+L 2
+U 3
+R 3
+U 6
+L 5
+R 4
+D 6
+U 6
+R 6
+D 5
+U 5
+D 6
+L 4
+D 2
+U 6
+L 8
+U 3
+D 6
+U 1
+L 7
+D 6
+R 3
+D 7
+U 6
+D 4
+U 5
+R 3
+D 7
+L 5
+U 6
+L 6
+R 2
+D 7
+L 7
+U 5
+D 9
+R 6
+L 9
+R 1
+L 6
+U 5
+R 4
+U 7
+L 2
+U 5
+L 9
+U 3
+R 2
+L 5
+R 2
+U 6
+L 3
+D 7
+R 9
+D 3
+L 4
+R 2
+D 8
+L 6
+D 9
+L 5
+D 1
+R 8
+D 4
+U 5
+L 7
+D 2
+R 2
+L 7
+D 6
+L 7
+R 1
+D 4
+U 3
+D 3
+U 8
+R 8
+L 3
+D 8
+U 7
+R 4
+D 9
+L 3
+U 10
+L 4
+D 4
+R 7
+U 1
+L 10
+U 10
+R 9
+U 3
+L 3
+R 1
+D 10
+L 4
+U 9
+L 4
+U 7
+L 8
+R 7
+D 1
+U 3
+L 3
+U 2
+R 4
+U 5
+D 9
+L 5
+U 10
+L 2
+U 1
+L 7
+D 9
+L 8
+R 10
+D 7
+U 9
+L 4
+U 10
+L 3
+U 1
+D 1
+L 1
+D 6
+U 8
+R 8
+L 6
+U 9
+L 3
+U 6
+R 6
+U 3
+R 7
+U 2
+D 4
+L 4
+R 8
+D 3
+R 8
+U 2
+R 3
+D 6
+U 4
+R 9
+L 4
+D 4
+L 6
+R 2
+D 10
+L 7
+R 9
+L 7
+D 8
+R 2
+D 2
+U 9
+R 2
+U 1
+R 10
+U 1
+D 2
+U 10
+D 10
+U 5
+R 3
+U 5
+R 10
+L 3
+R 5
+U 5
+L 4
+D 3
+L 7
+D 3
+U 10
+R 7
+L 3
+D 2
+L 1
+D 1
+L 7
+R 2
+L 10
+D 6
+R 4
+L 8
+R 9
+D 5
+L 2
+D 4
+R 1
+L 4
+R 8
+D 5
+R 10
+D 1
+L 10
+D 11
+L 10
+R 4
+L 3
+D 1
+U 4
+L 9
+D 6
+U 2
+R 4
+L 2
+U 5
+D 1
+R 6
+L 5
+U 7
+D 2
+R 5
+D 9
+R 11
+U 9
+D 9
+R 2
+L 9
+D 4
+U 7
+L 10
+D 7
+U 4
+D 1
+U 4
+D 10
+L 8
+D 3
+L 8
+D 8
+R 7
+D 10
+R 5
+U 1
+L 11
+D 2
+L 11
+U 4
+L 8
+D 10
+U 3
+D 11
+R 10
+L 1
+D 2
+U 11
+L 4
+U 2
+L 6
+D 7
+R 10
+L 2
+D 7
+R 9
+U 6
+D 5
+R 9
+U 1
+D 3
+R 8
+D 7
+L 3
+D 8
+U 4
+D 4
+R 8
+L 7
+R 1
+D 3
+U 7
+D 4
+L 10
+R 1
+D 6
+R 1
+L 5
+D 2
+L 9
+R 1
+U 5
+D 4
+U 11
+L 6
+R 11
+D 11
+R 6
+U 9
+R 1
+L 5
+U 3
+R 10
+L 8
+R 6
+L 2
+R 8
+D 11
+L 5
+R 3
+L 1
+R 3
+L 8
+R 10
+U 2
+R 2
+D 7
+L 9
+U 2
+L 8
+D 3
+U 1
+L 11
+D 1
+U 6
+L 2
+R 7
+D 5
+R 1
+D 11
+U 12
+D 10
+L 11
+U 3
+D 10
+L 6
+U 3
+D 12
+R 4
+D 9
+R 2
+U 12
+R 11
+L 2
+R 7
+L 11
+U 12
+R 12
+U 1
+R 2
+D 8
+R 10
+U 2
+D 8
+U 8
+D 5
+U 10
+R 4
+U 8
+D 4
+R 8
+D 8
+R 2
+U 4
+L 10
+D 2
+L 10
+R 2
+D 9
+U 6
+L 2
+D 10
+L 2
+D 11
+R 11
+U 2
+L 6
+D 3
+U 3
+R 4
+U 9
+L 9
+R 8
+D 5
+L 9
+U 8
+L 11
+D 8
+R 12
+U 1
+D 1
+U 7
+L 11
+U 2
+L 12
+R 11
+U 8
+R 12
+U 11
+L 7
+U 5
+L 4
+R 4
+D 1
+U 6
+D 7
+U 5
+R 5
+U 10
+D 2
+R 9
+L 12
+D 9
+U 6
+L 11
+D 7
+L 6
+D 10
+L 9
+D 11
+R 7
+D 10
+L 1
+R 9
+D 10
+L 1
+U 1
+L 13
+R 10
+D 9
+L 9
+U 7
+L 10
+R 1
+U 12
+R 13
+U 8
+L 9
+U 5
+L 11
+D 11
+U 8
+R 2
+D 2
+R 7
+D 3
+L 3
+R 2
+L 6
+U 11
+L 6
+U 8
+L 11
+U 12
+L 13
+D 4
+L 8
+U 11
+D 9
+U 11
+D 10
+U 4
+D 9
+L 12
+D 6
+L 11
+U 11
+L 1
+D 6
+R 12
+U 9
+D 1
+L 4
+R 9
+L 13
+R 10
+D 9
+L 2
+R 3
+D 10
+L 13
+R 3
+L 8
+R 8
+L 1
+R 5
+L 12
+D 10
+R 6
+U 7
+R 11
+U 11
+R 10
+D 9
+R 12
+D 8
+U 6
+L 8
+D 6
+L 10
+R 2
+L 2
+D 12
+U 12
+R 11
+L 8
+U 2
+R 2
+L 11
+U 11
+L 7
+D 2
+U 2
+L 9
+D 4
+R 2
+U 7
+D 3
+R 1
+D 6
+U 13
+R 11
+D 1
+U 4
+R 9
+D 7
+L 12
+U 12
+L 10
+U 9
+L 1
+D 1
+U 6
+L 1
+D 13
+U 14
+L 2
+D 6
+U 8
+D 8
+L 9
+D 1
+R 11
+D 6
+L 8
+R 11
+U 4
+L 5
+R 5
+D 10
+U 10
+R 7
+D 7
+L 8
+U 9
+R 1
+L 5
+D 4
+L 13
+D 4
+R 14
+D 13
+R 9
+L 13
+R 7
+L 14
+R 12
+D 1
+U 8
+L 10
+U 7
+D 9
+U 7
+D 13
+L 1
+R 1
+D 14
+L 9
+U 5
+R 7
+U 2
+L 11
+D 5
+U 7
+D 1
+L 13
+U 14
+L 1
+D 3
+R 3
+D 1
+L 3
+U 4
+R 14
+U 11
+R 4
+L 13
+U 3
+R 8
+D 5
+U 8
+L 6
+R 14
+L 3
+D 2
+L 5
+U 11
+R 8
+L 11
+U 8
+D 11
+U 14
+R 14
+L 4
+D 10
+R 11
+U 1
+D 4
+U 11
+D 5
+L 5
+R 14
+U 12
+L 1
+D 4
+R 11
+L 5
+R 9
+U 9
+D 2
+U 12
+D 2
+R 8
+U 6
+L 11
+U 8
+L 6
+U 9
+L 5
+U 3
+D 10
+R 10
+D 6
+U 1
+R 13
+U 5
+R 8
+U 11
+L 11
+D 10
+R 11
+U 2
+D 3
+R 10
+D 2
+L 9
+R 7
+L 8
+U 1
+R 6
+L 3
+D 10
+U 14
+D 4
+U 7
+L 6
+R 8
+U 15
+D 14
+U 5
+D 15
+U 2
+D 4
+L 11
+U 8
+L 10
+U 15
+R 8
+U 14
+D 6
+R 9
+L 15
+R 9
+L 11
+R 3
+D 2
+U 10
+L 12
+D 2
+L 5
+D 1
+R 8
+U 7
+L 7
+D 7
+L 15
+D 11
+U 3
+L 4
+U 10
+L 14
+U 10
+D 10
+U 11
+D 1
+L 3
+R 11
+L 3
+U 10
+L 2
+D 8
+R 8
+L 12
+D 15
+U 10
+L 14
+R 4
+L 9
+R 11
+U 10
+R 7
+D 13
+U 11
+D 10
+R 3
+U 6
+R 9
+L 15
+R 11
+D 6
+R 14
+L 7
+D 7
+L 3
+D 13
+U 10
+R 14
+U 2
+D 4
+U 1
+R 1
+D 8
+R 12
+L 15
+R 4
+L 15
+U 13
+D 12
+L 8
+D 1
+R 3
+U 11
+R 3
+U 2
+R 4
+D 15
+U 4
+L 6
+D 6
+L 9
+D 2
+L 15
+R 5
+U 2
+R 7
+D 7
+U 15
+L 4
+D 7
+R 9
+D 11
+R 8
+L 4
+R 6
+L 11
+U 16
+L 10
+U 10
+L 11
+U 9
+R 8
+U 13
+R 13
+L 5
+R 8
+L 12
+U 11
+L 4
+D 10
+R 2
+U 13
+R 4
+L 15
+D 15
+L 15
+R 16
+L 7
+R 14
+D 5
+L 16
+U 6
+D 3
+L 13
+D 8
+L 11
+U 13
+L 9
+U 6
+L 4
+U 11
+R 1
+L 13
+R 11
+L 13
+R 13
+L 9
+D 15
+R 1
+L 15
+R 14
+L 14
+U 7
+L 1
+R 6
+D 16
+L 2
+R 12
+L 4
+D 12
+R 8
+U 9
+D 10
+R 1
+L 2
+D 5
+L 3
+R 15
+L 8
+D 1
+L 1
+D 8
+U 13
+R 1
+L 2
+D 1
+R 3
+L 6
+U 12
+L 4
+D 13
+U 2
+L 4
+D 10
+R 16
+D 1
+U 1
+L 11
+D 8
+L 12
+R 8
+L 5
+R 1
+D 12
+R 2
+D 7
+U 16
+D 11
+L 15
+R 4
+U 4
+D 4
+U 4
+L 17
+U 3
+D 8
+U 1
+L 1
+U 4
+L 7
+U 9
+L 13
+D 10
+L 2
+U 7
+L 13
+D 16
+U 6
+L 10
+D 16
+L 8
+U 10
+L 6
+U 16
+L 5
+U 4
+R 9
+D 12
+R 1
+U 14
+L 14
+R 16
+D 5
+L 16
+R 14
+U 10
+R 4
+U 9
+L 15
+D 4
+U 15
+L 11
+R 14
+L 10
+D 14
+L 10
+D 12
+R 2
+D 3
+R 1
+U 1
+L 17
+U 9
+D 13
+R 7
+D 7
+U 13
+D 1
+R 14
+U 10
+R 16
+L 17
+R 7
+D 17
+U 11
+L 2
+U 16
+L 8
+U 13
+R 17
+U 5
+L 7
+R 3
+D 17
+L 10
+U 9
+D 16
+R 3
+U 5
+L 15
+R 16
+D 11
+U 9
+L 3
+R 14
+D 4
+L 4
+U 12
+D 9
+U 10
+D 15
+L 12
+R 6
+D 4
+L 14
+D 5
+L 4
+U 7
+R 15
+D 6
+L 15
+U 14
+D 10
+L 3
+D 9
+L 15
+R 9
+U 1
+L 4
+D 15
+U 12
+D 9
+R 8
+D 14
+R 15
+D 7
+U 18
+L 5
+U 6
+L 6
+D 10
+L 18
+R 3
+L 11
+D 10
+L 13
+U 13
+L 13
+R 3
+L 1
+U 3
+D 7
+L 9
+R 6
+U 18
+R 18
+U 15
+R 9
+U 4
+R 12
+L 12
+D 6
+U 10
+D 13
+L 6
+R 13
+L 13
+D 12
+U 4
+D 15
+L 12
+D 10
+U 12
+R 8
+L 13
+D 11
+L 13
+U 12
+D 5
+U 12
+R 10
+L 9
+U 13
+R 7
+D 2
+L 6
+U 13
+D 15
+R 3
+U 4
+D 5
+L 2
+D 10
+U 7
+L 2
+D 5
+L 5
+D 11
+R 5
+U 18
+L 9
+D 8
+U 12
+R 3
+U 8
+R 14
+D 1
+R 4
+L 5
+D 10
+R 18
+D 2
+R 9
+L 14
+U 4
+R 15
+D 4
+R 2
+L 4
+U 13
+R 6
+U 18
+D 4
+U 7
+L 15
+D 1
+L 6
+D 3
+U 15
+L 17
+U 15
+R 14
+L 9
+U 5
+L 4
+U 13
+R 5
+D 17
+U 17
+L 15
+U 14
+R 5
+L 1
+R 9
+U 8
+R 15
+U 18
+L 12
+R 13
+D 15
+R 5
+L 11
+R 5
+U 12
+R 8
+L 6
+R 1
+L 10
+U 17
+L 16
+U 12
+L 14
+D 16
+U 13
+D 18
+L 5
+U 16
+L 11
+D 15
+U 2
+L 9
+D 5
+L 17
+D 17
+L 4
+D 4
+L 19
+R 6
+D 6
+U 18
+R 16
+U 12
+D 2
+L 4
+U 19
+R 6
+U 1
+D 15
+R 13
+U 18
+D 12
+L 9
+U 1
+R 13
+D 18
+L 4
+D 17
+L 9
+D 8
+U 3
+D 5
+R 7
+L 16
+U 3
+L 1
+D 13
+R 17
+D 8
+R 9
+U 17
+L 2
+U 17
+D 16
+L 8
+R 9
+D 7
+L 16
+R 10
+L 16
+D 10
+L 15
+U 17
+L 2
+U 10
+D 16
+R 1
+L 2
+D 4
+R 13
+L 12
+D 8
+U 10
+L 6
+D 14
+L 6
+D 11
+R 1
+D 10
+L 18
+D 12
+R 14
+L 3
+D 7
+L 12
+R 19
+U 5
+R 19
+D 3
+L 15
+U 13
+