/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* cost.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: fgras-ca +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/07/31 19:46:52 by fgras-ca #+# #+# */ /* Updated: 2023/07/31 19:57:18 by fgras-ca ### ########.fr */ /* */ /* ************************************************************************** */ #include "push_swap.h" void get_cost(t_stack **stack_a, t_stack **stack_b) { t_stack *tmp_a; t_stack *tmp_b; int size_a; int size_b; tmp_a = *stack_a; tmp_b = *stack_b; size_a = get_stack_size(tmp_a); size_b = get_stack_size(tmp_b); while (tmp_b) { tmp_b->cost_b = tmp_b->pos; if (tmp_b->pos > size_b / 2) tmp_b->cost_b = (size_b - tmp_b->pos) * -1; tmp_b->cost_a = tmp_b->target_pos; if (tmp_b->target_pos > size_a / 2) tmp_b->cost_a = (size_a - tmp_b->target_pos) * -1; tmp_b = tmp_b->next; } } void do_cheapest_move(t_stack **stack_a, t_stack **stack_b) { t_stack *tmp; int cheapest; int cost_a; int cost_b; tmp = *stack_b; cheapest = INT_MAX; while (tmp) { if (nb_abs(tmp->cost_a) + nb_abs(tmp->cost_b) < nb_abs(cheapest)) { cheapest = nb_abs(tmp->cost_b) + nb_abs(tmp->cost_a); cost_a = tmp->cost_a; cost_b = tmp->cost_b; } tmp = tmp->next; } do_move(stack_a, stack_b, cost_a, cost_b); }