Ordenar datos en una pila
Este proyecto le hará clasificar datos en una pila, con un conjunto limitado de instrucciones, utilizando el número más bajo posible de acciones. Para tener éxito, tendrá que manipular varios tipos de algoritmos y elegir la solución más adecuada (de muchos) para una clasificación de datos optimizado. Version: 6 .
Puede leer el tema: push_swap.pdf
Ordene una lista aleatoria de enteros utilizando el menor número de movimientos, 2 pilas y un conjunto limitado de operaciones.
Empiezas con dos pilas vacías: A y B. Se le da una lista aleatoria de enteros a través de argumentos de línea de comandos.
Solo se permiten estos movimientos:
sa : intercambie A - intercambie los primeros 2 elementos en la parte superior de la pila a. No hagas nada si solo hay uno o ningún elemento).sb : intercambio B - Cambie los primeros 2 elementos en la parte superior de la pila b. No hagas nada si solo hay uno o ningún elemento).ss : sa y sb al mismo tiempo.pa : Empuje A - Tome el primer elemento en la parte superior de B y póngalo en la parte superior de A. No hagas nada si B está vacío.pb : Push B - Tome el primer elemento en la parte superior de A y póngalo en la parte superior de b. No hagas nada si A está vacío.ra : Gire A - Cambie todos los elementos de Stack A por 1. El primer elemento se convierte en el último.rb : Gire B - Cambie todos los elementos de la pila B por 1. El primer elemento se convierte en el último.rr : ra y rb al mismo tiempo.rra : Reverse Rotar A - Cambie todos los elementos de Stack A por 1. El último elemento se convierte en el primero.rrb : Reverse gire b - desplaza hacia abajo todos los elementos de la pila B por 1. El último elemento se convierte en el primero.rrr : rra y rrb al mismo tiempo. Al final, la pila B debe vaciar vacía y todos los enteros deben estar en la pila A , ordenados en orden ascendente.
Cree dos programas: checker y push_swap .
El programa checker lee una lista aleatoria de enteros de Stdin, los almacena y verifica para ver si están ordenados.
El programa push_swap calcula los movimientos para clasificar los enteros: empujar, hacer estallar, intercambiarlos y rotarlos entre la pila A y la pila B ) y muestra esas direcciones en el stdout.
Puede encender push_swap en checker , y checker verificará que las instrucciones de push_swap tuvieran éxito.
Ambos programas deben analizar obligatoriamente la entrada de errores, incluidas las cadenas vacías, sin parámetros, parámetros no numéricos, duplicados e instrucciones inválidas/inexistentes.
Push_swap debe cumplir con la norma 42.
Usar funciones libc normales está estrictamente prohibido. Sin embargo, a los estudiantes se les permite usar: write , read , malloc , free , exit . No debe tener ninguna filtración de memoria. Los errores deben manejarse con cuidado.
De ninguna manera puede dejar de una manera inesperada (falla de segmentación, error del bus, doble libre, etc.).
Todos los errores como: comandos incorrectos, permiso a archivos, etc. deben ser manejables.
Ensayador