diff options
| author | Dominik Kaiser | 2024-04-16 13:16:20 +0200 |
|---|---|---|
| committer | Dominik Kaiser | 2024-04-16 13:16:20 +0200 |
| commit | 321cd3e03788cb1f077268d84f8c0c064fadb2ae (patch) | |
| tree | 85de17c1a839fbd7bf31bfdc13cbb1b17cffb072 | |
| parent | 711092a83e3ee80e7a9d6d826b4158f799fcb358 (diff) | |
| download | push_swap-321cd3e03788cb1f077268d84f8c0c064fadb2ae.tar.gz push_swap-321cd3e03788cb1f077268d84f8c0c064fadb2ae.zip | |
Add some optimization
| -rw-r--r-- | cmd_optimization.c | 68 | ||||
| -rw-r--r-- | command_handling.c | 5 | ||||
| -rw-r--r-- | main.c | 10 | ||||
| -rw-r--r-- | sorting.c | 6 |
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) @@ -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); } @@ -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) |
