Программа сортирует поданные в качестве аргументов числа в возрастающем порядке. Числа должны:
- Быть уникальными (не повторяться).
- являться целыми числами умещающимися в тип Int (-2147483648 ... 2147483647).
- являться числами. Программа должна отлавливать невалидные значения и выдавать ошибку.
Программа состоит из двух частей: push_swap - определяет алгоритм, позволяющий отсортировать заданый набор значений в возрастающем порядке за наименьшее количество доступных действий, и вывести использованный список действий. checker - после запуска принимает из стандартного ввода команды и выполняет полученные команды. После завершаения ввода (Ctrl + d) показывает, отсортированы ли значения в возрастающем порядке (ОК или КО).
sa - меняет местами первые 2 элементы в стеке а.
sb - меняет местами первые 2 элемента в стеке б.
ss - меняет местами первые 2 элемента в обоих стеках одновременно.
pa - перекладывает первый элемент из стека б на верх стека а.
pb - перекладывает первый элемент из стека а на верх стека б.
ra - пересещает все элементы стека а на 1 позицию вверх (первый элемент становится последним).
rb - пересещает все элементы стека б на 1 позицию вверх (первый элемент становится последним).
rr - пересещает все элементы обоих стеков на 1 позицию вверх (первый элемент становится последним).
rra - перемещает все элементы стека а на 1 позицию вниз (последний элмент становится первым).
rrb - перемещает все элементы стека б на 1 позицию вниз (последний элмент становится первым).
rrr -перемещает все элементы в обоих стеках на 1 позицию вниз (последний элемент становится первым).
-d[0..9] - включает режим отладки (выводит на стандартный вывод состояние стеков после каждого действия). Цифры после флага задают задержку вывода после каждого действия, чем больше цифра, тем больше задержка. При отсутствии цифры или при нуле вывод будет осуществлен без задержек между действиями.
-da[0..9] - то же самое, но в "анимированном" режиме. Красивее, но не сохряняется история действий, поэтому для отладки годится плохо.
оба флага корректно работают для checker. Пример команды для корректной работы: ./push_swap 4 5 7 2 -6 100 8 | ./checker -da2 4 5 7 2 -6 100 8
Присутствует работа с файлами. В файле должно содержаться строка с аргументами и флаги. При отсутствии файла или если файл пуст выведется соответствующее сообщение об ошибке. Программа выводит в стандартный вывод считанную строку с аргументами (чтобы пользоатель видел, с чем собирается работать программа). Пример команды для работы с файлами: ./push_swap {test.txt}. Данная команда считает аргументы из файла и выведет в стандартный вывод команды для их сортировки. При добавлениифлага -r (./push_swap -r {test.txt}) запишет команды в файл (если вы думаете, что при наличии флага команды также дублируются в стандартном выводе ради удобства пользователя, чтобы он видел какие команды записываются в файл, то вы сильно ошибаетесь). Danger!! Kolhoz - при записи команд в файл, старые команды не стираются, т.е. при повторном запуске программы. на просто впишет полученную последовательность команд после усже существующе в файле.
Присутствует Makefile. Для компиляции обеих программ введите make. Для компиляции одной из двух программ предусмотрены правила make checker и make pusher.
В репозитории есть честно сгитченный тестер. Инструкция по пользованию: https://github.com/ksnow-be/push_swap_checker