push_swap es un proyecto de la escuela 42 cuyo objetivo es ordenar una pila de números enteros utilizando un conjunto mínimo de operaciones y dos pilas (A y B). El reto consiste en diseñar e implementar algoritmos eficientes que reduzcan el número de movimientos necesarios.
- Solo se permite el uso de dos pilas: A (inicial) y B (auxiliar).
- El programa debe mostrar por pantalla la secuencia de instrucciones que ordenan la pila A.
- Solo se pueden usar las siguientes operaciones:
| Operación | Descripción |
|---|---|
sa |
Intercambia los dos primeros elementos de A |
sb |
Intercambia los dos primeros elementos de B |
ss |
sa y sb a la vez |
pa |
Pasa el primer elemento de B a A |
pb |
Pasa el primer elemento de A a B |
ra |
Rota A hacia arriba |
rb |
Rota B hacia arriba |
rr |
ra y rb a la vez |
rra |
Rota A hacia abajo |
rrb |
Rota B hacia abajo |
rrr |
rra y rrb a la vez |
push_swap/
├── src/ # Código fuente principal
├── copia/ # Copias y pruebas de algoritmos
├── make_mac/ # Makefile para Mac
├── Push-Swap-Tester/ # Herramientas de testing y visualización
├── push_swap.h # Header principal
├── Makefile # Compilación
└── README.md # Este archivo
make./push_swap 3 2 1 6 5 8El programa mostrará por pantalla la secuencia óptima de movimientos para ordenar la pila.
$ ./push_swap 2 1 3
sa
$ ./push_swap 3 2 1
pb
sa
pa- Ordenación eficiente para 2, 3, 4 y 5 elementos (casos pequeños optimizados).
- Algoritmo general para n elementos basado en costes y movimientos mínimos.
- Gestión de memoria y control de errores.
Incluye scripts y herramientas para testear y visualizar el funcionamiento:
- Push-Swap-Tester: Testea eficiencia, casos límite y control de errores.
- Visualizador: Permite ver gráficamente los movimientos del algoritmo.
./push_swap_test.sh 100 500./push_swap_test.sh -v 100- Lenguaje: C (Norma 42)
- Gestión dinámica de memoria
- Estructuras de datos: listas doblemente enlazadas para las pilas
- Modularidad y separación de lógica por archivos
- Manuel Fernández
- Email: manufern@student.42.fr
- GitHub: MasterCodeMFE
Este proyecto se distribuye bajo la licencia MIT. Consulta el archivo LICENSE para más detalles.
¡Disfruta optimizando tu algoritmo y aprendiendo estructuras de datos! 🚀
pa
Push A: Mueve el primer elemento de B a la primera posición de A.
pb
Push B: Mueve el primer elemento de A a la primera posición de B.
ra
Rotate A: Rota hacia arriba todos los elementos de A.
rb
Rotate B: Rota hacia arriba todos los elementos de B.
rr
Rotate Both: ra y rb al mismo tiempo.
rra
Reverse Rotate A: Rota hacia abajo todos los elementos de A.
rrb
Reverse Rotate B: Rota hacia abajo todos los elementos de B.
rrr
Reverse Rotate Both: rra y rrb al mismo tiempo.