Push_swap/checker_folder/main.c
2022-01-19 04:01:40 +01:00

126 lines
3.2 KiB
C

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