Trier les données sur une pile
Ce projet vous fera trier les données sur une pile, avec un ensemble limité d'instructions, en utilisant le plus bas nombre d'actions possibles. Pour réussir, vous devrez manipuler divers types d'algorithmes et choisir la solution la plus appropriée (parmi beaucoup) pour un tri de données optimisé. Version: 6 .
Vous pouvez lire le sujet: push_swap.pdf
Triez une liste aléatoire d'entiers en utilisant le plus petit nombre de mouvements, 2 piles et un ensemble limité d'opérations.
Vous commencez avec deux piles vides: a et b . Vous avez une liste aléatoire d'entiers via des arguments de ligne de commande.
Seuls ces mouvements sont autorisés:
sa : Échangez A - Échangez les 2 premiers éléments en haut de la pile a. Ne faites rien s'il n'y a qu'un ou aucun éléments).sb : Swap B - Échangez les 2 premiers éléments en haut de la pile b. Ne faites rien s'il n'y a qu'un ou aucun éléments).ss : sa et sb en même temps.pa : Poussez A - Prenez le premier élément en haut de B et placez-le en haut de a. Ne faites rien si B est vide.pb : Push B - Prenez le premier élément en haut de A et placez-le en haut de B. Ne faites rien si A est vide.ra : Tournez A - Déplacez tous les éléments de la pile A par 1. Le premier élément devient le dernier.rb : Rotation B - Déplacez tous les éléments de la pile B par 1. Le premier élément devient le dernier.rr : ra et rb en même temps.rra : inverser la tournure A - Déplacez tous les éléments de la pile A par 1. Le dernier élément devient le premier.rrb : inverser la rotation B - Déplacez tous les éléments de la pile B par 1. Le dernier élément devient le premier.rrr : rra et rrb en même temps. À la fin, la pile B doit vider vide et tous les entiers doivent être dans la pile A , trié par ordre croissant.
Créez deux programmes: checker et push_swap .
Le programme checker lit une liste aléatoire des entiers du stdin, les stocke et vérifie s'ils sont triés.
Le programme push_swap calcule les mouvements pour trier les entiers - poussant, éclatez, échangeant et tournant entre pile A et pile B - et affiche ces directions sur le stdout.
Vous pouvez tuer push_swap dans checker et checker vérifiera que les instructions de push_swap ont réussi.
Les deux programmes doivent analyser l'entrée obligatoirement pour les erreurs, y compris les chaînes vides, pas de paramètres, des paramètres non numériques, des doublons et des instructions non valides / inexistantes.
Push_swap doit être conforme à la norme 42.
L'utilisation de fonctions libc normales est strictement interdite. Les étudiants sont cependant autorisés à utiliser: write , read , malloc , free , exit . Il ne doit pas avoir de fuites de mémoire. Les erreurs doivent être traitées attentivement.
Il ne peut en aucun cas s'arrêter de manière inattendue (défaut de segmentation, erreur de bus, double libre, etc.).
Toutes les erreurs comme: les mauvaises commandes, l'autorisation aux fichiers et etc. doivent être gérées.
Testeur