Цель данного проекта отсортировать данные в стеке, по определенным правилам, с использованием минимально возможного количества действий.
Программа push_swap
принимает на вход множество int
значений, сортирует их используя определённые правила и выводит список команд, которые были выполнены. Чтобы сделать это нужно придумать алгоритм и реализовать его.
У нас есть 2 стека a
и b
. Изначально:
a
- содержит случайное число из положительных или отрицательных чисел без дубликатовb
- пустой
Задача заключается в том, чтобы отсортировать в порядке возрастания числа в стеке a
.
В нашем распоряжении есть следующие команды:
sa
- swap a - поменять местами первые 2 элемента на вершине стекаa
. Ничего не делать, если там только один или ни одного элементаsb
- swap b - поменять местами первые 2 элемента на вершине стекаb
. Ничего не делать, если там только один или ни одного элементаss
- одновременное выполнение swap a и swap bpa
- push a - взять первый элемент в вершинеb
и поместить его в вершинуa
. Ничего не делать, еслиb
пустpb
- push b - взять первый элемент в вершинеa
и поместить его в вершинуb
. Ничего не делать, еслиa
пустra
- rotate a - сдвинуть вверх все элементы стекаa
на 1. Первый элемент становится последнимrb
- rotate b - сдвинуть вверх все элементы стекаb
на 1. Первый элемент становится последнимrr
- одновременное выполнение rotate a и rotate brra
- reverse rotate a - сдвинуть вниз все элементы стекаa
на 1. Последний элемент становится первымrrb
- reverse rotate b - сдвинуть вниз все элементы стекаb
на 1. Последний элемент становится первымrrr
- одновременное выполнение reverse rotate a и reverse rotate b
Входные параметры и вывод реализованной программы:
$> ./push_swap 2 1 3 6 5 8
sa
pb
pb
pb
sa
pa
pa
pa
Для выполнения проекта, использовался следующий алгоритм.
Но для безупречной работы, пришлость внести некоторые дополнения.
Если вы уверены что алгоритм работает идеально, можно приступить к бонусу. Нужно написать собственный checker
, повторяющий поведение стандартного checker_OS
.
Входные параметры и вывод реализованной программы:
$> ./checker 2 1 3 6 5 8
sa
pb
pb
pb
sa
pa
pa
pa
OK