Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/colmiik/push_swap

Implementation of a sorting algorithm using a linked list in C
https://github.com/colmiik/push_swap

42school pushswap

Last synced: about 1 month ago
JSON representation

Implementation of a sorting algorithm using a linked list in C

Awesome Lists containing this project

README

        


Banner (claro)
Banner (oscuro)


This proyect consists of sorting a stack of numbers using two stacks and a limited set of instructions.



42 (oscuro)


Tiempo

---

# Mandatory part


Program name
push_swap


Turn in files
Makefile, *.h, *.c


Makefile
NAME, all, clean, fclean, re


Arguments
stack a: a list of integers


External functions
read(), write(), malloc(), free(), exit() , ft_printf() and any equivalent YOU coded


Libft authorized
Yes


Description
Sort stacks

## Observations

- Global variables are forbidden
- You have to write a program named push_swap that takes as an argument the stack
a formatted as a list of integers. The first argument should be at the top of the
stack (be careful about the order).
- The program must display the smallest list of instructions possible to sort the stack
a, the smallest number being at the top.
- Instructions must be separaed by a ’\n’ and nothing else.
- The goal is to sort the stack with the minimum possible number of operations.
- If no argument is given push_swap must display nothing.
- In case of error, you must display "`Error`" followed by a ’\n’ on the standard error. This includes for example: some arguments are not integers, some arguments are bigger than an integer, and/or there are duplicates.

## Rules

- You have 2 stacks named a and b.
- At the beginning:
- The stack a contains a random amount of negative and/or positive numbers
which cannot be duplicated.
- The stack b is empty
- The goal is to sort in ascending order numbers into stack a. To do so you have the following operations at your disposal:
- `sa` (`swap a`): swap the first 2 elements at the top of stack a. Do nothing if there is only one or no elements.
- `sb` (`swap b`): swap the first 2 elements at the top of stack b. Do nothing if there is only one or no elements.
- `ss`: `sa` and `sb` at the same time.
- `pa` (`push a`): take the first element at the top of b and put it at the top of a. Do nothing if b is empty.
- `pb` (`push b`): take the first element at the top of a and put it at the top of b. Do nothing if a is empty.
- `ra` (`rotate a`): shift up all elements of stack a by 1. The first element becomes the last one.
- `rb` (`rotate b`): shift up all elements of stack b by 1. The first element becomes the last one.
- `rr`: `ra` and `rb` at the same time.
- `rra` (`reverse rotate a`): shift down all elements of stack a by 1. The last element becomes the first one.
- `rrb` (`reverse rotate b`): shift down all elements of stack b by 1. The last element becomes the first one.
- `rrr`: `rra` and `rrb` at the same time.

# Bonus part


Program name
checker


Turn in files
*.h, *.c


Makefile
bonus


Arguments
stack a: a list of integers


External functions
read(), write(), malloc(), free(), exit() , ft_printf() and any equivalent YOU coded


Libft authorized
Yes


Description
Execute the sorting instructions

## Observations

- Write a program named checker that takes as an argument the stack a formatted
as a list of integers. The first argument should be at the top of the stack (be careful
about the order). If no argument is given, it stops and displays nothing.
- It will then wait and read instructions on the standard input, each instruction will
be followed by ’\n’. Once all the instructions have been read, the program has to
execute them on the stack received as an argument.
- If after executing those instructions, the stack a is actually sorted and the stack b
is empty, then the program must display "OK" followed by a ’\n’ on the standard
output.
- In every other case, it must display "KO" followed by a ’\n’ on the standard output.
- In case of error, you must display "Error" followed by a ’\n’ on the standard error. Errors include for example: some arguments are not integers, some arguments
are bigger than an integer,