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); }
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 ft_algofusion2(t_nb *nb, int list_a[nb->nba], int list_b[nb->nbb]) { if (ft_find_bignb(nb->nbb, list_b) >= ft_middle(nb->nbb)) { while (ft_bignb(nb->nbb, list_b, 0, nb->nbb - 1) == 0) ft_rb(nb, list_b, list_a); ft_pa(nb, list_a, list_b); if (nb->nbinj[nb->i] == 2 && list_a[nb->nba - 1] > list_a[nb->nba - 2]) ft_sa(nb, list_a, list_b); } else if (ft_find_bignb(nb->nbb, list_b) < ft_middle(nb->nbb)) { while (ft_bignb(nb->nbb, list_b, 0, nb->nbb - 1) == 0) ft_rrb(nb, list_b, list_a); ft_pa(nb, list_a, list_b); if (nb->nbinj[nb->i] == 2 && list_a[nb->nba - 1] > list_a[nb->nba - 2]) ft_sa(nb, list_a, list_b); } }
int ft_recus_2(t_push **stacka, t_push **stackb, int i, t_info *info) { if (*stackb != NULL) { ft_pa(stacka, stackb); info->str = ft_strjoin(info->str, "pa "); if (ft_recus(stacka, stackb, i - 1, info) == 1) return (1); info->str = ft_del_last_c(info->str, 3); ft_sort_pb(stacka, stackb); } if (*stacka != NULL) { ft_sort_pb(stacka, stackb); info->str = ft_strjoin(info->str, "pb "); if (ft_recus(stacka, stackb, i - 1, info) == 1) return (1); info->str = ft_del_last_c(info->str, 3); ft_pa(stacka, stackb); } return (0); }
static int ft_algo_ter(t_ps *b, t_env *env) { int i; int biggest_rp; i = 0; b = env->b_first; biggest_rp = ft_biggest_rp(env->b_first); while (b->rp != biggest_rp) { i += ft_rb(env); b = env->b_first; } while (b != NULL) { i += ft_pa(env); b = env->b_first; } return (i); }
void push_swap_suite(t_shell *head) { while (l_len(head->sb) > 0) { while (l_len(head->sb) > 1 && l_nb(head->sb) > head->sb->nb) ft_rrb(head, 1); ft_pa(head, 1); if (l_len(head->sb) > 1 && l_len(head->sa) > 1 && head->sa->nb > head->sa->n->nb && head->sb->nb < head->sb->n->nb) ft_ss(head, 1); else { if (head->sa->nb > head->sa->n->nb) ft_sa(head, 1); if (l_len(head->sb) > 1 && head->sb->nb < head->sb->n->nb) ft_sb(head, 1); } } }
void ft_nba4(int middle, t_nb *nb, int list_a[nb->nba], int list_b[nb->nbb]) { int compt; compt = middle / 2; while (nb->nba == nb->nbinj[nb->i]) { while (nb->nbb != nb->nbinj[0] - nb->nbinj[nb->i - 1]) ft_pa(nb, list_a, list_b); while (ft_find_inf_middlenb(nb, list_a, middle) == 0) { if (list_a[nb->nba - 1] <= middle) ft_pb(nb, list_a, list_b); if (list_a[nb->nba - 1] > middle) ft_ra(nb, list_a, list_b); } middle = middle + compt; if ((compt / 2) % 2 == 0) compt = compt / 2; else compt = (compt + 1) / 2; } return ; }
static void viderl2(t_push *p) { while (p->nbl2 != 0) ft_pa(p); return ; }