Esempio n. 1
0
def sortic(mass_a):
    mass_b = []
    mass_commands = []

    while mass_a:

        # индекс минимального элмента
        minimal_index = ft_find_lst(mass_a, ft_min(mass_a))

        # если первый элемент - минимум, то убераем его в другой стэк и сортируем дальше
        if ft_min(mass_a) == mass_a[0]:
            mass_commands.append('pb')
            mass_b.append(mass_a[0])
            mass_a = ft_slice(mass_a, 1, ft_len(mass_a))
        else:
            # находим рассстояние от концов
            # списка до концов списка и находим до куда ближе
            if minimal_index >= ft_len(mass_a) - minimal_index - 1:
                mass_a = rra(mass_a)
                mass_commands.append('rra')
            elif minimal_index <= ft_len(mass_a) - minimal_index - 1:
                mass_a = ra(mass_a)
                mass_commands.append('ra')

    return mass_commands
def rra(mass_a):
    """сдвиг всех элементов стека a на 1 вниз"""
    res = [0] + mass_a
    res[0] = res[-1]
    res_x = []
    for i in range(ft_len(res) - 1):
        res_x.append(res[i])
    return res_x
Esempio n. 3
0
def ra(mass_a):
    """
    сдвиг всех элементов стека а на 1 вверх. Первый элемент становится последним
    """
    x = mass_a[0]
    mass_cop = []
    for i in range(1, ft_len(mass_a)):
        mass_cop.append(mass_a[i])
    mass_cop.append(x)
    return mass_cop
Esempio n. 4
0
def sa(mass_a):
    """Меняет местами первые 2 элемента на вершине стека a"""
    if ft_len(mass_a) > 1:
        mass_a[0], mass_a[1] = mass_a[1], mass_a[0]
        return mass_a
Esempio n. 5
0
def sb(mass_b):
    """Меняет местами первые 2 элемента на вершине стека b"""
    if ft_len(mass_b) > 1:
        mass_b[0], mass_b[1] = mass_b[1], mass_b[0]
        return mass_b