/* sort_stack Copyright (C) 2026 yctct This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "../include/push_swap.h" void double_rrr(int position_a, int position_b, t_list **src, t_list **dst) { int i; while ((ft_lstsize(*src) != position_a) && (ft_lstsize(*dst)) != position_b) { rrr(src, dst); position_a++; position_b++; } i = 0; while (i++ < (ft_lstsize(*dst)) - position_b) rrb(dst); i = 0; while (i++ < (ft_lstsize(*src)) - position_a) rra(src); } void double_rr(int position_a, int position_b, t_list **src, t_list **dst) { int i; while (position_a && position_b) { rr(src, dst); position_a--; position_b--; } i = 0; while (i++ < position_b) rb(dst); i = 0; while (i++ < position_a) ra(src); } void single_r(int position_a, int position_b, t_list **src, t_list **dst) { int i; i = 0; if (position_b > ft_lstsize(*dst) / 2) { while (i++ < (ft_lstsize(*dst)) - position_b) rrb(dst); } else { while (i++ < position_b) rb(dst); } i = 0; if (position_a > ft_lstsize(*src) / 2) { while (i++ < (ft_lstsize(*src)) - position_a) rra(src); } else { while (i++ < position_a) ra(src); } } void rotate_stacks(int position_a, int position_b, t_list **src, t_list **dst) { if ((position_a > ft_lstsize(*src) / 2) && (position_b > ft_lstsize(*dst) / 2)) double_rrr(position_a, position_b, src, dst); else if ((position_a < ft_lstsize(*src) / 2) && (position_b < ft_lstsize(*dst) / 2)) double_rr(position_a, position_b, src, dst); else single_r(position_a, position_b, src, dst); }