summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominik Kaiser2024-04-17 09:53:13 +0200
committerDominik Kaiser2024-04-17 09:53:13 +0200
commitc16af7775f6d4bb56bb8a0891ec646032f442993 (patch)
treef7b39f4d316e0ea5385a2b4d3afb58d0fdeca8f6
parent4f288f94c8ec8ced5200d2e4e5713d9b119aed48 (diff)
downloadpush_swap-c16af7775f6d4bb56bb8a0891ec646032f442993.tar.gz
push_swap-c16af7775f6d4bb56bb8a0891ec646032f442993.zip
Add optimization for double stack ops
Now RA and RB will be optimized to RR
-rw-r--r--cmd_optimization.c46
-rw-r--r--main.c15
2 files changed, 61 insertions, 0 deletions
diff --git a/cmd_optimization.c b/cmd_optimization.c
index 2d93252..83e20c0 100644
--- a/cmd_optimization.c
+++ b/cmd_optimization.c
@@ -6,7 +6,11 @@
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/04/13 16:42:34 by dkaiser #+# #+# */
+<<<<<<< Updated upstream
/* Updated: 2024/04/13 17:31:18 by dkaiser ### ########.fr */
+=======
+/* Updated: 2024/04/17 09:41:10 by dkaiser ### ########.fr */
+>>>>>>> Stashed changes
/* */
/* ************************************************************************** */
@@ -81,5 +85,47 @@ void optimize_commands(t_list **cmds)
cur = last->next;
}
if (optimizations)
+<<<<<<< Updated upstream
optimize_commands(cmds);
+=======
+ optimize_redundant(data, cmd1, cmd2);
+}
+
+static void optimize_two_stack_ops(t_psdata *data, enum e_pscmd cmd1, enum e_pscmd cmd2, enum e_pscmd new_cmd)
+{
+ t_list *cur;
+ t_list *last;
+ int optimizations;
+
+ cur = data->cmds;
+ last = cur;
+ optimizations = 0;
+
+ if (!cur)
+ return ;
+ while (cur && cur->next)
+ {
+ if ((get_cmd(cur) == cmd1 && get_cmd(cur->next) == cmd2) || (get_cmd(cur) == cmd2 && get_cmd(cur->next) == cmd1))
+ {
+ last->next = cur->next;
+ *(enum e_pscmd*)cur->next->content = new_cmd;
+ ft_lstdelone(cur, free);
+ optimizations++;
+ }
+ last = last->next;
+ if (last)
+ cur = last->next;
+ else
+ cur = NULL;
+ }
+ if (optimizations)
+ optimize_two_stack_ops(data, cmd1, cmd2, new_cmd);
+}
+
+void optimize_commands(t_psdata *data)
+{
+ optimize_redundant(data, PA, PB);
+ optimize_redundant(data, RB, RRB);
+ optimize_two_stack_ops(data, RA, RB, RR);
+>>>>>>> Stashed changes
}
diff --git a/main.c b/main.c
index 803f6eb..ed2a579 100644
--- a/main.c
+++ b/main.c
@@ -6,7 +6,11 @@
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/04/12 17:03:30 by dkaiser #+# #+# */
+<<<<<<< Updated upstream
/* Updated: 2024/04/15 17:53:19 by dkaiser ### ########.fr */
+=======
+/* Updated: 2024/04/17 09:42:43 by dkaiser ### ########.fr */
+>>>>>>> Stashed changes
/* */
/* ************************************************************************** */
@@ -25,6 +29,7 @@ int main(int argc, char *argv[])
ft_putendl_fd("Error", 2);
return (1);
}
+<<<<<<< Updated upstream
stack_b = malloc(sizeof(t_stack));
if (!stack_b)
@@ -45,5 +50,15 @@ int main(int argc, char *argv[])
stack_print(stack_a);
ft_printf("B: ");
stack_print(stack_b);
+=======
+ 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); */
+>>>>>>> Stashed changes
return (0);
}