https://github.com/mbah24-dev/push_swap
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. 🚀
https://github.com/mbah24-dev/push_swap
algorithms c data-structures
Last synced: 9 months ago
JSON representation
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. 🚀
- Host: GitHub
- URL: https://github.com/mbah24-dev/push_swap
- Owner: mbah24-dev
- Created: 2024-12-19T01:18:58.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-02-03T18:44:56.000Z (11 months ago)
- Last Synced: 2025-02-03T19:39:34.393Z (11 months ago)
- Topics: algorithms, c, data-structures
- Language: C
- Homepage:
- Size: 99.6 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 📦 Push_swap
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. 🚀
---
## 📝 Sujet
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 pile `a`.
- `sb` : Échanger les deux premiers éléments de la pile `b`.
- `ss` : Effectuer `sa` et `sb` simultanément.
- `pa` : Pousser le premier élément de `b` sur `a`.
- `pb` : Pousser le premier élément de `a` sur `b`.
- `ra` : Faire tourner tous les éléments de `a` vers le haut.
- `rb` : Faire tourner tous les éléments de `b` vers le haut.
- `rr` : Effectuer `ra` et `rb` simultanément.
- `rra` : Faire tourner tous les éléments de `a` vers le bas.
- `rrb` : Faire tourner tous les éléments de `b` vers le bas.
- `rrr` : Effectuer `rra` et `rrb` simultanément.
---
## 📂 Structure du projet
```
📁 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
```
---
## ⚙️ Compilation
Pour compiler le programme, exécutez simplement la commande :
```bash
make
```
Cela génère un exécutable appelé `push_swap`.
---
## 🚀 Utilisation
Exemple d'utilisation :
```bash
./push_swap 4 3 2 1
```
Le programme retournera une série d'instructions qui, lorsqu'exécutées, trieront les nombres donnés.
---
## ✅ Fonctionnalité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.
---
## 🛠️ Tests
Pour tester votre programme :
1. Compiler le projet avec `make`.
2. Lancer des tests avec des piles aléatoires :
```bash
ARG="4 3 2 1"; ./push_swap $ARG | ./checker_linux $ARG
```
3. Vérifier le nombre de coups utilisés :
```bash
ARG="4 3 2 1"; ./push_swap $ARG | wc -l
```
---
## 🔍 Exigences du sujet
- 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.
---
## 🌟 Objectif pédagogique
- 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.
---
## 📧 Contact
Pour toute question ou suggestion :
📩 [mbah@student.42lyon.fr](mailto:mbah@student.42lyon.fr)
---
## ⚠️ Note importante
🛑 **É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 ! 💡
---
## 🏆 Bon courage !
Rendez votre programme aussi efficace et propre que possible. Que le tri soit avec vous ! ✨