From b0db3b8a7c4dd03c759fb88bed7d5ce1d41a6059 Mon Sep 17 00:00:00 2001 From: Dominik Kaiser Date: Tue, 16 Apr 2024 09:28:12 +0200 Subject: Simplify arguments into t_psdata --- command_handling.c | 29 +++++++++++----------- main.c | 73 ++++++++++++++++++++++++++++++++++++++---------------- push_swap.h | 16 ++++++++---- sorting.c | 7 +++--- 4 files changed, 79 insertions(+), 46 deletions(-) diff --git a/command_handling.c b/command_handling.c index e4dc476..0b5f335 100644 --- a/command_handling.c +++ b/command_handling.c @@ -6,7 +6,7 @@ /* By: dkaiser a); else if (cmd == SB) - stack_swap(stack_b); + stack_swap(data->b); else if (cmd == SS) - run_for_both(stack_a, stack_b, stack_swap); + run_for_both(data->a, data->b, stack_swap); else if (cmd == PA) - stack_push(stack_a, stack_b); + stack_push(data->a, data->b); else if (cmd == PB) - stack_push(stack_b, stack_a); + stack_push(data->b, data->a); else if (cmd == RA) - stack_rotate(stack_a); + stack_rotate(data->a); else if (cmd == RB) - stack_rotate(stack_b); + stack_rotate(data->b); else if (cmd == RR) - run_for_both(stack_a, stack_b, stack_rotate); + run_for_both(data->a, data->b, stack_rotate); else if (cmd == RRA) - stack_rrotate(stack_a); + stack_rrotate(data->a); else if (cmd == RRB) - stack_rrotate(stack_b); + stack_rrotate(data->b); else if (cmd == RRR) - run_for_both(stack_a, stack_b, stack_rrotate); - add_cmd_to_queue(cmds, cmd); + run_for_both(data->a, data->b, stack_rrotate); + add_cmd_to_queue(&data->cmds, cmd); } static void print_cmd(void *ptr_cmd) diff --git a/main.c b/main.c index 803f6eb..9d083c0 100644 --- a/main.c +++ b/main.c @@ -6,44 +6,73 @@ /* By: dkaiser a) { - ft_putendl_fd("Error", 2); - return (1); + if (data->a->stack) + free(data->a->stack); + free(data->a); } + if (data->b) + { + if (data->b->stack) + free(data->b->stack); + free(data->b); + } + free(data); +} + +static t_psdata *initialize_data(int argc, char *argv[]) +{ + t_psdata *result; - stack_b = malloc(sizeof(t_stack)); - if (!stack_b) + result = malloc(sizeof(t_psdata)); + if (result) { - //free everything + result->a = create_stack(argc, argv); + if (result->a) + { + result->b = malloc(sizeof(t_stack)); + if (result->b) + { + result->b->stack = malloc(sizeof(int) * (argc - 1)); + if (result->b->stack) + { + result->b->size = 0; + return result; + } + } + } } - stack_b->stack = malloc(sizeof(int) * (argc - 1)); - if (!stack_b->stack) + free_data(result); + return NULL; +} + +int main(int argc, char *argv[]) +{ + t_psdata *data; + + data = initialize_data(argc, argv); + if (!data) { - //free everything + ft_putendl_fd("Error", 2); + return (1); } - stack_b->size = 0; - stack_optimize(stack_a); - pscmds = stack_sort(stack_a, stack_b); + stack_optimize(data->a); + data->cmds = stack_sort(data->a, data->b); /* optimize_commands(&pscmds); */ - print_commands(pscmds); + print_commands(data->cmds); ft_printf("\nA: "); - stack_print(stack_a); + stack_print(data->a); ft_printf("B: "); - stack_print(stack_b); + stack_print(data->b); return (0); } diff --git a/push_swap.h b/push_swap.h index 3500171..7fcc9f8 100644 --- a/push_swap.h +++ b/push_swap.h @@ -6,7 +6,7 @@ /* By: dkaiser a) + if (data) { - if (data->a->stack) - free(data->a->stack); - free(data->a); - } - if (data->b) - { - if (data->b->stack) - free(data->b->stack); - free(data->b); + if (data->a) + { + if (data->a->stack) + free(data->a->stack); + free(data->a); + } + if (data->b) + { + if (data->b->stack) + free(data->b->stack); + free(data->b); + } + free(data); } - free(data); } static t_psdata *initialize_data(int argc, char *argv[]) @@ -67,7 +70,7 @@ int main(int argc, char *argv[]) return (1); } stack_optimize(data->a); - data->cmds = stack_sort(data->a, data->b); + stack_sort(data); /* optimize_commands(&pscmds); */ print_commands(data->cmds); ft_printf("\nA: "); -- cgit v1.2.3 From b8be1fba75a133b159b71a5c3c06436a143e670f Mon Sep 17 00:00:00 2001 From: Dominik Kaiser Date: Tue, 16 Apr 2024 18:10:54 +0200 Subject: Refactor cmd_optimization --- cmd_optimization.c | 60 ++++++++++++++++-------------------------------------- main.c | 14 ++++++------- push_swap.h | 4 ++-- 3 files changed, 26 insertions(+), 52 deletions(-) diff --git a/cmd_optimization.c b/cmd_optimization.c index 2d93252..993ec1b 100644 --- a/cmd_optimization.c +++ b/cmd_optimization.c @@ -6,7 +6,7 @@ /* By: dkaiser 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 dd3e9c4..221aefe 100644 --- a/main.c +++ b/main.c @@ -6,7 +6,7 @@ /* By: dkaiser 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); } diff --git a/push_swap.h b/push_swap.h index c7afb5f..fc7b51a 100644 --- a/push_swap.h +++ b/push_swap.h @@ -6,7 +6,7 @@ /* By: dkaiser