/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* sort_2.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: lfirmin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/11/03 11:40:53 by lfirmin #+# #+# */ /* Updated: 2024/11/03 18:10:08 by lfirmin ### ########.fr */ /* */ /* ************************************************************************** */ #include "../include/pushswap.h" void make_move(t_stack *stack_a, t_stack *stack_b, int cheap_ind) { int move[3]; int value_b; int index_a; move[1] = calc_move_stack_2(stack_b, cheap_ind); value_b = return_value(stack_b, cheap_ind); index_a = calc_index_a(stack_a, value_b); move[0] = calc_move_stack_2(stack_a, index_a); move[2] = 0; opti(move); make_move_b(stack_b, move[1]); make_move_a(stack_a, move[0]); make_move_r(stack_b, stack_a, move[2]); push(stack_b, stack_a); ft_printf_fd(1, "pa\n"); } void make_move_a(t_stack *stack_a, int move) { if (move > 0) { while (move != 0) { rotate(stack_a); ft_printf_fd(1, "ra\n"); move--; } } else { while (move != 0) { rrotate(stack_a); ft_printf_fd(1, "rra\n"); move++; } } } void make_move_b(t_stack *stack_b, int move) { if (move > 0) { while (move != 0) { rotate(stack_b); ft_printf_fd(1, "rb\n"); move--; } } else { while (move != 0) { rrotate(stack_b); ft_printf_fd(1, "rrb\n"); move++; } } } void make_move_r(t_stack *stack_b, t_stack *stack_a, int move) { if (move > 0) { while (move != 0) { rotate(stack_b); rotate(stack_a); ft_printf_fd(1, "rr\n"); move--; } } else { while (move != 0) { rrotate(stack_b); rrotate(stack_a); ft_printf_fd(1, "rrr\n"); move++; } } } int calc_move_stack_2(t_stack *stack, int index) { t_node *curr; int i; int ind; ind = index; curr = stack->top; while (ind > 1) { curr = curr->next; ind--; } if (index - 1 < stack->size - index + 1) i = index - 1; else i = (stack->size - index + 1) * -1; return (i); }