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 ; }
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); }
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); }
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); }
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); }
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); }
char *ft_rrr(t_control **list) { if (!list || !*list) ft_exit("Error\n"); ft_rra(list); ft_rrb(list); return ("rrr"); }
static int ft_rrr(t_ps *ps) { int i; i = 0; i += ft_rra(ps); i += ft_rrb(ps); return (i); }
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); }
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); }