commit62c49540721a687a0ad0f81c2dffc64ce74dbc14parenta16869892ffbd4a43473e5ffd0cce452287a1ae5Author:aabacchus <ben@bvnf.space>Date:Mon, 5 Dec 2022 19:03:27 +0000 22.5 in C (cheated initialisation parsing)Diffstat:

A | 2022/05/Makefile | | | 10 | ++++++++++ |

A | 2022/05/a.c | | | 132 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |

A | 2022/05/b.c | | | 129 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |

A | 2022/05/input | | | 513 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |

A | 2022/05/input-modified | | | 503 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |

5 files changed, 1287 insertions(+), 0 deletions(-)diff --git a/2022/05/Makefile b/2022/05/Makefile@@ -0,0 +1,10 @@ +.POSIX: + +CFLAGS = -Wall -Wextra -pedantic -Og -g -D_XOPEN_SOURCE=500 + +all: a b +a: a.c +b: b.c + +clean: + rm -f a bdiff --git a/2022/05/a.c b/2022/05/a.c@@ -0,0 +1,132 @@ +#include <assert.h> +#include <stdio.h> +#include <stdlib.h> + +#define NUM_STACKS 9 + +struct stack { + char c; + struct stack *next; +}; + +struct stack *stacks[NUM_STACKS]; + +void +stack_init(unsigned n) { + /* NULL means bottom of the stack. */ + stacks[n-1] = NULL; +} + +char +stack_pop(unsigned n) { + char c; + struct stack *old; + + if (stacks[n-1] == NULL) { + fprintf(stderr, "stack underflow!\n"); + exit(1); + } + + c = stacks[n-1]->c; + old = stacks[n-1]; + stacks[n-1] = stacks[n-1]->next; + free(old); + return c; +} + +void +stack_push(unsigned n, char c) { + struct stack *new = malloc(sizeof (struct stack)); + if (new == NULL) { + perror("malloc"); + exit(1); + } + new->c = c; + new->next = stacks[n-1]; + stacks[n-1] = new; +} + +void +stack_destroy(unsigned n) { + struct stack *j, *i = stacks[n-1]; + while (i != NULL) { + j = i->next; + free(i); + i = j; + } +} + +int +main(int argc, char **argv) { + char *buf = NULL; + size_t buflen = 0; + ssize_t n; + FILE *f; + + for (int i = 1; i <= NUM_STACKS; i++) + stack_init(i); + + if (argc != 2) { + fprintf(stderr, "usage: %s input\n", argv[0]); + return 1; + } + + f = fopen(argv[1], "r"); + if (f == NULL) { + perror(argv[1]); + return 1; + } + + /* initialise stacks */ + char inits[][9] = { + "QMGCL", + "RDLCTFHG", + "VJFNMTWR", + "JFDVQP", + "NFMSLBT", + "RNVHCDP", + "HCT", + "GSJVZNHP", + "ZFHG"}; + for (unsigned i = 0; i < sizeof(inits)/sizeof(inits[0]); i++) { + for (int j = 0; inits[i][j] != '\0'; j++) { + stack_push(i+1, inits[i][j]); + } + } + + + while ((n = getline(&buf, &buflen, f)) != -1) { + if (buf[n - 1] == '\n') { + buf[n - 1] = '\0'; + n--; + } + unsigned num_to_move, from, to; + int ret; + if ((ret = sscanf(buf, "move %u from %u to %u", &num_to_move, &from, &to)) != 3) { + fprintf(stderr, "couldn't parse line \"%s\"\n", buf); + free(buf); + exit(1); + } + else if (ret == EOF) { + perror("sscanf"); + free(buf); + exit(1); + } + + for (unsigned i = 0; i < num_to_move; i++) { + char c = stack_pop(from); + stack_push(to, c); + } + } + + free(buf); + fclose(f); + + for (int i = 1; i <= NUM_STACKS; i++) { + printf("%c", stacks[i-1]->c); + stack_destroy(i); + } + printf("\n"); + + return 0; +}diff --git a/2022/05/b.c b/2022/05/b.c@@ -0,0 +1,129 @@ +#include <assert.h> +#include <stdio.h> +#include <stdlib.h> + +#define NUM_STACKS 9 + +struct stack { + char c; + struct stack *next; +}; + +struct stack *stacks[NUM_STACKS]; + +void +stack_init(unsigned n) { + /* NULL means bottom of the stack. */ + stacks[n-1] = NULL; +} + +char +stack_pop(unsigned n) { + char c; + struct stack *old; + + if (stacks[n-1] == NULL) { + fprintf(stderr, "stack underflow!\n"); + exit(1); + } + + c = stacks[n-1]->c; + old = stacks[n-1]; + stacks[n-1] = stacks[n-1]->next; + free(old); + return c; +} + +void +stack_push(unsigned n, char c) { + struct stack *new = malloc(sizeof (struct stack)); + if (new == NULL) { + perror("malloc"); + exit(1); + } + new->c = c; + new->next = stacks[n-1]; + stacks[n-1] = new; +} + +void +stack_destroy(unsigned n) { + struct stack *j, *i = stacks[n-1]; + while (i != NULL) { + j = i->next; + free(i); + i = j; + } +} + +int +main(int argc, char **argv) { + char *buf = NULL; + size_t buflen = 0; + ssize_t n; + FILE *f; + + for (int i = 1; i <= NUM_STACKS; i++) + stack_init(i); + + if (argc != 2) { + fprintf(stderr, "usage: %s input\n", argv[0]); + return 1; + } + + f = fopen(argv[1], "r"); + if (f == NULL) { + perror(argv[1]); + return 1; + } + + /* initialise stacks */ + char inits[][9] = { + "QMGCL", + "RDLCTFHG", + "VJFNMTWR", + "JFDVQP", + "NFMSLBT", + "RNVHCDP", + "HCT", + "GSJVZNHP", + "ZFHG"}; + for (unsigned i = 0; i < sizeof(inits)/sizeof(inits[0]); i++) { + for (int j = 0; inits[i][j] != '\0'; j++) { + stack_push(i+1, inits[i][j]); + } + } + + + while ((n = getline(&buf, &buflen, f)) != -1) { + if (buf[n - 1] == '\n') { + buf[n - 1] = '\0'; + n--; + } + unsigned num_to_move, from, to; + if (sscanf(buf, "move %u from %u to %u", &num_to_move, &from, &to) != 3) { + perror("sscanf"); + free(buf); + exit(1); + } + char to_push[num_to_move]; + for (unsigned i = 0; i < num_to_move; i++) { + char c = stack_pop(from); + to_push[i] = c; + } + for (int i = num_to_move-1; i >= 0; i--) { + stack_push(to, to_push[i]); + } + } + + free(buf); + fclose(f); + + for (int i = 1; i <= NUM_STACKS; i++) { + printf("%c", stacks[i-1]->c); + stack_destroy(i); + } + printf("\n"); + + return 0; +}diff --git a/2022/05/input b/2022/05/input@@ -0,0 +1,513 @@ + [G] [R] [P] + [H] [W] [T] [P] [H] + [F] [T] [P] [B] [D] [N] +[L] [T] [M] [Q] [L] [C] [Z] +[C] [C] [N] [V] [S] [H] [V] [G] +[G] [L] [F] [D] [M] [V] [T] [J] [H] +[M] [D] [J] [F] [F] [N] [C] [S] [F] +[Q] [R] [V] [J] [N] [R] [H] [G] [Z] + 1 2 3 4 5 6 7 8 9 + +move 5 from 8 to 2 +move 2 from 4 to 5 +move 3 from 3 to 9 +move 4 from 1 to 8 +move 5 from 9 to 1 +move 3 from 3 to 8 +move 2 from 4 to 7 +move 6 from 6 to 5 +move 5 from 2 to 4 +move 2 from 9 to 1 +move 1 from 7 to 1 +move 4 from 7 to 3 +move 5 from 1 to 5 +move 3 from 1 to 4 +move 8 from 5 to 3 +move 7 from 3 to 2 +move 10 from 4 to 7 +move 1 from 7 to 3 +move 1 from 6 to 2 +move 3 from 8 to 4 +move 4 from 3 to 2 +move 1 from 1 to 2 +move 4 from 3 to 1 +move 2 from 1 to 7 +move 3 from 5 to 1 +move 7 from 8 to 4 +move 9 from 5 to 1 +move 9 from 2 to 7 +move 6 from 4 to 9 +move 14 from 7 to 5 +move 2 from 1 to 4 +move 6 from 7 to 1 +move 4 from 4 to 9 +move 6 from 2 to 8 +move 2 from 4 to 9 +move 2 from 9 to 3 +move 3 from 8 to 3 +move 5 from 9 to 4 +move 1 from 2 to 9 +move 5 from 5 to 3 +move 3 from 2 to 7 +move 1 from 1 to 4 +move 3 from 7 to 5 +move 4 from 9 to 6 +move 2 from 9 to 3 +move 5 from 1 to 6 +move 7 from 6 to 5 +move 1 from 2 to 3 +move 10 from 1 to 5 +move 1 from 8 to 3 +move 14 from 3 to 7 +move 1 from 8 to 4 +move 2 from 6 to 1 +move 28 from 5 to 9 +move 1 from 2 to 1 +move 5 from 4 to 6 +move 2 from 4 to 3 +move 13 from 7 to 8 +move 1 from 3 to 5 +move 1 from 5 to 2 +move 1 from 3 to 6 +move 1 from 5 to 6 +move 22 from 9 to 1 +move 1 from 2 to 7 +move 3 from 9 to 5 +move 2 from 7 to 5 +move 18 from 1 to 4 +move 7 from 8 to 3 +move 4 from 6 to 8 +move 2 from 5 to 8 +move 5 from 3 to 9 +move 2 from 5 to 1 +move 3 from 6 to 8 +move 1 from 5 to 9 +move 2 from 3 to 6 +move 10 from 1 to 5 +move 15 from 8 to 6 +move 10 from 6 to 8 +move 1 from 9 to 4 +move 1 from 1 to 3 +move 4 from 4 to 3 +move 5 from 3 to 5 +move 9 from 5 to 6 +move 13 from 6 to 5 +move 8 from 5 to 7 +move 8 from 9 to 6 +move 2 from 6 to 4 +move 2 from 6 to 2 +move 3 from 7 to 4 +move 2 from 2 to 8 +move 1 from 5 to 4 +move 3 from 7 to 9 +move 1 from 5 to 9 +move 5 from 6 to 9 +move 10 from 8 to 3 +move 3 from 8 to 1 +move 5 from 9 to 2 +move 1 from 6 to 4 +move 4 from 5 to 6 +move 7 from 3 to 7 +move 5 from 6 to 5 +move 19 from 4 to 8 +move 15 from 8 to 3 +move 2 from 1 to 5 +move 7 from 5 to 9 +move 2 from 7 to 2 +move 3 from 3 to 8 +move 5 from 5 to 8 +move 10 from 9 to 3 +move 1 from 4 to 2 +move 10 from 8 to 3 +move 29 from 3 to 2 +move 2 from 3 to 4 +move 1 from 1 to 5 +move 2 from 8 to 4 +move 1 from 9 to 1 +move 1 from 3 to 9 +move 1 from 1 to 9 +move 2 from 3 to 4 +move 33 from 2 to 1 +move 2 from 2 to 4 +move 1 from 3 to 1 +move 22 from 1 to 2 +move 6 from 4 to 9 +move 4 from 7 to 1 +move 16 from 1 to 4 +move 3 from 7 to 6 +move 2 from 9 to 4 +move 1 from 5 to 2 +move 9 from 4 to 2 +move 1 from 6 to 5 +move 7 from 4 to 2 +move 6 from 9 to 8 +move 4 from 4 to 9 +move 4 from 8 to 3 +move 2 from 4 to 3 +move 2 from 2 to 5 +move 2 from 5 to 2 +move 1 from 5 to 6 +move 3 from 9 to 5 +move 1 from 6 to 8 +move 2 from 6 to 5 +move 1 from 3 to 2 +move 1 from 8 to 4 +move 2 from 8 to 2 +move 5 from 5 to 6 +move 44 from 2 to 8 +move 1 from 4 to 8 +move 3 from 6 to 8 +move 2 from 6 to 2 +move 37 from 8 to 3 +move 1 from 9 to 4 +move 1 from 2 to 5 +move 5 from 8 to 6 +move 1 from 4 to 6 +move 1 from 2 to 4 +move 16 from 3 to 2 +move 1 from 4 to 5 +move 1 from 8 to 3 +move 4 from 8 to 2 +move 1 from 8 to 7 +move 2 from 5 to 8 +move 15 from 2 to 4 +move 5 from 6 to 3 +move 1 from 7 to 4 +move 1 from 8 to 9 +move 1 from 6 to 7 +move 1 from 8 to 3 +move 2 from 2 to 8 +move 1 from 9 to 3 +move 2 from 8 to 4 +move 1 from 4 to 6 +move 33 from 3 to 7 +move 1 from 6 to 3 +move 1 from 4 to 8 +move 1 from 8 to 9 +move 4 from 4 to 3 +move 9 from 4 to 7 +move 3 from 4 to 8 +move 11 from 7 to 2 +move 14 from 7 to 6 +move 1 from 8 to 3 +move 1 from 9 to 5 +move 1 from 5 to 1 +move 8 from 2 to 9 +move 1 from 8 to 7 +move 6 from 3 to 6 +move 18 from 6 to 4 +move 1 from 2 to 7 +move 1 from 3 to 6 +move 14 from 4 to 2 +move 4 from 4 to 3 +move 3 from 6 to 3 +move 19 from 2 to 6 +move 16 from 6 to 8 +move 1 from 1 to 8 +move 16 from 8 to 7 +move 3 from 9 to 4 +move 3 from 6 to 2 +move 3 from 4 to 7 +move 4 from 3 to 2 +move 2 from 2 to 4 +move 4 from 9 to 8 +move 5 from 2 to 8 +move 29 from 7 to 5 +move 6 from 8 to 2 +move 2 from 3 to 4 +move 2 from 2 to 6 +move 1 from 3 to 5 +move 4 from 2 to 6 +move 8 from 7 to 5 +move 1 from 7 to 5 +move 2 from 8 to 6 +move 1 from 8 to 7 +move 6 from 6 to 1 +move 2 from 7 to 6 +move 1 from 9 to 7 +move 3 from 1 to 7 +move 3 from 6 to 1 +move 1 from 7 to 6 +move 3 from 1 to 6 +move 1 from 1 to 5 +move 4 from 6 to 3 +move 2 from 4 to 2 +move 38 from 5 to 6 +move 3 from 3 to 8 +move 4 from 8 to 6 +move 22 from 6 to 8 +move 1 from 7 to 8 +move 2 from 6 to 2 +move 2 from 5 to 2 +move 2 from 2 to 1 +move 2 from 4 to 6 +move 2 from 2 to 1 +move 1 from 1 to 9 +move 2 from 8 to 5 +move 2 from 2 to 8 +move 2 from 5 to 2 +move 2 from 7 to 2 +move 1 from 3 to 1 +move 4 from 1 to 8 +move 1 from 9 to 5 +move 1 from 1 to 7 +move 1 from 2 to 8 +move 29 from 8 to 3 +move 15 from 3 to 2 +move 12 from 2 to 5 +move 1 from 1 to 6 +move 3 from 2 to 1 +move 6 from 3 to 8 +move 2 from 3 to 9 +move 1 from 6 to 7 +move 12 from 5 to 8 +move 2 from 7 to 1 +move 2 from 1 to 4 +move 2 from 4 to 2 +move 1 from 5 to 8 +move 1 from 3 to 6 +move 2 from 3 to 4 +move 3 from 1 to 4 +move 5 from 8 to 9 +move 4 from 4 to 2 +move 5 from 9 to 6 +move 26 from 6 to 8 +move 7 from 2 to 8 +move 3 from 3 to 1 +move 1 from 6 to 4 +move 14 from 8 to 6 +move 2 from 1 to 2 +move 1 from 1 to 3 +move 18 from 8 to 5 +move 15 from 8 to 2 +move 5 from 6 to 8 +move 4 from 5 to 8 +move 7 from 2 to 5 +move 2 from 9 to 6 +move 1 from 2 to 1 +move 7 from 2 to 3 +move 7 from 8 to 1 +move 2 from 6 to 3 +move 1 from 4 to 6 +move 2 from 8 to 6 +move 10 from 3 to 9 +move 18 from 5 to 8 +move 1 from 4 to 6 +move 2 from 1 to 9 +move 12 from 6 to 9 +move 1 from 6 to 9 +move 9 from 8 to 4 +move 6 from 1 to 2 +move 3 from 8 to 9 +move 14 from 9 to 8 +move 5 from 4 to 9 +move 2 from 4 to 5 +move 16 from 8 to 5 +move 12 from 5 to 4 +move 7 from 5 to 1 +move 1 from 1 to 8 +move 1 from 5 to 8 +move 1 from 4 to 9 +move 8 from 2 to 7 +move 12 from 4 to 3 +move 2 from 2 to 5 +move 1 from 3 to 2 +move 3 from 5 to 4 +move 1 from 4 to 8 +move 3 from 4 to 9 +move 18 from 9 to 8 +move 8 from 3 to 1 +move 5 from 8 to 1 +move 1 from 2 to 5 +move 3 from 7 to 1 +move 3 from 7 to 5 +move 1 from 8 to 9 +move 5 from 9 to 7 +move 2 from 3 to 6 +move 16 from 1 to 4 +move 14 from 8 to 6 +move 2 from 5 to 6 +move 4 from 1 to 6 +move 3 from 4 to 9 +move 15 from 6 to 1 +move 5 from 4 to 3 +move 2 from 8 to 2 +move 6 from 4 to 3 +move 15 from 1 to 5 +move 14 from 5 to 3 +move 5 from 6 to 2 +move 2 from 4 to 7 +move 1 from 1 to 6 +move 2 from 3 to 4 +move 3 from 8 to 1 +move 1 from 5 to 1 +move 5 from 7 to 1 +move 7 from 1 to 3 +move 3 from 6 to 2 +move 4 from 9 to 5 +move 2 from 4 to 3 +move 4 from 7 to 9 +move 8 from 2 to 9 +move 1 from 9 to 1 +move 2 from 2 to 8 +move 11 from 9 to 1 +move 6 from 5 to 1 +move 21 from 3 to 2 +move 1 from 8 to 5 +move 5 from 1 to 7 +move 12 from 1 to 8 +move 1 from 5 to 2 +move 5 from 3 to 2 +move 4 from 7 to 2 +move 1 from 7 to 8 +move 13 from 2 to 5 +move 13 from 2 to 5 +move 2 from 2 to 1 +move 1 from 1 to 9 +move 26 from 5 to 4 +move 3 from 2 to 7 +move 2 from 3 to 9 +move 1 from 1 to 6 +move 5 from 3 to 2 +move 2 from 9 to 6 +move 1 from 1 to 8 +move 3 from 1 to 6 +move 24 from 4 to 9 +move 13 from 9 to 1 +move 2 from 6 to 2 +move 3 from 7 to 5 +move 2 from 9 to 7 +move 8 from 8 to 3 +move 4 from 8 to 5 +move 2 from 7 to 2 +move 8 from 9 to 4 +move 10 from 1 to 2 +move 1 from 9 to 1 +move 1 from 9 to 2 +move 4 from 3 to 2 +move 4 from 1 to 8 +move 3 from 4 to 8 +move 12 from 2 to 3 +move 3 from 4 to 6 +move 5 from 3 to 2 +move 9 from 3 to 9 +move 4 from 2 to 9 +move 1 from 3 to 7 +move 6 from 8 to 2 +move 4 from 6 to 8 +move 1 from 3 to 8 +move 6 from 9 to 1 +move 2 from 1 to 8 +move 5 from 5 to 8 +move 3 from 6 to 8 +move 1 from 5 to 1 +move 7 from 8 to 2 +move 1 from 1 to 4 +move 1 from 4 to 6 +move 1 from 9 to 4 +move 1 from 5 to 9 +move 1 from 4 to 7 +move 12 from 8 to 2 +move 4 from 4 to 3 +move 2 from 3 to 1 +move 1 from 7 to 2 +move 1 from 6 to 8 +move 1 from 8 to 6 +move 4 from 9 to 3 +move 1 from 9 to 3 +move 13 from 2 to 3 +move 3 from 1 to 7 +move 2 from 9 to 4 +move 2 from 1 to 9 +move 2 from 7 to 2 +move 1 from 4 to 1 +move 2 from 7 to 5 +move 14 from 3 to 8 +move 1 from 8 to 5 +move 2 from 1 to 4 +move 2 from 3 to 4 +move 2 from 3 to 4 +move 10 from 8 to 3 +move 2 from 4 to 8 +move 1 from 9 to 3 +move 3 from 2 to 3 +move 16 from 2 to 4 +move 1 from 8 to 5 +move 11 from 3 to 4 +move 2 from 3 to 7 +move 3 from 5 to 1 +move 1 from 1 to 2 +move 3 from 2 to 5 +move 1 from 1 to 9 +move 2 from 7 to 4 +move 8 from 4 to 3 +move 1 from 6 to 7 +move 1 from 8 to 6 +move 1 from 5 to 1 +move 6 from 3 to 5 +move 2 from 1 to 3 +move 5 from 5 to 7 +move 2 from 7 to 2 +move 2 from 3 to 4 +move 4 from 7 to 1 +move 1 from 6 to 8 +move 1 from 2 to 1 +move 3 from 1 to 6 +move 2 from 9 to 6 +move 8 from 2 to 1 +move 2 from 6 to 2 +move 2 from 6 to 3 +move 6 from 3 to 5 +move 2 from 4 to 6 +move 2 from 2 to 9 +move 1 from 8 to 6 +move 2 from 6 to 5 +move 1 from 9 to 1 +move 11 from 5 to 8 +move 7 from 8 to 6 +move 23 from 4 to 1 +move 1 from 5 to 9 +move 1 from 4 to 6 +move 2 from 4 to 8 +move 1 from 3 to 1 +move 6 from 8 to 3 +move 2 from 9 to 6 +move 3 from 6 to 1 +move 3 from 8 to 7 +move 1 from 3 to 6 +move 18 from 1 to 2 +move 5 from 3 to 8 +move 13 from 2 to 9 +move 5 from 9 to 7 +move 1 from 8 to 6 +move 5 from 2 to 6 +move 2 from 1 to 7 +move 9 from 7 to 8 +move 11 from 8 to 6 +move 2 from 9 to 4 +move 16 from 6 to 1 +move 2 from 4 to 6 +move 1 from 8 to 9 +move 1 from 7 to 6 +move 8 from 1 to 5 +move 3 from 6 to 5 +move 8 from 6 to 4 +move 7 from 9 to 5 +move 1 from 8 to 1 +move 6 from 5 to 1 +move 9 from 5 to 7 +move 4 from 7 to 9 +move 1 from 4 to 8 +move 1 from 8 to 3 +move 1 from 1 to 8 +move 1 from 8 to 7 +move 22 from 1 to 3 +move 1 from 6 to 7 +move 2 from 9 to 4 +move 1 from 9 to 6 +move 1 from 9 to 4 +move 10 from 4 to 3 +move 1 from 1 to 2 +move 2 from 5 to 4 +move 27 from 3 to 8 +move 5 from 3 to 9diff --git a/2022/05/input-modified b/2022/05/input-modified@@ -0,0 +1,503 @@ +move 5 from 8 to 2 +move 2 from 4 to 5 +move 3 from 3 to 9 +move 4 from 1 to 8 +move 5 from 9 to 1 +move 3 from 3 to 8 +move 2 from 4 to 7 +move 6 from 6 to 5 +move 5 from 2 to 4 +move 2 from 9 to 1 +move 1 from 7 to 1 +move 4 from 7 to 3 +move 5 from 1 to 5 +move 3 from 1 to 4 +move 8 from 5 to 3 +move 7 from 3 to 2 +move 10 from 4 to 7 +move 1 from 7 to 3 +move 1 from 6 to 2 +move 3 from 8 to 4 +move 4 from 3 to 2 +move 1 from 1 to 2 +move 4 from 3 to 1 +move 2 from 1 to 7 +move 3 from 5 to 1 +move 7 from 8 to 4 +move 9 from 5 to 1 +move 9 from 2 to 7 +move 6 from 4 to 9 +move 14 from 7 to 5 +move 2 from 1 to 4 +move 6 from 7 to 1 +move 4 from 4 to 9 +move 6 from 2 to 8 +move 2 from 4 to 9 +move 2 from 9 to 3 +move 3 from 8 to 3 +move 5 from 9 to 4 +move 1 from 2 to 9 +move 5 from 5 to 3 +move 3 from 2 to 7 +move 1 from 1 to 4 +move 3 from 7 to 5 +move 4 from 9 to 6 +move 2 from 9 to 3 +move 5 from 1 to 6 +move 7 from 6 to 5 +move 1 from 2 to 3 +move 10 from 1 to 5 +move 1 from 8 to 3 +move 14 from 3 to 7 +move 1 from 8 to 4 +move 2 from 6 to 1 +move 28 from 5 to 9 +move 1 from 2 to 1 +move 5 from 4 to 6 +move 2 from 4 to 3 +move 13 from 7 to 8 +move 1 from 3 to 5 +move 1 from 5 to 2 +move 1 from 3 to 6 +move 1 from 5 to 6 +move 22 from 9 to 1 +move 1 from 2 to 7 +move 3 from 9 to 5 +move 2 from 7 to 5 +move 18 from 1 to 4 +move 7 from 8 to 3 +move 4 from 6 to 8 +move 2 from 5 to 8 +move 5 from 3 to 9 +move 2 from 5 to 1 +move 3 from 6 to 8 +move 1 from 5 to 9 +move 2 from 3 to 6 +move 10 from 1 to 5 +move 15 from 8 to 6 +move 10 from 6 to 8 +move 1 from 9 to 4 +move 1 from 1 to 3 +move 4 from 4 to 3 +move 5 from 3 to 5 +move 9 from 5 to 6 +move 13 from 6 to 5 +move 8 from 5 to 7 +move 8 from 9 to 6 +move 2 from 6 to 4 +move 2 from 6 to 2 +move 3 from 7 to 4 +move 2 from 2 to 8 +move 1 from 5 to 4 +move 3 from 7 to 9 +move 1 from 5 to 9 +move 5 from 6 to 9 +move 10 from 8 to 3 +move 3 from 8 to 1 +move 5 from 9 to 2 +move 1 from 6 to 4 +move 4 from 5 to 6 +move 7 from 3 to 7 +move 5 from 6 to 5 +move 19 from 4 to 8 +move 15 from 8 to 3 +move 2 from 1 to 5 +move 7 from 5 to 9 +move 2 from 7 to 2 +move 3 from 3 to 8 +move 5 from 5 to 8 +move 10 from 9 to 3 +move 1 from 4 to 2 +move 10 from 8 to 3 +move 29 from 3 to 2 +move 2 from 3 to 4 +move 1 from 1 to 5 +move 2 from 8 to 4 +move 1 from 9 to 1 +move 1 from 3 to 9 +move 1 from 1 to 9 +move 2 from 3 to 4 +move 33 from 2 to 1 +move 2 from 2 to 4 +move 1 from 3 to 1 +move 22 from 1 to 2 +move 6 from 4 to 9 +move 4 from 7 to 1 +move 16 from 1 to 4 +move 3 from 7 to 6 +move 2 from 9 to 4 +move 1 from 5 to 2 +move 9 from 4 to 2 +move 1 from 6 to 5 +move 7 from 4 to 2 +move 6 from 9 to 8 +move 4 from 4 to 9 +move 4 from 8 to 3 +move 2 from 4 to 3 +move 2 from 2 to 5 +move 2 from 5 to 2 +move 1 from 5 to 6 +move 3 from 9 to 5 +move 1 from 6 to 8 +move 2 from 6 to 5 +move 1 from 3 to 2 +move 1 from 8 to 4 +move 2 from 8 to 2 +move 5 from 5 to 6 +move 44 from 2 to 8 +move 1 from 4 to 8 +move 3 from 6 to 8 +move 2 from 6 to 2 +move 37 from 8 to 3 +move 1 from 9 to 4 +move 1 from 2 to 5 +move 5 from 8 to 6 +move 1 from 4 to 6 +move 1 from 2 to 4 +move 16 from 3 to 2 +move 1 from 4 to 5 +move 1 from 8 to 3 +move 4 from 8 to 2 +move 1 from 8 to 7 +move 2 from 5 to 8 +move 15 from 2 to 4 +move 5 from 6 to 3 +move 1 from 7 to 4 +move 1 from 8 to 9 +move 1 from 6 to 7 +move 1 from 8 to 3 +move 2 from 2 to 8 +move 1 from 9 to 3 +move 2 from 8 to 4 +move 1 from 4 to 6 +move 33 from 3 to 7 +move 1 from 6 to 3 +move 1 from 4 to 8 +move 1 from 8 to 9 +move 4 from 4 to 3 +move 9 from 4 to 7 +move 3 from 4 to 8 +move 11 from 7 to 2 +move 14 from 7 to 6 +move 1 from 8 to 3 +move 1 from 9 to 5 +move 1 from 5 to 1 +move 8 from 2 to 9 +move 1 from 8 to 7 +move 6 from 3 to 6 +move 18 from 6 to 4 +move 1 from 2 to 7 +move 1 from 3 to 6 +move 14 from 4 to 2 +move 4 from 4 to 3 +move 3 from 6 to 3 +move 19 from 2 to 6 +move 16 from 6 to 8 +move 1 from 1 to 8 +move 16 from 8 to 7 +move 3 from 9 to 4 +move 3 from 6 to 2 +move 3 from 4 to 7 +move 4 from 3 to 2 +move 2 from 2 to 4 +move 4 from 9 to 8 +move 5 from 2 to 8 +move 29 from 7 to 5 +move 6 from 8 to 2 +move 2 from 3 to 4 +move 2 from 2 to 6 +move 1 from 3 to 5 +move 4 from 2 to 6 +move 8 from 7 to 5 +move 1 from 7 to 5 +move 2 from 8 to 6 +move 1 from 8 to 7 +move 6 from 6 to 1 +move 2 from 7 to 6 +move 1 from 9 to 7 +move 3 from 1 to 7 +move 3 from 6 to 1 +move 1 from 7 to 6 +move 3 from 1 to 6 +move 1 from 1 to 5 +move 4 from 6 to 3 +move 2 from 4 to 2 +move 38 from 5 to 6 +move 3 from 3 to 8 +move 4 from 8 to 6 +move 22 from 6 to 8 +move 1 from 7 to 8 +move 2 from 6 to 2 +move 2 from 5 to 2 +move 2 from 2 to 1 +move 2 from 4 to 6 +move 2 from 2 to 1 +move 1 from 1 to 9 +move 2 from 8 to 5 +move 2 from 2 to 8 +move 2 from 5 to 2 +move 2 from 7 to 2 +move 1 from 3 to 1 +move 4 from 1 to 8 +move 1 from 9 to 5 +move 1 from 1 to 7 +move 1 from 2 to 8 +move 29 from 8 to 3 +move 15 from 3 to 2 +move 12 from 2 to 5 +move 1 from 1 to 6 +move 3 from 2 to 1 +move 6 from 3 to 8 +move 2 from 3 to 9 +move 1 from 6 to 7 +move 12 from 5 to 8 +move 2 from 7 to 1 +move 2 from 1 to 4 +move 2 from 4 to 2 +move 1 from 5 to 8 +move 1 from 3 to 6 +move 2 from 3 to 4 +move 3 from 1 to 4 +move 5 from 8 to 9 +move 4 from 4 to 2 +move 5 from 9 to 6 +move 26 from 6 to 8 +move 7 from 2 to 8 +move 3 from 3 to 1 +move 1 from 6 to 4 +move 14 from 8 to 6 +move 2 from 1 to 2 +move 1 from 1 to 3 +move 18 from 8 to 5 +move 15 from 8 to 2 +move 5 from 6 to 8 +move 4 from 5 to 8 +move 7 from 2 to 5 +move 2 from 9 to 6 +move 1 from 2 to 1 +move 7 from 2 to 3 +move 7 from 8 to 1 +move 2 from 6 to 3 +move 1 from 4 to 6 +move 2 from 8 to 6 +move 10 from 3 to 9 +move 18 from 5 to 8 +move 1 from 4 to 6 +move 2 from 1 to 9 +move 12 from 6 to 9 +move 1 from 6 to 9 +move 9 from 8 to 4 +move 6 from 1 to 2 +move 3 from 8 to 9 +move 14 from 9 to 8 +move 5 from 4 to 9 +move 2 from 4 to 5 +move 16 from 8 to 5 +move 12 from 5 to 4 +move 7 from 5 to 1 +move 1 from 1 to 8 +move 1 from 5 to 8 +move 1 from 4 to 9 +move 8 from 2 to 7 +move 12 from 4 to 3 +move 2 from 2 to 5 +move 1 from 3 to 2 +move 3 from 5 to 4 +move 1 from 4 to 8 +move 3 from 4 to 9 +move 18 from 9 to 8 +move 8 from 3 to 1 +move 5 from 8 to 1 +move 1 from 2 to 5 +move 3 from 7 to 1 +move 3 from 7 to 5 +move 1 from 8 to 9 +move 5 from 9 to 7 +move 2 from 3 to 6 +move 16 from 1 to 4 +move 14 from 8 to 6 +move 2 from 5 to 6 +move 4 from 1 to 6 +move 3 from 4 to 9 +move 15 from 6 to 1 +move 5 from 4 to 3 +move 2 from 8 to 2 +move 6 from 4 to 3 +move 15 from 1 to 5 +move 14 from 5 to 3 +move 5 from 6 to 2 +move 2 from 4 to 7 +move 1 from 1 to 6 +move 2 from 3 to 4 +move 3 from 8 to 1 +move 1 from 5 to 1 +move 5 from 7 to 1 +move 7 from 1 to 3 +move 3 from 6 to 2 +move 4 from 9 to 5 +move 2 from 4 to 3 +move 4 from 7 to 9 +move 8 from 2 to 9 +move 1 from 9 to 1 +move 2 from 2 to 8 +move 11 from 9 to 1 +move 6 from 5 to 1 +move 21 from 3 to 2 +move 1 from 8 to 5 +move 5 from 1 to 7 +move 12 from 1 to 8 +move 1 from 5 to 2 +move 5 from 3 to 2 +move 4 from 7 to 2 +move 1 from 7 to 8 +move 13 from 2 to 5 +move 13 from 2 to 5 +move 2 from 2 to 1 +move 1 from 1 to 9 +move 26 from 5 to 4 +move 3 from 2 to 7 +move 2 from 3 to 9 +move 1 from 1 to 6 +move 5 from 3 to 2 +move 2 from 9 to 6 +move 1 from 1 to 8 +move 3 from 1 to 6 +move 24 from 4 to 9 +move 13 from 9 to 1 +move 2 from 6 to 2 +move 3 from 7 to 5 +move 2 from 9 to 7 +move 8 from 8 to 3 +move 4 from 8 to 5 +move 2 from 7 to 2 +move 8 from 9 to 4 +move 10 from 1 to 2 +move 1 from 9 to 1 +move 1 from 9 to 2 +move 4 from 3 to 2 +move 4 from 1 to 8 +move 3 from 4 to 8 +move 12 from 2 to 3 +move 3 from 4 to 6 +move 5 from 3 to 2 +move 9 from 3 to 9 +move 4 from 2 to 9 +move 1 from 3 to 7 +move 6 from 8 to 2 +move 4 from 6 to 8 +move 1 from 3 to 8 +move 6 from 9 to 1 +move 2 from 1 to 8 +move 5 from 5 to 8 +move 3 from 6 to 8 +move 1 from 5 to 1 +move 7 from 8 to 2 +move 1 from 1 to 4 +move 1 from 4 to 6 +move 1 from 9 to 4 +move 1 from 5 to 9 +move 1 from 4 to 7 +move 12 from 8 to 2 +move 4 from 4 to 3 +move 2 from 3 to 1 +move 1 from 7 to 2 +move 1 from 6 to 8 +move 1 from 8 to 6 +move 4 from 9 to 3 +move 1 from 9 to 3 +move 13 from 2 to 3 +move 3 from 1 to 7 +move 2 from 9 to 4 +move 2 from 1 to 9 +move 2 from 7 to 2 +move 1 from 4 to 1 +move 2 from 7 to 5 +move 14 from 3 to 8 +move 1 from 8 to 5 +move 2 from 1 to 4 +move 2 from 3 to 4 +move 2 from 3 to 4 +move 10 from 8 to 3 +move 2 from 4 to 8 +move 1 from 9 to 3 +move 3 from 2 to 3 +move 16 from 2 to 4 +move 1 from 8 to 5 +move 11 from 3 to 4 +move 2 from 3 to 7 +move 3 from 5 to 1 +move 1 from 1 to 2 +move 3 from 2 to 5 +move 1 from 1 to 9 +move 2 from 7 to 4 +move 8 from 4 to 3 +move 1 from 6 to 7 +move 1 from 8 to 6 +move 1 from 5 to 1 +move 6 from 3 to 5 +move 2 from 1 to 3 +move 5 from 5 to 7 +move 2 from 7 to 2 +move 2 from 3 to 4 +move 4 from 7 to 1 +move 1 from 6 to 8 +move 1 from 2 to 1 +move 3 from 1 to 6 +move 2 from 9 to 6 +move 8 from 2 to 1 +move 2 from 6 to 2 +move 2 from 6 to 3 +move 6 from 3 to 5 +move 2 from 4 to 6 +move 2 from 2 to 9 +move 1 from 8 to 6 +move 2 from 6 to 5 +move 1 from 9 to 1 +move 11 from 5 to 8 +move 7 from 8 to 6 +move 23 from 4 to 1 +move 1 from 5 to 9 +move 1 from 4 to 6 +move 2 from 4 to 8 +move 1 from 3 to 1 +move 6 from 8 to 3 +move 2 from 9 to 6 +move 3 from 6 to 1 +move 3 from 8 to 7 +move 1 from 3 to 6 +move 18 from 1 to 2 +move 5 from 3 to 8 +move 13 from 2 to 9 +move 5 from 9 to 7 +move 1 from 8 to 6 +move 5 from 2 to 6 +move 2 from 1 to 7 +move 9 from 7 to 8 +move 11 from 8 to 6 +move 2 from 9 to 4 +move 16 from 6 to 1 +move 2 from 4 to 6 +move 1 from 8 to 9 +move 1 from 7 to 6 +move 8 from 1 to 5 +move 3 from 6 to 5 +move 8 from 6 to 4 +move 7 from 9 to 5 +move 1 from 8 to 1 +move 6 from 5 to 1 +move 9 from 5 to 7 +move 4 from 7 to 9 +move 1 from 4 to 8 +move 1 from 8 to 3 +move 1 from 1 to 8 +move 1 from 8 to 7 +move 22 from 1 to 3 +move 1 from 6 to 7 +move 2 from 9 to 4 +move 1 from 9 to 6 +move 1 from 9 to 4 +move 10 from 4 to 3 +move 1 from 1 to 2 +move 2 from 5 to 4 +move 27 from 3 to 8 +move 5 from 3 to 9