summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmd_optimization.c68
-rw-r--r--command_handling.c5
-rw-r--r--main.c10
-rw-r--r--sorting.c6
4 files changed, 77 insertions, 12 deletions
diff --git a/cmd_optimization.c b/cmd_optimization.c
index 0c5913d..63be895 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/16 10:32:28 by dkaiser ### ########.fr */
+/* Updated: 2024/04/16 13:15:34 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
@@ -22,7 +22,7 @@ static enum e_pscmd get_cmd(t_list *cmd)
return NO_CMD;
}
-void optimize_commands(t_psdata *data)
+static void optimize_redundant_pushes(t_psdata *data)
{
t_list *cur;
t_list *last;
@@ -45,5 +45,67 @@ void optimize_commands(t_psdata *data)
cur = last->next;
}
if (optimizations)
- optimize_commands(data);
+ optimize_redundant_pushes(data);
+}
+
+static void fake_command(t_psdata *data, enum e_pscmd cmd)
+{
+ if (cmd == PA)
+ {
+ data->a->size++;
+ data->b->size--;
+ }
+ else if (cmd == PB)
+ {
+ data->a->size--;
+ data->b->size++;
+ }
+}
+
+static void optimize_rotate(t_psdata *data)
+{
+ t_list *cur;
+ t_list *last_before;
+ t_list *first_after;
+ enum e_pscmd *cmd;
+ int i;
+
+ cur = data->cmds;
+ while(cur)
+ {
+ if (get_cmd(cur->next) == RA)
+ {
+ last_before = cur;
+ cur = cur->next;
+ i = 0;
+ while (cur && get_cmd(cur) == RA)
+ {
+ i++;
+ cur = cur->next;
+ }
+ first_after = cur;
+ if (i >= (data->a->size - 1) / 2)
+ {
+ cmd = malloc(sizeof(enum e_pscmd));
+ *cmd = RRA;
+ cur = last_before->next;
+ while (i < data->a->size)
+ {
+ cur->next = ft_lstnew(cmd);
+ cur = cur->next;
+ i++;
+ }
+ cur->next = first_after;
+ ft_printf("i: %d\n", i);
+ }
+ }
+ fake_command(data, get_cmd(cur));
+ cur = cur->next;
+ }
+}
+
+void optimize_commands(t_psdata *data)
+{
+ optimize_redundant_pushes(data);
+ optimize_rotate(data);
}
diff --git a/command_handling.c b/command_handling.c
index 0b5f335..4f7c795 100644
--- a/command_handling.c
+++ b/command_handling.c
@@ -6,10 +6,11 @@
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/04/13 14:38:47 by dkaiser #+# #+# */
-/* Updated: 2024/04/16 09:27:41 by dkaiser ### ########.fr */
+/* Updated: 2024/04/16 12:12:48 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
+#include "libft/libft.h"
#include "push_swap.h"
static int add_cmd_to_queue(t_list **cmds, enum e_pscmd cmd)
@@ -92,6 +93,8 @@ static void print_cmd(void *ptr_cmd)
ft_putendl_fd("rrb", 1);
else if (cmd == RRR)
ft_putendl_fd("rrr", 1);
+ else
+ ft_putendl_fd("NO CMD", 1);
}
void print_commands(t_list *cmds)
diff --git a/main.c b/main.c
index 0087dc7..617e014 100644
--- 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 10:31:48 by dkaiser ### ########.fr */
+/* Updated: 2024/04/16 12:36:10 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
@@ -73,9 +73,9 @@ int main(int argc, char *argv[])
stack_sort(data);
optimize_commands(data);
print_commands(data->cmds);
- ft_printf("\nA: ");
- stack_print(data->a);
- ft_printf("B: ");
- stack_print(data->b);
+ /* ft_printf("\nA: "); */
+ /* stack_print(data->a); */
+ /* ft_printf("B: "); */
+ /* stack_print(data->b); */
return (0);
}
diff --git a/sorting.c b/sorting.c
index feae530..8012176 100644
--- 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/16 09:55:31 by dkaiser ### ########.fr */
+/* Updated: 2024/04/16 11:20:43 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
@@ -44,9 +44,9 @@ void stack_sort(t_psdata *data)
while (data->a->size > 0 && data->a->stack[0] != pivot)
{
- if (data->a->stack[0] > pivot)
+ if (data->a->size > 1 && data->a->stack[0] > pivot)
run_command(data, RA);
- else
+ else if (data->a->size > 0)
run_command(data, PB);
}
while (data->b->size > 0)