From: Dominik Kaiser Date: Fri, 26 Apr 2024 11:56:36 +0000 (+0200) Subject: Make norminette happy X-Git-Url: https://git.dkaiser.de/?a=commitdiff_plain;h=fb11c45c1fa1246dbc80b491f55598698a932e5f;p=42%2Fpush_swap.git Make norminette happy --- diff --git a/cmd_optimization.c b/cmd_optimization.c index d0928f5..ac023c5 100644 --- a/cmd_optimization.c +++ b/cmd_optimization.c @@ -6,7 +6,7 @@ /* By: dkaiser content); - else - return NO_CMD; + if (cmd) + return (*(enum e_pscmd *)cmd->content); + else + return (NO_CMD); } -static void optimize_redundant(t_psdata *data, enum e_pscmd cmd1, enum e_pscmd cmd2) +static void optimize_redundant(t_psdata *data, enum e_pscmd cmd1, + enum e_pscmd cmd2) { - t_list *cur; - t_list *last; - int optimizations; + 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->next; - ft_lstdelone(cur->next, free); - ft_lstdelone(cur, free); - optimizations++; - } - last = last->next; - if (last) - cur = last->next; - else - cur = NULL; - } - if (optimizations) - optimize_redundant(data, cmd1, cmd2); + cur = data->cmds; + last = cur; + optimizations = 0; + 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->next; + ft_lstdelone(cur->next, free); + ft_lstdelone(cur, free); + optimizations++; + } + last = last->next; + if (last) + cur = last->next; + else + cur = NULL; + } + if (optimizations) + 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) +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; + t_list *cur; + t_list *last; + int optimizations; - 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); + cur = data->cmds; + last = cur; + optimizations = 0; + 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) +void optimize_commands(t_psdata *data) { - optimize_redundant(data, PA, PB); - optimize_redundant(data, RB, RRB); - optimize_two_stack_ops(data, RA, RB, RR); + optimize_redundant(data, PA, PB); + optimize_redundant(data, RB, RRB); + optimize_two_stack_ops(data, RA, RB, RR); } diff --git a/command_handling.c b/command_handling.c index 0b5f335..7599bdf 100644 --- a/command_handling.c +++ b/command_handling.c @@ -6,7 +6,7 @@ /* By: dkaiser stack = get_array_from_input(argc, argv); @@ -96,6 +93,5 @@ t_stack *create_stack(int argc, char *argv[]) return (NULL); } result->size = argc - 1; - return (result); } diff --git a/main.c b/main.c index 3881df0..b7ce3ab 100644 --- a/main.c +++ b/main.c @@ -6,14 +6,14 @@ /* By: dkaiser b->stack) { result->b->size = 0; - return result; + return (result); } } } } free_data(result); - return NULL; + return (NULL); } int main(int argc, char *argv[]) { - t_psdata *data; + t_psdata *data; data = initialize_data(argc, argv); if (!data) @@ -73,9 +73,5 @@ 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); */ return (0); } diff --git a/push_swap.h b/push_swap.h index fc7b51a..3091fb8 100644 --- a/push_swap.h +++ b/push_swap.h @@ -6,7 +6,7 @@ /* By: dkaiser -enum e_pscmd +enum e_pscmd { SA, SB, @@ -33,31 +33,31 @@ enum e_pscmd typedef struct s_stack { - int *stack; - int size; -} t_stack; + int *stack; + int size; +} t_stack; typedef struct s_psdata { - t_stack *a; - t_stack *b; - t_list *cmds; -} t_psdata; + t_stack *a; + t_stack *b; + t_list *cmds; +} t_psdata; -t_stack *create_stack(int argc, char *argv[]); +t_stack *create_stack(int argc, char *argv[]); -void stack_swap(t_stack *stack); -void stack_push(t_stack *dst_stack, t_stack *src_stack); -void stack_rotate(t_stack *stack); -void stack_rrotate(t_stack *stack); -void stack_print(t_stack *stack); +void stack_swap(t_stack *stack); +void stack_push(t_stack *dst_stack, t_stack *src_stack); +void stack_rotate(t_stack *stack); +void stack_rrotate(t_stack *stack); +void stack_print(t_stack *stack); -void run_command(t_psdata *data, enum e_pscmd cmd); -void print_commands(t_list *cmds); +void run_command(t_psdata *data, enum e_pscmd cmd); +void print_commands(t_list *cmds); -int stack_optimize(t_stack *stack); -void optimize_commands(t_psdata *data); +int stack_optimize(t_stack *stack); +void optimize_commands(t_psdata *data); -void stack_sort(t_psdata *data); +void stack_sort(t_psdata *data); #endif // PUSH_SWAP_H diff --git a/sorting.c b/sorting.c index 8f5d31f..ec8a336 100644 --- a/sorting.c +++ b/sorting.c @@ -6,13 +6,51 @@ /* By: dkaiser size < 2) + return (1); + i = 1; + while (i < stack->size) + { + if (stack->stack[i] < stack->stack[i - 1]) + return (0); + i++; + } + return (1); +} + +static void ps_radixsort(t_psdata *data, int bit) +{ + int i; + int size; + + i = 0; + size = data->a->size; + while (i < size) + { + if (data->a->size && ((data->a->stack[0] >> bit) & 1) == 0) + run_command(data, PB); + else if (data->a->size > 1) + run_command(data, RA); + i++; + } + while (data->b->size > 0) + run_command(data, PA); + if (!is_sorted(data->a)) + ps_radixsort(data, bit + 1); +} + +void stack_sort(t_psdata *data) +{ + if (!is_sorted(data->a)) + ps_radixsort(data, 0); } diff --git a/stack_optimization.c b/stack_optimization.c index eabf04a..18b8bf9 100644 --- a/stack_optimization.c +++ b/stack_optimization.c @@ -6,36 +6,35 @@ /* By: dkaiser -static int *copy_stack(int *stack, int size) +static int *copy_stack(int *stack, int size) { - int i; - int *cpy; + int i; + int *cpy; cpy = malloc(sizeof(int) * size); if (!cpy) - return NULL; + return (NULL); i = 0; while (i < size) { cpy[i] = stack[i]; i++; } - - return cpy; + return (cpy); } -static void sort_stack(int *stack, int size) +static void sort_stack(int *stack, int size) { - int i; - int k; - int tmp; + int i; + int k; + int tmp; i = 0; while (i < size - 1) @@ -55,10 +54,10 @@ static void sort_stack(int *stack, int size) } } -static void override_stack(int *stack, int *tmp_stack, int size) +static void override_stack(int *stack, int *tmp_stack, int size) { - int i; - int k; + int i; + int k; i = 0; while (i < size) @@ -73,13 +72,13 @@ static void override_stack(int *stack, int *tmp_stack, int size) int stack_optimize(t_stack *stack) { - int *tmp_stack; + int *tmp_stack; tmp_stack = copy_stack(stack->stack, stack->size); if (!tmp_stack) - return 1; + return (1); sort_stack(tmp_stack, stack->size); override_stack(stack->stack, tmp_stack, stack->size); free(tmp_stack); - return 0; + return (0); } diff --git a/stack_utils.c b/stack_utils.c index f240395..d798d70 100644 --- a/stack_utils.c +++ b/stack_utils.c @@ -6,7 +6,7 @@ /* By: dkaiser size > 1) { @@ -26,12 +26,12 @@ void stack_swap(t_stack *stack) void stack_push(t_stack *dst_stack, t_stack *src_stack) { - int i; + int i; i = dst_stack->size; while (i > 0) { - dst_stack->stack[i] = dst_stack->stack[i-1]; + dst_stack->stack[i] = dst_stack->stack[i - 1]; i--; } dst_stack->stack[0] = src_stack->stack[0]; @@ -39,7 +39,7 @@ void stack_push(t_stack *dst_stack, t_stack *src_stack) i = 1; while (i < src_stack->size) { - src_stack->stack[i-1] = src_stack->stack[i]; + src_stack->stack[i - 1] = src_stack->stack[i]; i++; } src_stack->size--; @@ -47,37 +47,37 @@ void stack_push(t_stack *dst_stack, t_stack *src_stack) void stack_rotate(t_stack *stack) { - int tmp; - int i; + int tmp; + int i; tmp = stack->stack[0]; i = 1; while (i < stack->size) { - stack->stack[i-1] = stack->stack[i]; + stack->stack[i - 1] = stack->stack[i]; i++; } - stack->stack[i-1] = tmp; + stack->stack[i - 1] = tmp; } void stack_rrotate(t_stack *stack) { - int tmp; - int i; + int tmp; + int i; i = stack->size - 1; tmp = stack->stack[i]; while (i > 0) { - stack->stack[i] = stack->stack[i-1]; + stack->stack[i] = stack->stack[i - 1]; i--; } stack->stack[0] = tmp; } -void stack_print(t_stack *stack) +void stack_print(t_stack *stack) { - int i; + int i; i = 0; while (i < stack->size)