Day5
This commit is contained in:
93
day5/crates.c
Normal file
93
day5/crates.c
Normal file
@@ -0,0 +1,93 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#define BUFFER_SIZE 64
|
||||
#define STACK_SIZE 64
|
||||
|
||||
typedef struct stackStruct {
|
||||
char s[STACK_SIZE];
|
||||
char *h;
|
||||
} stack;
|
||||
|
||||
void cp(char*, stack*);
|
||||
char pop(stack*);
|
||||
void push(stack*, char);
|
||||
void move_n(stack*, int, int, int);
|
||||
|
||||
int main() {
|
||||
char buf[BUFFER_SIZE], *p, c;
|
||||
memset(buf, 0, BUFFER_SIZE);
|
||||
p = buf;
|
||||
int first = 1, numofstacks, counter = 0;
|
||||
int moveCount, moveFrom, moveTo;
|
||||
|
||||
stack *stacks;
|
||||
|
||||
while ((c = getchar()) != EOF) {
|
||||
*p++ = c;
|
||||
if (c == '\n') {
|
||||
if (first) {
|
||||
first = 0;
|
||||
sscanf(buf, "%i", &numofstacks);
|
||||
stacks = (stack*)malloc(numofstacks * sizeof(stack));
|
||||
for (int i = 0; i < numofstacks; i++) {
|
||||
memset(stacks[i].s, 0, STACK_SIZE);
|
||||
stacks[i].h = stacks[i].s;
|
||||
}
|
||||
} else if (counter < numofstacks) {
|
||||
cp(buf, &stacks[counter]);
|
||||
counter++;
|
||||
} else {
|
||||
sscanf(buf, "move %i from %i to %i", &moveCount, &moveFrom, &moveTo);
|
||||
|
||||
// First part
|
||||
//for (int i = 0; i < moveCount; i++) {
|
||||
// push(&stacks[moveTo - 1], pop(&stacks[moveFrom -1]));
|
||||
//}
|
||||
//
|
||||
// Second part
|
||||
move_n(stacks, moveCount, moveFrom-1, moveTo-1);
|
||||
}
|
||||
memset(buf, 0, BUFFER_SIZE);
|
||||
p = buf;
|
||||
}
|
||||
}
|
||||
|
||||
printf("Stacks:\n");
|
||||
for (int i = 0; i < numofstacks; i++) {
|
||||
printf("%s\n", stacks[i].s);
|
||||
}
|
||||
printf("\nTop:\n");
|
||||
for (int i = 0; i < numofstacks; i++) {
|
||||
printf("%c", *(stacks[i].h - 1));
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
free(stacks);
|
||||
}
|
||||
|
||||
void cp(char* p, stack* st) {
|
||||
char *q = st->s;
|
||||
while((*q++ = *p++) != '\n') {}
|
||||
*(--q) = 0;
|
||||
st->h = q;
|
||||
}
|
||||
|
||||
char pop(stack* st) {
|
||||
char c = *(--st->h);
|
||||
*st->h = 0;
|
||||
return c;
|
||||
}
|
||||
|
||||
void push(stack* st, char c) {
|
||||
*st->h++ = c;
|
||||
}
|
||||
|
||||
void move_n(stack* stacks, int count, int from, int to) {
|
||||
for (int i = count; i > 0; i--) {
|
||||
*stacks[to].h++ = *(stacks[from].h - i);
|
||||
*(stacks[from].h - i) = 0;
|
||||
}
|
||||
stacks[from].h -= count;
|
||||
}
|
||||
Reference in New Issue
Block a user