/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* main.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/01/17 21:29:45 by apommier #+# #+# */ /* Updated: 2022/01/19 03:44:06 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ #include "../Utils/push_swap.h" void big_slstclear(t_slist **lst) { t_slist *chr; chr = *lst; while (*lst) { chr = (*lst)->next; free((*lst)->action); free(*lst); *lst = chr; } lst = 0; } t_slist *verify_list(t_slist *a) { t_slist *start; start = a; while (a && a->action) { if (!ft_strcmp("sa\n", a) || !ft_strcmp("rb\n", a) || !ft_strcmp("rr\n", a) || !ft_strcmp("rra\n", a) || !ft_strcmp("rrb\n", a) || !ft_strcmp("rrr\n", a) || !ft_strcmp("ra\n", a) || !ft_strcmp("pa\n", a) || !ft_strcmp("pb\n", a) || !ft_strcmp("sb\n", a)) a = a->next; else { ft_putstr_fd("Error\n", 2); big_slstclear(&start); return (0); } } return (start); } int do_move(t_list **lst, t_list **lst_b, t_slist *a, t_slist *delete) { if (!ft_strcmp("pa\n", a) && !pa(lst, lst_b, &delete)) return (0); else if (!ft_strcmp("pb\n", a) && !pb(lst, lst_b, &delete)) return (0); else if (!ft_strcmp("sa\n", a) && !sa_sb(lst, &delete, 'a', 0)) return (0); else if (!ft_strcmp("sb\n", a) && !sa_sb(lst, &delete, 'a', 0)) return (0); else if (!ft_strcmp("ra\n", a) && !ra_rb(lst, &delete, 'a')) return (0); else if (!ft_strcmp("rb\n", a) && !ra_rb(lst_b, &delete, 'b')) return (0); else if (!ft_strcmp("rra\n", a) && !rra_rrb(lst, &delete, 'a')) return (0); else if (!ft_strcmp("rrb\n", a) && !rra_rrb(lst_b, &delete, 'b')) return (0); else return (do_move2(lst, lst_b, a, &delete)); s_lstclear(&delete); } int checker(t_slist *action, t_list **a) { t_list *lst_b; int lst_size; lst_size = ft_lstsize(*a); lst_b = 0; action = verify_list(action); if (!(*a)) return (0); while (action) { do_move(a, &lst_b, action, 0); action = action->next; } if (is_sorted(*a) && lst_size == ft_lstsize(*a)) ft_putendl_fd("OK", 1); else ft_putendl_fd("KO", 1); return (1); } int main(int argc, char **argv) { t_list *start; t_slist *start_action; char *line; start_action = 0; if (argc == 1) return (1); if (!is_nbr(argc, argv) || !is_double(argc, argv)) { ft_putstr_fd("Error\n", 2); return (0); } start = set_list(--argc, argv); lst_indexing(start); line = get_next_line(0); while (line) { if (line) s_lstadd_back(&start_action, new_slist(line)); line = get_next_line(0); } checker(start_action, &start); ft_lstclear(&start, &free); big_slstclear(&start_action); return (1); }