84 lines
2.0 KiB
C
84 lines
2.0 KiB
C
/* ************************************************************************** */
|
|
/* */
|
|
/* ::: :::::::: */
|
|
/* optimise_move2.c :+: :+: :+: */
|
|
/* +:+ +:+ +:+ */
|
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
|
/* +#+#+#+#+#+ +#+ */
|
|
/* Created: 2022/01/17 07:44:45 by apommier #+# #+# */
|
|
/* Updated: 2022/01/17 14:16:41 by apommier ### ########.fr */
|
|
/* */
|
|
/* ************************************************************************** */
|
|
|
|
#include "push_swap.h"
|
|
|
|
t_slist *transform_list2(t_slist *start, t_slist *start2, int r1, int r2)
|
|
{
|
|
t_slist *type;
|
|
|
|
type = start;
|
|
if (r2 < r1)
|
|
{
|
|
while (r2--)
|
|
{
|
|
cut_lst(start2);
|
|
start->action = "rrr";
|
|
start = start->next;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
while (r1--)
|
|
{
|
|
cut_lst(start2);
|
|
start->action = "rrr";
|
|
start = start->next;
|
|
}
|
|
}
|
|
return (type);
|
|
}
|
|
|
|
t_slist *sequence2(t_slist *lst, t_slist *start1, t_slist *start2, int r1)
|
|
{
|
|
char *type;
|
|
int r2;
|
|
|
|
type = 0;
|
|
r2 = 0;
|
|
if (!ft_strcmp("rra", lst) || !ft_strcmp("rrb", lst))
|
|
{
|
|
type = lst->action;
|
|
while (!ft_strcmp(type, lst) && r2++ >= 0)
|
|
lst = lst->next;
|
|
lst = transform_list2(start1, start2, r1, r2);
|
|
}
|
|
return (lst);
|
|
}
|
|
|
|
void optimise_move2(t_slist **action, t_slist *start2, int r1)
|
|
{
|
|
t_slist *start1;
|
|
t_slist *lst;
|
|
char *type;
|
|
|
|
type = 0;
|
|
lst = *action;
|
|
while (lst)
|
|
{
|
|
r1 = 0;
|
|
if (!ft_strcmp("rra", lst) || !ft_strcmp("rrb", lst))
|
|
{
|
|
start1 = lst;
|
|
type = lst->action;
|
|
while (!ft_strcmp(type, lst) && r1++ >= 0)
|
|
{
|
|
start2 = lst;
|
|
lst = lst->next;
|
|
}
|
|
lst = sequence2(lst, start1, start2, r1);
|
|
}
|
|
else if (lst)
|
|
lst = lst->next;
|
|
}
|
|
}
|