]> git.dkaiser.de - 42/push_swap.git/commitdiff
Make norminette happy and some more error handling
authorDominik Kaiser <dkaiser@3-F-14.42heilbronn.de>
Wed, 24 Apr 2024 12:59:53 +0000 (14:59 +0200)
committerDominik Kaiser <dkaiser@3-F-14.42heilbronn.de>
Wed, 24 Apr 2024 12:59:53 +0000 (14:59 +0200)
Makefile
cmd_optimization.c
main.c
push_swap.h
sorting.c

index 4ae0b74673a818a27d784269fe65718177b2be10..ebdd948f9a9c865730e0323b2080d8715efc1940 100644 (file)
--- 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)
index 41d1c085c9f72411364892ea9a21c0edb867f322..90f03398d794baee35104d0520ae58d273578847 100644 (file)
@@ -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)
diff --git a/main.c b/main.c
index 6406ffc06ee75cb65c00b68a808f57c87b204124..6891d88167cde664028fc13344243ec89b4316aa 100644 (file)
--- a/main.c
+++ b/main.c
@@ -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);
 }
index d3dcbaaad6ed793f9f33d7caab21166c876ee418..e9918e68e5e60e103c524126a95f1dae2dec17bb 100644 (file)
@@ -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
index c7522ebe7a63983dce7bf3df0fff5c0caaeb9300..aa27f55deb95926d43ec2f89c04cc7cd41c95231 100644 (file)
--- a/sorting.c
+++ b/sorting.c
@@ -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)
        {