Push_swap/srcs/sort_2.c

121 lines
2.5 KiB
C

/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* sort_2.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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);
}