diff options
| author | Dominik Kaiser | 2024-04-17 10:02:48 +0200 |
|---|---|---|
| committer | GitHub | 2024-04-17 10:02:48 +0200 |
| commit | 7ee7febc315ad4f0b8bc07dc4298fa01ea22aac9 (patch) | |
| tree | 2e43fef13f23d7e6f091d8dfe7717777d6d68cfe | |
| parent | c0537681539794755df7b0be610b0fa7706411ba (diff) | |
| parent | ca291232e5716bc277b4d56c7a76dac2f8caa860 (diff) | |
| download | push_swap-7ee7febc315ad4f0b8bc07dc4298fa01ea22aac9.tar.gz push_swap-7ee7febc315ad4f0b8bc07dc4298fa01ea22aac9.zip | |
Merge pull request #7 from dpu-kaiser/masternew_radixsort
Add changes from master to new_radixsort
| -rw-r--r-- | cmd_optimization.c | 35 | ||||
| -rw-r--r-- | main.c | 6 |
2 files changed, 37 insertions, 4 deletions
diff --git a/cmd_optimization.c b/cmd_optimization.c index 993ec1b..d0928f5 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 18:10:15 by dkaiser ### ########.fr */ +/* Updated: 2024/04/17 09:41:10 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ @@ -53,7 +53,40 @@ static void optimize_redundant(t_psdata *data, enum e_pscmd cmd1, enum e_pscmd c 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); } @@ -6,7 +6,7 @@ /* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/04/12 17:03:30 by dkaiser #+# #+# */ -/* Updated: 2024/04/16 17:54:56 by dkaiser ### ########.fr */ +/* Updated: 2024/04/17 09:42:43 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ @@ -71,8 +71,8 @@ int main(int argc, char *argv[]) } stack_optimize(data->a); stack_sort(data); - /* optimize_commands(data); */ - /* print_commands(data->cmds); */ + optimize_commands(data); + print_commands(data->cmds); /* ft_printf("\nA: "); */ /* stack_print(data->a); */ /* ft_printf("B: "); */ |
