Push_swap est un projet de l'école 42 qui consiste à trier une pile d'entiers en utilisant un ensemble d'instructions prédéfinies. L'objectif est d'écrire un programme efficace capable de résoudre ce problème avec un minimum de mouvements. 🚀
Le programme Push_swap prend en entrée une liste d'entiers (positifs ou négatifs) et génère une séquence d'instructions pour trier ces entiers en utilisant deux piles (a et b). Les instructions valides sont :
sa: Échanger les deux premiers éléments de la pilea.sb: Échanger les deux premiers éléments de la pileb.ss: Effectuersaetsbsimultanément.pa: Pousser le premier élément debsura.pb: Pousser le premier élément deasurb.ra: Faire tourner tous les éléments deavers le haut.rb: Faire tourner tous les éléments debvers le haut.rr: Effectuerraetrbsimultanément.rra: Faire tourner tous les éléments deavers le bas.rrb: Faire tourner tous les éléments debvers le bas.rrr: Effectuerrraetrrbsimultanément.
📁 push_swap
├── 📄 Makefile # Pour compiler le programme
├── 📁 data
└── 📄 README.md # Documentation du projet
├── 📁 src/ # Contient le code source
├── 📁 app/ # Contient le code source de l'application
├── main.c # Point d'entrée principal
├── 📁 inc # Fichiers d'en-tête (.h)
└── 📄 README.md # Documentation du projet
Pour compiler le programme, exécutez simplement la commande :
makeCela génère un exécutable appelé push_swap.
Exemple d'utilisation :
./push_swap 4 3 2 1Le programme retournera une série d'instructions qui, lorsqu'exécutées, trieront les nombres donnés.
- Vérifie la validité des entrées (nombres entiers, sans doublons).
- Trie les nombres en utilisant des algorithmes optimisés pour différents cas (petites ou grandes piles).
- Produit une sortie minimale pour le tri.
Pour tester votre programme :
- Compiler le projet avec
make. - Lancer des tests avec des piles aléatoires :
ARG="4 3 2 1"; ./push_swap $ARG | ./checker_linux $ARG- Vérifier le nombre de coups utilisés :
ARG="4 3 2 1"; ./push_swap $ARG | wc -l- Gérer les erreurs (valeurs non numériques, doublons, dépassement des limites d'un entier).
- Être efficace dans le nombre d'instructions générées.
- Fournir une solution correcte dans tous les cas.
- Comprendre et implémenter des algorithmes de tri.
- Optimiser des solutions pour réduire leur complexité.
- Manipuler des structures de données comme les piles.
Pour toute question ou suggestion :
🛑 Évitez de copier et coller ce code sans comprendre comment il fonctionne ! Le but du projet est d'apprendre et de maîtriser les concepts, pas de tricher. Prenez le temps de lire et d'analyser le code pour en tirer le maximum d'apprentissage. Merci ! 💡
Rendez votre programme aussi efficace et propre que possible. Que le tri soit avec vous ! ✨
