From f061613650f5e7c5e260a4d9a1ca1b1d80ca2f2c Mon Sep 17 00:00:00 2001 From: Charles Date: Tue, 14 Jan 2020 18:50:02 +0100 Subject: Added checker base --- src/common/action.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++ src/common/action.h | 19 ---------------- src/common/common.h | 43 ++++++++++++++++++++++++++++++++++++ src/common/stack.c | 2 +- src/common/stack.h | 23 ------------------- src/src_checker/check.c | 52 +++++++++++++++++++++++++++++++++++++++++++ src/src_checker/checker.h | 35 +++++++++++++++++++++++++++++ src/src_checker/main.c | 28 ++++++++++++++++++++++++ 8 files changed, 215 insertions(+), 43 deletions(-) delete mode 100644 src/common/action.h create mode 100644 src/common/common.h delete mode 100644 src/common/stack.h create mode 100644 src/src_checker/check.c create mode 100644 src/src_checker/checker.h create mode 100644 src/src_checker/main.c (limited to 'src') diff --git a/src/common/action.c b/src/common/action.c index e69de29..bfbe436 100644 --- a/src/common/action.c +++ b/src/common/action.c @@ -0,0 +1,56 @@ +#include "common.h" + +void swap_a(t_stack *a) +{ + +} + +void swap_b(t_stack *b) +{ + +} + +void swap_both(t_stack *a, t_stack *b) +{ + +} + +void push_a(t_stack *a, t_stack *b) +{ + +} + +void push_b(t_stack *b, t_stack *a) +{ + +} + +void rotate_a(t_stack *a) +{ + +} + +void rotate_b(t_stack *b) +{ + +} + +void rotate_both(t_stack *a, t_stack *b) +{ + +} + +void reverse_rotate_a(t_stack *a) +{ + +} + +void reverse_rotate_b(t_stack *b) +{ + +} + +void reverse_rotate_both(t_stack *a, t_stack *b) +{ + +} diff --git a/src/common/action.h b/src/common/action.h deleted file mode 100644 index d458c49..0000000 --- a/src/common/action.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef ACTION_H -# define ACTION_H - -# include "stack.h" - -void swap_a(t_stack *a); -void swap_b(t_stack *b); -void swap_both(t_stack *a, t_stack *b); -void push_a(t_stack *a, t_stack *b); -void push_b(t_stack *b, t_stack *a); -void rotate_a(t_stack *a); -void rotate_b(t_stack *b); -void rotate_both(t_stack *a, t_stack *b); -void reverse_rotate_a(t_stack *a); -void reverse_rotate_b(t_stack *b); -void reverse_rotate_both(t_stack *a, t_stack *b); - - -#endif diff --git a/src/common/common.h b/src/common/common.h new file mode 100644 index 0000000..4225d87 --- /dev/null +++ b/src/common/common.h @@ -0,0 +1,43 @@ +#ifndef STACK_H +# define STACK_H + +#include +#include "libft.h" + +typedef struct +{ + int *elements; + int top; +} t_stack; + +/* +** stack.c +*/ + +t_stack *stack_new(int size); +void stack_destroy(t_stack *stack); +void stack_push(t_stack *stack, int n); +void stack_pop(t_stack *stack); +int stack_peek(t_stack *stack); +void stack_swap(t_stack *stack); +void stack_push_to(t_stack *from, t_stack *to); +void stack_rotate(t_stack *stack); +void stack_reverse_rotate(t_stack *stack); + +/* +** action.c +*/ + +void swap_a(t_stack *a); +void swap_b(t_stack *b); +void swap_both(t_stack *a, t_stack *b); +void push_a(t_stack *a, t_stack *b); +void push_b(t_stack *b, t_stack *a); +void rotate_a(t_stack *a); +void rotate_b(t_stack *b); +void rotate_both(t_stack *a, t_stack *b); +void reverse_rotate_a(t_stack *a); +void reverse_rotate_b(t_stack *b); +void reverse_rotate_both(t_stack *a, t_stack *b); + +#endif diff --git a/src/common/stack.c b/src/common/stack.c index cbd0986..693fb85 100644 --- a/src/common/stack.c +++ b/src/common/stack.c @@ -1,4 +1,4 @@ -#include "stack.h" +#include "common.h" t_stack *stack_new(int size) { diff --git a/src/common/stack.h b/src/common/stack.h deleted file mode 100644 index a85a333..0000000 --- a/src/common/stack.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef STACK_H -# define STACK_H - -#include -#include "libft.h" - -typedef struct -{ - int *elements; - int top; -} t_stack; - -t_stack *stack_new(int size); -void stack_destroy(t_stack *stack); -void stack_push(t_stack *stack, int n); -void stack_pop(t_stack *stack); -int stack_peek(t_stack *stack); -void stack_swap(t_stack *stack); -void stack_push_to(t_stack *from, t_stack *to); -void stack_rotate(t_stack *stack); -void stack_reverse_rotate(t_stack *stack); - -#endif diff --git a/src/src_checker/check.c b/src/src_checker/check.c new file mode 100644 index 0000000..1a7a943 --- /dev/null +++ b/src/src_checker/check.c @@ -0,0 +1,52 @@ +#include "checker.h" + +t_status check(t_stack *a, t_stack *b) +{ + +} + +t_action read_action(void) +{ + int i; + char c; + char buf[4]; + + ft_bzero(buf, sizeof(char) * 4); + i = 0; + while (read(STDIN_FILENO, 1, &c) > 0) + { + if (c == '\n') + return (str_action(buf)); + if (i >= 3) + return (ACTION_ERROR); + buf[i++] = c; + buf[i] = '\0'; + } +} + +t_action str_action(char *s) +{ + if (ft_strcmp(s, "sa") != 0) + return (ACTION_SA); + if (ft_strcmp(s, "sb") != 0) + return (ACTION_SB); + if (ft_strcmp(s, "ss") != 0) + return (ACTION_SS); + if (ft_strcmp(s, "pa") != 0) + return (ACTION_PA); + if (ft_strcmp(s, "pa") != 0) + return (ACTION_PB); + if (ft_strcmp(s, "ra") != 0) + return (ACTION_RA); + if (ft_strcmp(s, "rb") != 0) + return (ACTION_RB); + if (ft_strcmp(s, "rr") != 0) + return (ACTION_RR); + if (ft_strcmp(s, "rra") != 0) + return (ACTION_RRA); + if (ft_strcmp(s, "rrb") != 0) + return (ACTION_RRB); + if (ft_strcmp(s, "rrr") != 0); + return (ACTION_RRR); + return (ACTION_ERROR); +} diff --git a/src/src_checker/checker.h b/src/src_checker/checker.h new file mode 100644 index 0000000..ad24942 --- /dev/null +++ b/src/src_checker/checker.h @@ -0,0 +1,35 @@ +#ifndef CHECKER_H +# define CHECKER_H + +# include +# include "common.h" +# include "libft.h" + +typedef enum +{ + STATUS_SUCCESS, + STATUS_FAILURE, + STATUS_ERROR +} t_status; + +typedef enum +{ + ACTION_SA, + ACTION_SB, + ACTION_SS, + ACTION_PA, + ACTION_PB, + ACTION_RA, + ACTION_RB, + ACTION_RR, + ACTION_RRA, + ACTION_RRB, + ACTION_RRR, + ACTION_ERROR +} t_action; + +t_status check(t_stack *a, t_stack *b); +t_action read_action(void); +t_action str_action(char *s); + +#endif diff --git a/src/src_checker/main.c b/src/src_checker/main.c new file mode 100644 index 0000000..17b10c3 --- /dev/null +++ b/src/src_checker/main.c @@ -0,0 +1,28 @@ +#include "checker.h" + +int main(int argc, char **argv) +{ + t_status s; + + if (argc == 1) + return (0); + if (!check_argv(argc, argv)) + { + ft_putendl_fd("Error", STDERR_FILENO); + return (1); + } + t_stack *a = stack_new(argc - 1); + t_stack *b = stack_new(argc - 1); + while (--argc > 1) + stack_push(a, ft_atoi(argv[argc])); + s = check(a, b)) + if (s == STATUS_SUCCESS) + ft_putendl("OK"); + else if (s == STATUS_FAILURE) + ft_putendl("KO"); + else if (s == STATUS_ERROR) + ft_putendl_fd("Error", STDERR_FILENO); + stack_destroy(a); + stack_destroy(b); + return 0; +} -- cgit