/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* optimise_move.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/01/15 23:50:43 by apommier #+# #+# */ /* Updated: 2022/01/17 14:09:26 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ #include"push_swap.h" int ft_strcmp(const char *s1, t_slist *str) { int i; char *s2; if (!str) return (1); s2 = (char *)str->action; i = 0; if (s2) { while (s1[i] || s2[i]) { if (s1[i] != s2[i]) { return ((unsigned char)s1[i] - (unsigned char)s2[i]); } i++; } return (0); } return (1); } void cut_lst(t_slist *lst) { t_slist *save; save = 0; if (!lst) return ; if (lst->next) { save = lst->next->next; lst->next->next = 0; if (lst->next) free(lst->next); lst->next = save; } } t_slist *transform_list(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 = "rr"; start = start->next; } } else { while (r1--) { cut_lst(start2); start->action = "rr"; start = start->next; } } return (type); } t_slist *sequence(t_slist *lst, t_slist *start1, t_slist *start2, int r1) { char *type; int r2; type = 0; r2 = 0; if (!ft_strcmp("ra", lst) || !ft_strcmp("rb", lst)) { type = lst->action; while (!ft_strcmp(type, lst) && r2++ >= 0) lst = lst->next; lst = transform_list(start1, start2, r1, r2); } return (lst); } void optimise_move(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("ra", lst) || !ft_strcmp("rb", lst)) { start1 = lst; type = lst->action; while (!ft_strcmp(type, lst) && r1++ >= 0) { start2 = lst; lst = lst->next; } lst = sequence(lst, start1, start2, r1); } else if (lst) lst = lst->next; } }