diff options
| author | Dominik Kaiser | 2024-04-24 14:59:53 +0200 |
|---|---|---|
| committer | Dominik Kaiser | 2024-04-24 14:59:53 +0200 |
| commit | 173279d8e83e81fd1d451adb2153103dc0506ad8 (patch) | |
| tree | bb5a92b58d909cd4b36daffad292e62e1d51926f | |
| parent | a931d6df9fd873607442a70351fbb7e0f32590d0 (diff) | |
| download | push_swap-173279d8e83e81fd1d451adb2153103dc0506ad8.tar.gz push_swap-173279d8e83e81fd1d451adb2153103dc0506ad8.zip | |
Make norminette happy and some more error handling
| -rw-r--r-- | Makefile | 3 | ||||
| -rw-r--r-- | cmd_optimization.c | 6 | ||||
| -rw-r--r-- | main.c | 22 | ||||
| -rw-r--r-- | push_swap.h | 6 | ||||
| -rw-r--r-- | sorting.c | 78 |
5 files changed, 24 insertions, 91 deletions
@@ -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 <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/04/13 16:42:34 by dkaiser #+# #+# */ -/* Updated: 2024/04/24 10:58:14 by dkaiser ### ########.fr */ +/* Updated: 2024/04/24 13:11:45 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ @@ -32,8 +32,6 @@ static void optimize_redundant(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) @@ -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) @@ -6,7 +6,7 @@ /* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/04/12 17:03:30 by dkaiser #+# #+# */ -/* Updated: 2024/04/24 10:58:59 by dkaiser ### ########.fr */ +/* Updated: 2024/04/24 14:31:46 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ @@ -69,13 +69,17 @@ int main(int argc, char *argv[]) ft_putendl_fd("Error", 2); return (1); } - stack_optimize(data->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 <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/04/12 16:59:09 by dkaiser #+# #+# */ -/* Updated: 2024/04/24 10:59:05 by dkaiser ### ########.fr */ +/* Updated: 2024/04/24 14:28:04 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ @@ -59,5 +59,9 @@ int stack_optimize(t_stack *stack); void optimize_commands(t_psdata *data); void stack_sort(t_psdata *data); +int is_sorted(t_stack *stack); +int calculate_score(t_psdata *data, int pos); +void move_to_top(t_psdata *data, int idx); +void move_to_spot(t_psdata *data, int idx); #endif // PUSH_SWAP_H @@ -6,7 +6,7 @@ /* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/04/13 15:04:19 by dkaiser #+# #+# */ -/* Updated: 2024/04/24 10:58:02 by dkaiser ### ########.fr */ +/* Updated: 2024/04/24 13:48:31 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ @@ -38,79 +38,6 @@ static void presort(t_psdata *data) } } -static int calculate_score(t_psdata *data, int pos) -{ - int moves_to_top; - int moves_to_spot; - int i; - - if (pos < (data->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) { |
