push_swap
es un proyecto de la escuela 42 cuyo objetivo es ordenar una pila de enteros utilizando un conjunto limitado de operaciones, con el menor número de movimientos posible. El proyecto se divide en dos partes:
- Un programa en C llamado
push_swap
, que toma una lista de enteros como argumento y muestra por la salida estándar la secuencia de operaciones necesarias para ordenarlos. - Un checker (opcional pero útil para pruebas), que recibe una lista de operaciones y verifica si el resultado es una pila ordenada correctamente.
Implementar un algoritmo de ordenamiento optimizado que use únicamente las siguientes operaciones permitidas sobre dos pilas (a
y b
):
- Swap
sa
: intercambia los dos primeros elementos dea
sb
: intercambia los dos primeros elementos deb
ss
:sa
ysb
al mismo tiempo
- Push
pa
: toma el primer elemento deb
y lo pone ena
pb
: toma el primer elemento dea
y lo pone enb
- Rotate
ra
: rotaa
hacia arribarb
: rotab
hacia arribarr
:ra
yrb
al mismo tiempo
- Reverse Rotate
rra
: rotaa
hacia abajorrb
: rotab
hacia abajorrr
:rra
yrrb
al mismo tiempo
git clone https://github.com/erico-ke/push_swap-42MalagaProyect.git push_swap
cd push_swap
make
Esto generará el ejecutable push_swap
.
./push_swap 3 2 1
Este comando imprimirá una secuencia de instrucciones que ordenará la pila [3, 2, 1]
utilizando las operaciones permitidas.
Ejemplo:
sa
rra
Puedes usar el checker
para validar si la secuencia de instrucciones es correcta:
ARG="3 2 1"
./push_swap $ARG | ./checker_linux $ARG
Salida esperada: OK
si está ordenado correctamente, KO
si no.
push_swap/
│
├── src/
│ ├── main.c
| ├── push_swap.h
│ ├── algorithm/
| | ├── is_sorted.c
| | ├── push_swap.c
| | └── setter.c
│ ├── control/
| | └── parser.c
│ ├── moves/
| | ├── push.c
| | ├── rotate.c
| | ├── r_rotate.c
| | └── swap.c
│ └── utils/
| ├── error.c
| ├── lst_managment.c
| └── utils.c
├── src/libft
│
├── Makefile
├── checker_linux
└── README.md
- Nombre: Elias Rico Kergaravat
- GitHub: https://github.com/erico-ke
Proyecto realizado como parte del programa de 42 Network.