Exemplo n.º 1
0
void	ft_algoperfect(t_nb *nb, int list_a[nb->nba], int list_b[nb->nbb])
{
	if (ft_perfect(nb, list_a, 0))
		return ;
	ft_rra(nb, list_a, list_b);
	ft_rra(nb, list_a, list_b);
	ft_sa(nb, list_a, list_b);
	ft_ra(nb, list_a, list_b);
	ft_ra(nb, list_a, list_b);
	return ;
}
Exemplo n.º 2
0
int		main(int ac, char **av)
{
	t_lst	*a;
	t_lst	*b;
	int		i;

	a = NULL;
	b = NULL;
	i = 1;
	if (ac == 1)
		ft_putendl("Error. No number.");
	else
	{
		while (av[i])
		{
			if (check_param(av[i]) == -1)
			{
				ft_putendl("Error.");
				exit(0);
			}
			a = add_new_number(a, av[i]);
			i++;
		}
	}
	ft_rra(&a);
	aff_lst(a);
	ft_putendl("");
	aff_lst(b);
	ft_putendl("");
	return (0);
}
Exemplo n.º 3
0
int				ft_f(int f, t_ps *ps)
{
	if (f == SA)
		return (ft_sa(ps));
	else if (f == SB)
		return (ft_sb(ps));
	else if (f == SS)
		return (ft_ss(ps));
	else if (f == PB)
		return (ft_pb(ps));
	else if (f == PA)
		return (ft_pa(ps));
	else if (f == RA)
		return (ft_ra(ps));
	else if (f == RB)
		return (ft_rb(ps));
	else if (f == RR)
		return (ft_rr(ps));
	else if (f == RRA)
		return (ft_rra(ps));
	else if (f == RRB)
		return (ft_rrb(ps));
	else if (f == RRR)
		return (ft_rrr(ps));
	return (0);
}
Exemplo n.º 4
0
void	small_swap(t_shell *h)
{
	while (l_len(h->sa) > 1)
	{
		if (l_len(h->sb) > 1 && h->sa->nb > h->sa->n->nb &&
h->sb->nb < h->sb->n->nb)
			ft_ss(h, 1);
		else if (h->sa->nb > h->sa->n->nb)
			ft_sa(h, 1);
		else if (l_len(h->sb) > 1 && h->sb->nb < h->sb->n->nb)
			ft_sb(h, 1);
		if (h->max == h->sa->nb || (l_len(h->sb) > 2 &&
h->sa->nb > h->sa->n->nb && h->sa->nb > h->sa->n->n->nb))
			ft_ra(h, 1);
		while (l_len(h->sa) > 2 &&
l_nb(h->sa) < h->sa->nb && l_nb(h->sa) < h->sa->n->nb)
			ft_rra(h, 1);
		if (l_len(h->sb) > 1 && l_nb(h->sb) > h->sb->nb)
			ft_rrb(h, 1);
		if (ft_sorted(h->sa))
			break ;
		ft_pb(h, 1);
		if (l_len(h->sb) > 2 && ((h->sb->nb < h->sb->n->nb
	&& h->sb->nb < h->sb->n->n->nb) || l_nb(h->sb) > h->sb->nb))
			ft_rb(h, 1);
	}
	push_swap_suite(h);
}
Exemplo n.º 5
0
void	rempile(t_shell *head)
{
	if (l_nb(head->sa) > head->sa->nb)
		ft_rra(head, 1);
	while (l_len(head->sb) > 1)
	{
		if (l_len(head->sb) > 2 && head->sb->nb > head->sb->n->nb &&
head->sb->nb > head->sb->n->n->nb)
			rb_or_rr(head);
		while (is_bigger(head->sa, head->sb->nb, head->min))
			while_bigger(head);
		ft_pa(head, 1);
		if (head->sa->nb > head->sa->n->nb && head->sa->n->nb != head->min)
		{
			if (l_len(head->sb) > 1 && head->sb->nb > head->sb->n->nb)
				ft_ss(head, 1);
			else
				ft_sa(head, 1);
		}
		while (is_smallest(head->sb, head->sa->nb) && !ft_sorted(head->sa))
			while_smallest(head);
	}
	ft_pa(head, 1);
	if (head->sa->nb > head->sa->n->nb && head->sa->n->nb != head->min)
		ft_sa(head, 1);
	ft_ra(head, 1);
}
Exemplo n.º 6
0
void	ft_algo20(int mid, t_nb *nb, int list_a[nb->nba], int list_b[nb->nbb])
{
	int smallnb;

	smallnb = ft_find_smallnb(nb->nba, list_a);
	if (ft_perfect(nb, list_a, 0))
		while (nb->nbb != 0)
			ft_pa(nb, list_a, list_b);
	if (ft_perfect(nb, list_a, 0))
		return ;
	if (ft_smallnb(nb->nba, list_a, 0, nb->nba - 2) == 1)
		ft_sa(nb, list_a, list_b);
	if (smallnb >= mid && ft_smallnb(nb->nba, list_a, 0, nb->nba - 1) == 0)
		while (ft_smallnb(nb->nba, list_a, 0, nb->nba - 1) == 0)
			ft_ra(nb, list_a, list_b);
	else if (smallnb < mid && ft_smallnb(nb->nba, list_a, 0, nb->nba - 1) == 0)
		while (ft_smallnb(nb->nba, list_a, 0, nb->nba - 1) == 0)
			ft_rra(nb, list_a, list_b);
	if (ft_smallnb(nb->nba, list_a, 0, nb->nba - 1) && nb->nba > 3 &&
	ft_perfect(nb, list_a, 0) == 0)
		ft_pb(nb, list_a, list_b);
	if (nb->nba <= 3)
		ft_algo3(nb, list_a, list_b);
	if (nb->nba <= 3)
		while (nb->nbb != 0)
			ft_pa(nb, list_a, list_b);
	ft_algo20(mid, nb, list_a, list_b);
}
Exemplo n.º 7
0
char	*ft_rrr(t_control **list)
{
	if (!list || !*list)
		ft_exit("Error\n");
	ft_rra(list);
	ft_rrb(list);
	return ("rrr");
}
Exemplo n.º 8
0
static int		ft_rrr(t_ps *ps)
{
	int		i;

	i = 0;
	i += ft_rra(ps);
	i += ft_rrb(ps);
	return (i);
}
Exemplo n.º 9
0
void	ft_algo3(t_nb *nb, int list_a[nb->nba], int list_b[nb->nbb])
{
	if (ft_perfect(nb, list_a, 0))
		return ;
	if (ft_bignb(nb->nba, list_a, 0, 1) == 1)
		ft_rra(nb, list_a, list_b);
	else if (ft_bignb(nb->nba, list_a, 0, 2) == 1)
		ft_ra(nb, list_a, list_b);
	else
		ft_sa(nb, list_a, list_b);
	ft_algo3(nb, list_a, list_b);
}
Exemplo n.º 10
0
static int	ft_mix_ter(t_ps *a, t_env *env, int biggest_rp)
{
	int i;
	int tmp;

	i = 0;
	tmp = 0;
	while (a && a->rp != biggest_rp)
	{
		if (tmp == 0)
			tmp = ft_r_or_rr(env->a_first, 0, biggest_rp) == 1 ? 1 : 2;
		if (tmp == 1)
			i += ft_ra(env);
		else
			i += ft_rra(env);
		a = env->a_first;
	}
	return (i);
}