push_swap - это второй алгоритмический проект Школы 21, состоящий из 2-ух программ: checker
и push_swap
. Главная цель - сортировка массива с помощью 2-ух стеков за наименьшее количество определенных команд. Написан на языке C с использование собственной библиотеки libft с небольшими дополнениями.
Подробнее: push_swap
sa
: меняет местами 2 элемента на вершине стека a (в случае, когда в стеке 1 элемент, ничего не делать)sb
: меняет местами 2 элемента на вершине стека b (в случае, когда в стеке 1 элемент, ничего не делать)ss
: одновременно выполняютсяsa
иsb
pa
: перемещает элемент, находящийся на вершине стека b, наверх стека a (ничего не делать, если стек b пуст)pa
: перемещает элемент, находящийся на вершине стека a, наверх стека b (ничего не делать, если стек a пуст)ra
: сдвиг всех элементов стекаa
на 1 вверх, первый элемент становится последнимrb
: сдвиг всех элементов стекаb
на 1 вверх, первый элемент становится последнимrr
: одновременно выполняютсяra
иrb
rra
: сдвиг всех элементов стекаa
на 1 вниз, последний элемент становится первымrrb
: сдвиг всех элементов стекаb
на 1 вниз, последний элемент становится первымrrr
: одновременно выполняютсяrra
иrrb
Данная программа принимает на вход массив чисел (условия правильной подачи входных параметров указаны тут), которые и формируют стек a, а затем набор комманд, описанных выше. Результатом является надпись OK (в случае, когда после введенных комманд стек a отсортировался, а стек b пуст) или KO (в ином случае соответственно).
Пример:
$>./checker 3 2 1 0
rra
pb
sa
rra
pa
OK
Вторая программа, которая вычисляет и отображает через стандартный выход наименьшее количество операций(sa,sb,ra,....), требуемых для отсортировки стека a.
$>./push_swap 2 1 3 6
pb
ra
pa
rra
Собирать проект с помощью команды make
.
Для запуска checker требуется ввести следующее:
$>./checker [исходный массив чисел] *Enter*
[ввод команд]
*Ctrl+D* - завершение ввода команд
Для запуска push_swap:
./push_swap [исходный массив чисел]
Также, для этого проекта были реализованы следующие бонуса: визуализация стеков -v
и представление их в цвете -c
./push_swap -v -c 5 3 1 7