]> git.dkaiser.de - 42/push_swap.git/commitdiff
Refactor cmd_optimization
authorDominik Kaiser <dominik@dominik-XPS.fritz.box>
Tue, 16 Apr 2024 16:10:54 +0000 (18:10 +0200)
committerDominik Kaiser <dominik@dominik-XPS.fritz.box>
Tue, 16 Apr 2024 16:10:54 +0000 (18:10 +0200)
cmd_optimization.c
main.c
push_swap.h

index 2d93252eedc4c1b43647d16d58436f8215a097e4..993ec1baca2ec05c2137ad7a0dedfb4211461319 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/04/13 16:42:34 by dkaiser           #+#    #+#             */
-/*   Updated: 2024/04/13 17:31:18 by dkaiser          ###   ########.fr       */
+/*   Updated: 2024/04/16 18:10:15 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
 #include "libft/libft.h"
 #include "push_swap.h"
 
-/* void        optimize_commands(t_list **cmds) */
-/* { */
-/*     int             optimizations; */
-/*     t_list  *cur; */
-/*     t_list *last; */
-
-/*     optimizations = 0; */
-/*     cur = *cmds; */
-/*     last = NULL; */
-/*     while (cur->next) */
-/*     { */
-/*             if ((*(enum e_pscmd *)cur->content == PA */
-/*                             && *(enum e_pscmd *)cur->next->content == PB) */
-/*                     || (*(enum e_pscmd *)cur->content == PA */
-/*                             && *(enum e_pscmd *)cur->next->content == PB)) */
-/*             { */
-/*             if (last) */
-/*                 last->next = cur->next->next; */
-/*             else */
-/*                 (*cmds)->next = cur->next->next; */
-/*             ft_lstdelone(cur->next, free); */
-/*             ft_lstdelone(cur, free); */
-/*             optimizations++; */
-/*         } */
-/*         if (!optimizations) */
-/*         { */
-/*             last = cur; */
-/*             cur = cur->next; */
-/*         } */
-/*         else */
-/*             break; */
-/*     } */
-/*     if (optimizations) */
-/*             optimize_commands(cmds); */
-/* } */
-
 static enum e_pscmd get_cmd(t_list *cmd)
 {
     if (cmd)
@@ -58,19 +22,21 @@ static enum e_pscmd get_cmd(t_list *cmd)
         return NO_CMD;
 }
 
-void optimize_commands(t_list **cmds)
+static void optimize_redundant(t_psdata *data, enum e_pscmd cmd1, enum e_pscmd cmd2)
 {
     t_list *cur;
     t_list *last;
     int optimizations;
 
-    cur = *cmds;
+    cur = data->cmds;
     last = cur;
     optimizations = 0;
 
-    while (cur->next)
+    if (!cur)
+        return ;
+    while (cur && cur->next)
     {
-        if ((get_cmd(cur) == PA && get_cmd(cur->next) == PB) || (get_cmd(cur) == PB && get_cmd(cur->next) == PA))
+        if ((get_cmd(cur) == cmd1 && get_cmd(cur->next) == cmd2) || (get_cmd(cur) == cmd2 && get_cmd(cur->next) == cmd1))
         {
             last->next = cur->next->next;
             ft_lstdelone(cur->next, free);
@@ -78,8 +44,16 @@ void optimize_commands(t_list **cmds)
             optimizations++;
         }
         last = last->next;
-        cur = last->next;
+        if (last)
+            cur = last->next;
+        else
+            cur = NULL;
     }
     if (optimizations)
-        optimize_commands(cmds);
+        optimize_redundant(data, cmd1, cmd2);
+}
+
+void optimize_commands(t_psdata *data)
+{
+    optimize_redundant(data, PA, PB);
 }
diff --git a/main.c b/main.c
index dd3e9c4558f30802f8027a067d45fdaa42a8ad58..221aefe9e3911164b3a3c1d5d43b10c632d3936c 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/16 09:35:54 by dkaiser          ###   ########.fr       */
+/*   Updated: 2024/04/16 17:54:56 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -71,11 +71,11 @@ int main(int argc, char *argv[])
        }
        stack_optimize(data->a);
        stack_sort(data);
-       /* optimize_commands(&pscmds); */
-       print_commands(data->cmds);
-       ft_printf("\nA: ");
-       stack_print(data->a);
-       ft_printf("B: ");
-       stack_print(data->b);
+       /* optimize_commands(data); */
+       /* print_commands(data->cmds); */
+       /* ft_printf("\nA: "); */
+       /* stack_print(data->a); */
+       /* ft_printf("B: "); */
+       /* stack_print(data->b); */
        return (0);
 }
index c7afb5f3b809abe10b6b16ba93beec775c4a02fd..fc7b51a51fa5f7de8e573c55570a22a1479ff547 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/04/12 16:59:09 by dkaiser           #+#    #+#             */
-/*   Updated: 2024/04/16 09:29:15 by dkaiser          ###   ########.fr       */
+/*   Updated: 2024/04/16 17:57:33 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -56,7 +56,7 @@ void  run_command(t_psdata *data, enum e_pscmd cmd);
 void   print_commands(t_list *cmds);
 
 int    stack_optimize(t_stack *stack);
-void   optimize_commands(t_list **cmds);
+void   optimize_commands(t_psdata *data);
 
 void   stack_sort(t_psdata *data);