Skip to content

MasterCodeMFE/push_swap

Repository files navigation

🥇 push_swap

42 Project C Language Algoritmia

Proyecto de Algoritmia y Estructuras de Datos - 42 Madrid


📋 Descripción

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.


🧩 Reglas y Operaciones

  • 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

🗂️ Estructura del Proyecto

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

🚀 Compilación y Ejecución

1. Compilar

make

2. Uso básico

./push_swap 3 2 1 6 5 8

El programa mostrará por pantalla la secuencia óptima de movimientos para ordenar la pila.


💡 Ejemplo de Ejecución

$ ./push_swap 2 1 3
sa
$ ./push_swap 3 2 1
pb
sa
pa

🧠 Algoritmos Implementados

  • 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.

🧪 Testing y Visualización

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.

Ejemplo de test automático:

./push_swap_test.sh 100 500

Visualización:

./push_swap_test.sh -v 100

📁 Detalles Técnicos

  • 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

👨‍💻 Autor


📝 Licencia

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.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published