Skip to content

This project implements the push_swap program to sort integers using two stacks, a and b. The goal is to arrange numbers in stack a in ascending order through a defined set of operations. Stack b starts empty and supports swaps, pushes, and rotations. The program outputs the shortest instruction list for sorting while avoiding global variables.

Notifications You must be signed in to change notification settings

victorberdugo1/push_swap

Repository files navigation

push_swap

V.1. Reglas

Descripción General

En este proyecto, trabajas con dos pilas (stacks) denominadas a y b. Tu objetivo es ordenar los números en la pila a en orden ascendente, utilizando un conjunto específico de operaciones permitidas. La pila b comienza vacía.

Operaciones Disponibles

  • sa (swap a): Intercambia los dos primeros elementos de la pila a. No hace nada si hay uno o ningún elemento.
  • sb (swap b): Intercambia los dos primeros elementos de la pila b. No hace nada si hay uno o ningún elemento.
  • ss (swap a y swap b): Realiza sa y sb simultáneamente.
  • pa (push a): Mueve el primer elemento de la pila b al principio de la pila a. No hace nada si b está vacío.
  • pb (push b): Mueve el primer elemento de la pila a al principio de la pila b. No hace nada si a está vacío.
  • ra (rotate a): Desplaza todos los elementos de la pila a una posición hacia arriba, haciendo que el primer elemento pase a ser el último.
  • rb (rotate b): Desplaza todos los elementos de la pila b una posición hacia arriba, haciendo que el primer elemento pase a ser el último.
  • rr (rotate a y rotate b): Realiza ra y rb simultáneamente.
  • rra (reverse rotate a): Desplaza todos los elementos de la pila a una posición hacia abajo, haciendo que el último elemento pase a ser el primero.
  • rrb (reverse rotate b): Desplaza todos los elementos de la pila b una posición hacia abajo, haciendo que el último elemento pase a ser el primero.
  • rrr (reverse rotate a y reverse rotate b): Realiza rra y rrb simultáneamente.

V.2. Ejemplo

A continuación, se muestra un ejemplo de cómo se aplican las instrucciones para ordenar una lista de números:

Inicialización de a y b:
2
1
3
6
5
8
_ _
a b
Ejecutar `sa`:
1
2
3
6
5
8
_ _
a b
Ejecutar `pb pb pb`:
6 3
5 2
8 1
_ _
a b
Ejecutar `ra rb` (equivale a `rr`):
5 2
8 1
6 3
_ _
a b
Ejecutar `rra rrb` (equivalente a `rrr`):
6 3
5 2
8 1
_ _
a b
Ejecutar `sa`:
5 3
6 2
8 1
_ _
a b
Ejecutar `pa pa pa`:
1
2
3
5
6
8
_ _
a b

V.3. El Programa: push_swap

Aspecto Detalle
Nombre del Programa push_swap
Archivos a Entregar Makefile, *.h, *.c
Makefile Debe incluir las reglas: NAME, all, clean, fclean, re
Argumentos Stack a: Una lista de números enteros. El primer argumento debe ser el que esté en la parte superior del stack.
Funciones Permitidas read, write, malloc, free, exit, ft_printf y cualquier función equivalente creada
Uso de libft Permitido
Descripción Ordenar stacks.

El programa debe:

  • Leer los números del stack a y ordenarlos de menor a mayor.
  • Mostrar la lista de instrucciones más corta posible para ordenar el stack a.
  • Las instrucciones deben separarse utilizando un salto de línea (\n).

Requisitos

  • No se permiten variables globales.
  • El programa debe mostrar un mensaje de error ("Error\n") en la salida estándar de errores en caso de argumentos inválidos o duplicados.

Ejemplo de Uso

$ ./push_swap 2 1 3 6 5 8
sa
pb
pb
pb
sa
pa
pa
pa
$ ./push_swap 0 one 2 3
Error

V.4. Pruebas de Rendimiento

Validación Mínima

  • Ordenar 100 números aleatorios en menos de 700 operaciones.

Validación Máxima

  • Ordenar 500 números aleatorios en menos de 5500 operaciones.

Nota Adicional

Se proporcionará un binario para verificar el funcionamiento correcto del programa:

$ ARG="4 67 3 87 23"; ./push_swap $ARG | wc -l
6
$ ARG="4 67 3 87 23"; ./push_swap $ARG | ./checker_linux $ARG
OK

Si el programa checker_linux muestra "KO", significa que la lista de instrucciones generada no ordena los números correctamente.

About

This project implements the push_swap program to sort integers using two stacks, a and b. The goal is to arrange numbers in stack a in ascending order through a defined set of operations. Stack b starts empty and supports swaps, pushes, and rotations. The program outputs the shortest instruction list for sorting while avoiding global variables.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published