#include #include #include #include typedef struct crate { char c; struct crate *nA; struct crate *nB; } crate; #define alloc_stacks(C, N) \ if (C) C = realloc(C, sizeof(crate) * N); \ else C = malloc(sizeof(crate) * N); int main(void) { char l[BUFSIZ], *e, *m = 0; crate **A = 0, **B = 0, *c, *p; int i, n, N = 0, f, t; while (fgets(l, BUFSIZ, stdin)) { if ((e = strrchr(l, ']'))) { if (e > m) { m = e; N = (m - l) / 4 + 1; alloc_stacks(A, N); alloc_stacks(B, N); } for (i = 0; i < N; i++) { c = calloc(1, sizeof(crate)); c->c = l[i*4+1]; if (!A[i] || A[i]->c == ' ') { A[i] = c; B[i] = c; } else { for (p = A[i]; p->nA; p = p->nA); p->nA = c; for (p = B[i]; p->nB; p = p->nB); p->nB = c; } } } if (sscanf(l, "move %u from %u to %u", &n, &f, &t) == 3) { f--; t--; for (i = 0; i < n; i++) { c = A[f]; A[f] = c->nA; c->nA = A[t]; A[t] = c; } c = B[f]; for (i = 1; i < n; i++) c = c->nB; p = c->nB; c->nB = B[t]; B[t] = B[f]; B[f] = p; } } printf("Silver: "); for (i = 0; i < N; i++) if (A[i]) printf("%c", A[i]->c); printf("\nGold: "); for (i = 0; i < N; i++) if (B[i]) printf("%c", B[i]->c); printf("\n"); }