Сортировать данные в стеке
Этот проект заставит вас сортировать данные в стеке с ограниченным набором инструкций, используя самое низкое количество действий. Чтобы добиться успеха, вам придется манипулировать различными типами алгоритмов и выбрать наиболее подходящее решение (из многих) для оптимизированной сортировки данных. Version: 6 .
Вы можете прочитать тему: push_swap.pdf
Сортируйте случайный список целых чисел, используя наименьшее количество движений, 2 стека и ограниченный набор операций.
Вы начинаете с двух пустых стеков: A и B. Вам предоставляется случайный список целых чисел через аргументы командной строки.
Только эти движения разрешены:
sa : Поменяйте A - замените первые 2 элемента в верхней части стека A. Ничего не делай, если есть только один или нет элементов).sb : SWAP B - замените первые 2 элемента в верхней части стека b. Ничего не делай, если есть только один или нет элементов).ss : sa и sb в то же время.pa .: Нажмите - возьмите первый элемент в верхней части B и положите его на вершину. Ничего не делай, если б пуст.pb : Push B - возьмите первый элемент в верхней части A и положите его на вершину b. Ничего не делай, если А пуст.ra : Поверните - сдвиньте все элементы стека A B -by. Первый элемент становится последним.rb : Поверните B - Сдвиньте все элементы стека B на 1. Первый элемент становится последним.rr : ra и rb в то же время.rra : Обратный вращение A - Сдвиг вниз по всем элементам стека A B -1. Последний элемент становится первым.rrb : обратный поворот B - Сдвиньте все элементы стека B на 1. Последний элемент становится первым.rrr : rra и rrb одновременно. В конце, стек B должен опустошать пустое, и все целые числа должны быть в стеке A , отсортированной в порядке возрастания.
Создайте две программы: checker и push_swap .
Программа checker считывает случайный список целых чисел из stdin, хранит их и проверяет, есть ли они отсортированы.
Программа push_swap вычисляет движения для сортировки целых чисел - толкание, всплывание, обмена и вращение их между стеком A и стеком B - и отображает эти направления на Stdout.
Вы можете подготовить push_swap в checker , и checker убедится, что инструкции push_swap были успешными.
Обе программы должны мандативно анализировать ввод по ошибкам, включая пустые строки, без параметров, ненужных параметров, дубликатов и недопустимых/несуществующих инструкций.
Push_swap должен соответствовать 42 норме.
Использование нормальных функций libc строго запрещено. Студенты, однако, разрешено использовать: write , read , malloc , free , exit . У него не должно быть утечек памяти. Ошибки должны быть осторожно обработаны.
Он никоим образом не может уйти неожиданным образом (ошибка сегментации, ошибка шины, двойной свободный и т. Д.).
Все ошибки, такие как: неправильные команды, разрешение на файлы и т. Д., Необходимо обработать.
Тестер