diff options
Diffstat (limited to 'advent-of-code/2022/09')
| -rw-r--r-- | advent-of-code/2022/09/1.c | 91 | ||||
| -rw-r--r-- | advent-of-code/2022/09/2.c | 106 | ||||
| -rw-r--r-- | advent-of-code/2022/09/Makefile | 12 | ||||
| -rw-r--r-- | advent-of-code/2022/09/input | 2001 |
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 + |
