From: Dominik Kaiser Date: Fri, 26 Apr 2024 16:36:07 +0000 (+0200) Subject: Sort three and some norme cleanup X-Git-Url: https://git.dkaiser.de/?a=commitdiff_plain;h=9ec4dd2e78c61a2b2be8d645d3e523f954d83e9e;p=42%2Fpush_swap.git Sort three and some norme cleanup --- diff --git a/Makefile b/Makefile index 4ae0b74..6a49913 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ 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 ft_atol.c input_handling.c stack_utils.c command_handling.c sorting.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 ac023c5..b310f34 100644 --- a/cmd_optimization.c +++ b/cmd_optimization.c @@ -6,7 +6,7 @@ /* By: dkaiser next; + if (*last) + *cur = (*last)->next; + else + *cur = NULL; +} + static void optimize_redundant(t_psdata *data, enum e_pscmd cmd1, enum e_pscmd cmd2) { @@ -30,7 +39,10 @@ static void optimize_redundant(t_psdata *data, enum e_pscmd cmd1, int optimizations; cur = data->cmds; - last = cur; + last = ft_lstnew(NULL); + if (!last) + return ; + last->next = cur; optimizations = 0; while (cur && cur->next) { @@ -42,11 +54,7 @@ static void optimize_redundant(t_psdata *data, enum e_pscmd cmd1, ft_lstdelone(cur, free); optimizations++; } - last = last->next; - if (last) - cur = last->next; - else - cur = NULL; + set_last(&last, &cur); } if (optimizations) optimize_redundant(data, cmd1, cmd2); @@ -60,7 +68,9 @@ static void optimize_two_stack_ops(t_psdata *data, enum e_pscmd cmd1, int optimizations; cur = data->cmds; - last = cur; + last = ft_lstnew(NULL); + if (!last) + return ; optimizations = 0; while (cur && cur->next) { @@ -72,11 +82,7 @@ static void optimize_two_stack_ops(t_psdata *data, enum e_pscmd cmd1, ft_lstdelone(cur, free); optimizations++; } - last = last->next; - if (last) - cur = last->next; - else - cur = NULL; + set_last(&last, &cur); } if (optimizations) optimize_two_stack_ops(data, cmd1, cmd2, new_cmd); diff --git a/ft_atol.c b/ft_atol.c new file mode 100644 index 0000000..8184301 --- /dev/null +++ b/ft_atol.c @@ -0,0 +1,41 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_atol.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dkaiser = '\t' && str[i] <= '\r') || str[i] == ' ') + { + i++; + } + if (str[i] == '-') + { + posneg = -1; + i++; + } + else if (str[i] == '+') + i++; + while (str[i] >= '0' && str[i] <= '9') + { + result = 10 * result + str[i] - '0'; + i++; + } + return (result * posneg); +} diff --git a/input_handling.c b/input_handling.c index 274a0fb..50e9e87 100644 --- a/input_handling.c +++ b/input_handling.c @@ -6,7 +6,7 @@ /* By: dkaiser 1) { if (!is_nbr(argv[argc])) return (0); + nbr = ft_atol(argv[argc]); + if (nbr < -2147483648 || nbr > 2147483647) + return (0); } return (1); } diff --git a/push_swap.h b/push_swap.h index 3091fb8..99b99af 100644 --- a/push_swap.h +++ b/push_swap.h @@ -6,7 +6,7 @@ /* By: dkaiser a->stack[1] > data->a->stack[0] + && data->a->stack[1] > data->a->stack[2]) + run_command(data, RRA); + else if (data->a->stack[0] > data->a->stack[1] + && data->a->stack[0] > data->a->stack[2]) + run_command(data, RA); + if (data->a->stack[0] > data->a->stack[1]) + run_command(data, SA); +} + static void ps_radixsort(t_psdata *data, int bit) { int i; @@ -51,6 +63,12 @@ static void ps_radixsort(t_psdata *data, int bit) void stack_sort(t_psdata *data) { - if (!is_sorted(data->a)) + if (is_sorted(data->a)) + return ; + else if (data->a->size == 2) + run_command(data, SA); + else if (data->a->size == 3) + sort_three(data); + else ps_radixsort(data, 0); }