Checker en Haskell qui valide si une sequence d'operations push_swap trie effectivement une liste d'entiers.
Telecharger & tester
make puis echo "sa pb pb pb sa pa pa pa" | ./pushswap_checker 2 1 3 6 5 8
Rush 1 (B-PDG-300, "Pushswap-checker") est un rush Epitech en Haskell realise durant la piscine de debut de Tek2. L'objectif : ecrire un programme qui verifie si une sequence d'operations push_swap trie effectivement une liste d'entiers, sans reimplementer l'algorithme de tri lui-meme.
Le jeu repose sur deux piles l_a et l_b : l_a contient au depart la liste a trier, l_b est vide. Onze operations sont disponibles (sa/sb/sc pour permuter les 2 premiers elements, pa/pb pour deplacer un element entre les piles, ra/rb/rr pour rotation vers le haut, rra/rrb/rrr pour rotation vers le bas), chacune agissant en O(1) sur les piles.
Le programme recoit la liste d'entiers signes en argument et lit une ligne d'operations sur l'entree standard, puis simule leur execution. Il affiche OK si le resultat final est une liste triee (et la seconde pile vide), KO sinon - avec possibilite d'afficher l'etat des deux piles en cas d'echec. Un code d'erreur 84 est renvoye en cas d'entree invalide.
En bonus, le sujet invite a implementer un vrai push_swap (l'algorithme de tri, pas seulement son verificateur) en Haskell, pour comparer les performances avec une version C classique de l'exercice.
Projet suivant
