/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* medium_algo.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: mteriier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/12/10 07:14:45 by mteriier #+# #+# */ /* Updated: 2026/01/06 12:57:05 by dgaillet ### ########lyon.fr */ /* */ /* ************************************************************************** */ #include "push_swap.h" #include "medium_headers.h" #include static int path_to_end(t_stacks *stacks, int max_range, int range, char c) { t_stack *tmp; int i; int first_pass; if (c == 'a') tmp = stacks->a; else tmp = stacks->b; tmp = tmp->previous; i = 0; first_pass = 1; while (first_pass || tmp != stacks->b->previous) { first_pass = 0; if (in_range(tmp->value, max_range, range)) tmp = stacks->b; tmp = tmp->previous; i++; } return (i); } static int path_to_start(t_stacks *stacks, int max_range, int range, char c) { t_stack *tmp; int i; int first_pass; if (c == 'a') tmp = stacks->a; else tmp = stacks->b; i = 0; first_pass = 1; while (first_pass || tmp != stacks->b) { first_pass = 0; if (in_range(tmp->value, max_range, range)) { tmp = stacks->b->previous; } tmp = tmp->next; i++; } return (i); } int wich_path(t_stacks *stacks, int max_range, int range, char c) { int path_start; int path_end; path_start = path_to_start(stacks, max_range, range, c); path_end = path_to_end(stacks, max_range, range, c); if (path_start < path_end) return (1); return (0); } int stack_len(t_stack *stack) { t_stack *first; int i; first = stack; i = 1; while (first->next != stack) { first = first->next; i++; } return (i); } void bucket_algo(t_stacks *stacks, t_tab *preset, int range) { t_tab *tmp; tmp = preset; while (stacks->a) pb(stacks); while (preset) { push_range_to_b(stacks, preset, range); if (preset->next) tmp = preset->next; else tmp = NULL; if (preset) free(preset); preset = tmp; } while (stacks->b) pa(stacks); return ; }