From: Dominik Kaiser Date: Wed, 24 Apr 2024 12:59:53 +0000 (+0200) Subject: Make norminette happy and some more error handling X-Git-Url: https://git.dkaiser.de/?a=commitdiff_plain;h=173279d8e83e81fd1d451adb2153103dc0506ad8;p=42%2Fpush_swap.git Make norminette happy and some more error handling --- diff --git a/Makefile b/Makefile index 4ae0b74..ebdd948 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,8 @@ LIBFT = libft CC = cc CFLAGS = -Wall -Wextra -Werror -SRC_FILES = main.c input_handling.c stack_utils.c command_handling.c sorting.c stack_optimization.c cmd_optimization.c +SRC_FILES = main.c input_handling.c stack_utils.c command_handling.c \ + sorting.c sorting_utils.c stack_optimization.c cmd_optimization.c OBJ_FILES = $(SRC_FILES:%.c=%.o) LIB_DIR = $(LIBFT) diff --git a/cmd_optimization.c b/cmd_optimization.c index 41d1c08..90f0339 100644 --- a/cmd_optimization.c +++ b/cmd_optimization.c @@ -6,7 +6,7 @@ /* By: dkaiser cmds; last = cur; optimizations = 0; - if (!cur) - return ; while (cur && cur->next) { if ((get_cmd(cur) == cmd1 && get_cmd(cur->next) == cmd2) @@ -64,8 +62,6 @@ static void optimize_two_stack_ops(t_psdata *data, enum e_pscmd cmd1, cur = data->cmds; last = cur; optimizations = 0; - if (!cur) - return ; while (cur && cur->next) { if ((get_cmd(cur) == cmd1 && get_cmd(cur->next) == cmd2) diff --git a/main.c b/main.c index 6406ffc..6891d88 100644 --- a/main.c +++ b/main.c @@ -6,7 +6,7 @@ /* By: dkaiser a); - stack_sort(data); - optimize_commands(data); - print_commands(data->cmds); - /* ft_printf("\nA: "); */ - /* stack_print(data->a); */ - /* ft_printf("B: "); */ - /* stack_print(data->b); */ + if (!is_sorted(data->a)) + { + stack_optimize(data->a); + stack_sort(data); + if (!is_sorted(data->a) || data->b->size) + { + ft_putendl_fd("Error", 2); + return (1); + } + optimize_commands(data); + print_commands(data->cmds); + } return (0); } diff --git a/push_swap.h b/push_swap.h index d3dcbaa..e9918e6 100644 --- a/push_swap.h +++ b/push_swap.h @@ -6,7 +6,7 @@ /* By: dkaiser b->size + 1) / 2) - moves_to_top = pos; - else - moves_to_top = data->b->size - pos; - i = 0; - while (i < data->a->size && data->a->stack[i] > data->b->stack[pos]) - i++; - if (i < (data->a->size + 1) / 2) - moves_to_spot = 2 * i + 1; - else - moves_to_spot = 2 * ((data->a->size - i) + 1); - return (moves_to_top + moves_to_spot); -} - -static void move_to_top(t_psdata *data, int idx) -{ - if (idx < (data->b->size + 1) / 2) - { - while (--idx > 0) - run_command(data, RB); - } - else - { - idx = data->b->size - idx; - while (idx--) - run_command(data, RRB); - } -} - -static void move_to_spot(t_psdata *data, int idx) -{ - int pos; - int i; - - pos = 0; - while (pos < data->a->size && data->b->stack[0] > data->a->stack[pos]) - pos++; - if (pos >= data->a->size) - { - move_to_top(data, idx); - run_command(data, PA); - run_command(data, RA); - } - else if (pos < (data->a->size + 1) / 2) - { - i = pos; - while (i--) - run_command(data, RA); - move_to_top(data, idx); - run_command(data, PA); - i = pos; - while (i--) - run_command(data, RRA); - } - else - { - i = data->a->size - pos; - while (i--) - run_command(data, RRA); - move_to_top(data, idx); - run_command(data, PA); - i = data->a->size - pos; - while (i--) - run_command(data, RA); - } -} - static void scoresort(t_psdata *data) { int *scores; @@ -118,7 +45,8 @@ static void scoresort(t_psdata *data) int min_score; scores = malloc(sizeof(int) * data->b->size); - // Error if allocation fails + if (!scores) + return ; i = 0; while (i < data->b->size) {