tu connqis
This commit is contained in:
commit
93f14b8261
|
|
@ -0,0 +1,31 @@
|
||||||
|
NAME = push_swap
|
||||||
|
CC = cc
|
||||||
|
CFLAGS = -Wall -Wextra -Werror
|
||||||
|
INCLUDES = -I include
|
||||||
|
SRC_DIR = src
|
||||||
|
SRCS = $(SRC_DIR)/push_swap.c \
|
||||||
|
$(SRC_DIR)/parse.c \
|
||||||
|
$(SRC_DIR)/utils.c \
|
||||||
|
$(SRC_DIR)/normalize.c \
|
||||||
|
$(SRC_DIR)/ops.c \
|
||||||
|
$(SRC_DIR)/sort_small.c \
|
||||||
|
$(SRC_DIR)/radix.c
|
||||||
|
OBJS = $(SRCS:.c=.o)
|
||||||
|
|
||||||
|
all: $(NAME)
|
||||||
|
|
||||||
|
$(NAME): $(OBJS)
|
||||||
|
$(CC) $(CFLAGS) $(OBJS) -o $(NAME)
|
||||||
|
|
||||||
|
%.o: %.c
|
||||||
|
$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(OBJS)
|
||||||
|
|
||||||
|
fclean: clean
|
||||||
|
rm -f $(NAME)
|
||||||
|
|
||||||
|
re: fclean all
|
||||||
|
|
||||||
|
.PHONY: all clean fclean re
|
||||||
Binary file not shown.
|
|
@ -0,0 +1,41 @@
|
||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* push_swap.h :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: gechavia <chaviallegeraud@gmail.com> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2025/09/04 17:36:00 by gechavia #+# #+# */
|
||||||
|
/* Updated: 2025/09/04 17:36:26 by gechavia ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#ifndef PUSH_SWAP_H
|
||||||
|
# define PUSH_SWAP_H
|
||||||
|
# include <unistd.h>
|
||||||
|
# include <stdlib.h>
|
||||||
|
# include <limits.h>
|
||||||
|
|
||||||
|
typedef struct s_stack
|
||||||
|
{
|
||||||
|
int *array;
|
||||||
|
int size;
|
||||||
|
int capacity;
|
||||||
|
} t_stack;
|
||||||
|
|
||||||
|
void init_stacks(t_stack *a, t_stack *b);
|
||||||
|
void error_exit(t_stack *a, t_stack *b);
|
||||||
|
int parse_and_validate(char **argv, t_stack *a, t_stack *b);
|
||||||
|
void free_stacks(t_stack *a, t_stack *b);
|
||||||
|
int has_duplicates(t_stack *a);
|
||||||
|
void write_op(const char *s);
|
||||||
|
void normalize_stack(t_stack *a);
|
||||||
|
void swap(t_stack *s);
|
||||||
|
void push(t_stack *from, t_stack *to);
|
||||||
|
void rotate(t_stack *s);
|
||||||
|
void rrotate(t_stack *s);
|
||||||
|
void sort_three(t_stack *a);
|
||||||
|
void sort_five(t_stack *a, t_stack *b);
|
||||||
|
void sort_stack(t_stack *a, t_stack *b);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,81 @@
|
||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* normalize.c :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: gechavia <chaviallegeraud@gmail.com> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2025/09/04 17:32:38 by gechavia #+# #+# */
|
||||||
|
/* Updated: 2025/09/04 17:32:39 by gechavia ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#include "push_swap.h"
|
||||||
|
|
||||||
|
static void swap_vals(int *a, int *b)
|
||||||
|
{
|
||||||
|
int tmp;
|
||||||
|
|
||||||
|
tmp = *a;
|
||||||
|
*a = *b;
|
||||||
|
*b = tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void sort_int_array(int *arr, int n)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int j;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while (i < n)
|
||||||
|
{
|
||||||
|
j = i + 1;
|
||||||
|
while (j < n)
|
||||||
|
{
|
||||||
|
if (arr[j] < arr[i])
|
||||||
|
swap_vals(&arr[i], &arr[j]);
|
||||||
|
j = j + 1;
|
||||||
|
}
|
||||||
|
i = i + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int index_in_array(int *arr, int n, int v)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while (i < n)
|
||||||
|
{
|
||||||
|
if (arr[i] == v)
|
||||||
|
return (i);
|
||||||
|
i = i + 1;
|
||||||
|
}
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void normalize_stack(t_stack *a)
|
||||||
|
{
|
||||||
|
int *tmp;
|
||||||
|
int j;
|
||||||
|
int idx;
|
||||||
|
|
||||||
|
tmp = (int *)malloc(sizeof(int) * a->size);
|
||||||
|
if (!tmp)
|
||||||
|
exit(1);
|
||||||
|
j = 0;
|
||||||
|
while (j < a->size)
|
||||||
|
{
|
||||||
|
tmp[j] = a->array[j];
|
||||||
|
j = j + 1;
|
||||||
|
}
|
||||||
|
sort_int_array(tmp, a->size);
|
||||||
|
j = 0;
|
||||||
|
while (j < a->size)
|
||||||
|
{
|
||||||
|
idx = index_in_array(tmp, a->size, a->array[j]);
|
||||||
|
a->array[j] = idx;
|
||||||
|
j = j + 1;
|
||||||
|
}
|
||||||
|
free(tmp);
|
||||||
|
}
|
||||||
Binary file not shown.
|
|
@ -0,0 +1,91 @@
|
||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* ops.c :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: gechavia <chaviallegeraud@gmail.com> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2025/09/04 17:32:45 by gechavia #+# #+# */
|
||||||
|
/* Updated: 2025/09/04 17:32:46 by gechavia ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#include "push_swap.h"
|
||||||
|
|
||||||
|
void write_op(const char *s)
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
|
||||||
|
len = 0;
|
||||||
|
while (s[len])
|
||||||
|
len = len + 1;
|
||||||
|
write(1, s, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
void swap(t_stack *s)
|
||||||
|
{
|
||||||
|
int t;
|
||||||
|
|
||||||
|
if (s->size < 2)
|
||||||
|
return ;
|
||||||
|
t = s->array[0];
|
||||||
|
s->array[0] = s->array[1];
|
||||||
|
s->array[1] = t;
|
||||||
|
}
|
||||||
|
|
||||||
|
void push(t_stack *from, t_stack *to)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (from->size == 0)
|
||||||
|
return ;
|
||||||
|
i = to->size;
|
||||||
|
while (i > 0)
|
||||||
|
{
|
||||||
|
to->array[i] = to->array[i - 1];
|
||||||
|
i = i - 1;
|
||||||
|
}
|
||||||
|
to->array[0] = from->array[0];
|
||||||
|
to->size = to->size + 1;
|
||||||
|
i = 0;
|
||||||
|
while (i + 1 < from->size)
|
||||||
|
{
|
||||||
|
from->array[i] = from->array[i + 1];
|
||||||
|
i = i + 1;
|
||||||
|
}
|
||||||
|
from->size = from->size - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void rotate(t_stack *s)
|
||||||
|
{
|
||||||
|
int t;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (s->size < 2)
|
||||||
|
return ;
|
||||||
|
t = s->array[0];
|
||||||
|
i = 0;
|
||||||
|
while (i + 1 < s->size)
|
||||||
|
{
|
||||||
|
s->array[i] = s->array[i + 1];
|
||||||
|
i = i + 1;
|
||||||
|
}
|
||||||
|
s->array[s->size - 1] = t;
|
||||||
|
}
|
||||||
|
|
||||||
|
void rrotate(t_stack *s)
|
||||||
|
{
|
||||||
|
int t;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (s->size < 2)
|
||||||
|
return ;
|
||||||
|
t = s->array[s->size - 1];
|
||||||
|
i = s->size - 1;
|
||||||
|
while (i > 0)
|
||||||
|
{
|
||||||
|
s->array[i] = s->array[i - 1];
|
||||||
|
i = i - 1;
|
||||||
|
}
|
||||||
|
s->array[0] = t;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,115 @@
|
||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* parse.c :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: gechavia <chaviallegeraud@gmail.com> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2025/09/04 17:32:51 by gechavia #+# #+# */
|
||||||
|
/* Updated: 2025/09/04 17:34:24 by gechavia ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#include "push_swap.h"
|
||||||
|
|
||||||
|
static int is_space(char c)
|
||||||
|
{
|
||||||
|
if (c == ' ')
|
||||||
|
return (1);
|
||||||
|
if (c == '\t')
|
||||||
|
return (1);
|
||||||
|
if (c == '\n')
|
||||||
|
return (1);
|
||||||
|
if (c == '\r')
|
||||||
|
return (1);
|
||||||
|
if (c == '\v')
|
||||||
|
return (1);
|
||||||
|
if (c == '\f')
|
||||||
|
return (1);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int is_digit(char c)
|
||||||
|
{
|
||||||
|
if (c >= '0' && c <= '9')
|
||||||
|
return (1);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static long read_num(const char *s, int *i, int *ok)
|
||||||
|
{
|
||||||
|
long sign;
|
||||||
|
long res;
|
||||||
|
|
||||||
|
sign = 1;
|
||||||
|
res = 0;
|
||||||
|
*ok = 1;
|
||||||
|
if (s[*i] == '+' || s[*i] == '-')
|
||||||
|
{
|
||||||
|
if (s[*i] == '-')
|
||||||
|
sign = -1;
|
||||||
|
*i = *i + 1;
|
||||||
|
}
|
||||||
|
if (!is_digit(s[*i]))
|
||||||
|
*ok = 0;
|
||||||
|
while (is_digit(s[*i]))
|
||||||
|
{
|
||||||
|
res = res * 10 + (s[*i] - '0');
|
||||||
|
if ((sign == 1 && res > INT_MAX) || (sign == -1 && (-res) < INT_MIN))
|
||||||
|
*ok = 0;
|
||||||
|
*i = *i + 1;
|
||||||
|
}
|
||||||
|
return (res * sign);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int push_val(t_stack *a, int v)
|
||||||
|
{
|
||||||
|
int *new_arr;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (a->size >= a->capacity)
|
||||||
|
{
|
||||||
|
a->capacity = a->capacity * 2 + 8;
|
||||||
|
new_arr = (int *)malloc(sizeof(int) * a->capacity);
|
||||||
|
if (!new_arr)
|
||||||
|
return (0);
|
||||||
|
i = 0;
|
||||||
|
while (i < a->size)
|
||||||
|
{
|
||||||
|
new_arr[i] = a->array[i];
|
||||||
|
i = i + 1;
|
||||||
|
}
|
||||||
|
free(a->array);
|
||||||
|
a->array = new_arr;
|
||||||
|
}
|
||||||
|
a->array[a->size] = v;
|
||||||
|
a->size = a->size + 1;
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int parse_and_validate(char **argv, t_stack *a, t_stack *b)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int ok;
|
||||||
|
long v;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while (argv[1][i])
|
||||||
|
{
|
||||||
|
while (argv[1][i] && is_space(argv[1][i]))
|
||||||
|
i = i + 1;
|
||||||
|
if (!argv[1][i])
|
||||||
|
break ;
|
||||||
|
v = read_num(argv[1], &i, &ok);
|
||||||
|
if (!ok || v < INT_MIN || v > INT_MAX || !push_val(a, (int)v))
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
if (a->size == 0 || has_duplicates(a))
|
||||||
|
return (0);
|
||||||
|
b->capacity = a->size;
|
||||||
|
b->array = (int *)malloc(sizeof(int) * b->capacity);
|
||||||
|
if (!b->array)
|
||||||
|
return (0);
|
||||||
|
b->size = 0;
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
Binary file not shown.
|
|
@ -0,0 +1,49 @@
|
||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* push_swap.c :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: gechavia <chaviallegeraud@gmail.com> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2025/09/04 17:32:54 by gechavia #+# #+# */
|
||||||
|
/* Updated: 2025/09/08 16:42:06 by gechavia ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#include "push_swap.h"
|
||||||
|
|
||||||
|
void init_stacks(t_stack *a, t_stack *b)
|
||||||
|
{
|
||||||
|
a->array = NULL;
|
||||||
|
a->size = 0;
|
||||||
|
a->capacity = 0;
|
||||||
|
b->array = NULL;
|
||||||
|
b->size = 0;
|
||||||
|
b->capacity = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void error_exit(t_stack *a, t_stack *b)
|
||||||
|
{
|
||||||
|
write(2, "Error\n", 6);
|
||||||
|
free_stacks(a, b);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
t_stack a;
|
||||||
|
t_stack b;
|
||||||
|
|
||||||
|
if (argc != 2)
|
||||||
|
{
|
||||||
|
write(2, "Usage: ./push_swap \"numbers\"\n", 29);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
init_stacks(&a, &b);
|
||||||
|
if (!parse_and_validate(argv, &a, &b))
|
||||||
|
error_exit(&a, &b);
|
||||||
|
normalize_stack(&a);
|
||||||
|
sort_stack(&a, &b);
|
||||||
|
free_stacks(&a, &b);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
Binary file not shown.
|
|
@ -0,0 +1,90 @@
|
||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* radix.c :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: gechavia <chaviallegeraud@gmail.com> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2025/09/04 17:32:56 by gechavia #+# #+# */
|
||||||
|
/* Updated: 2025/09/08 17:26:26 by gechavia ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#include "push_swap.h"
|
||||||
|
|
||||||
|
static int get_max_bits(t_stack *a)
|
||||||
|
{
|
||||||
|
int max;
|
||||||
|
int i;
|
||||||
|
int bits;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
max = 0;
|
||||||
|
bits = 0;
|
||||||
|
while (i < a->size)
|
||||||
|
{
|
||||||
|
if (a->array[i] > max)
|
||||||
|
max = a->array[i];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
while ((max >> bits) != 0)
|
||||||
|
bits++;
|
||||||
|
return (bits);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void push_radix(t_stack *a, t_stack *b)
|
||||||
|
{
|
||||||
|
while (b->size)
|
||||||
|
{
|
||||||
|
push(b, a);
|
||||||
|
write_op("pa\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void radix_sort_2(t_stack *a, t_stack *b, int bit)
|
||||||
|
{
|
||||||
|
int size;
|
||||||
|
int j;
|
||||||
|
|
||||||
|
size = a->size;
|
||||||
|
j = 0;
|
||||||
|
while (j < size)
|
||||||
|
{
|
||||||
|
if (((a->array[0] >> bit) & 1) == 1)
|
||||||
|
{
|
||||||
|
rotate(a);
|
||||||
|
write_op("ra\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
push(a, b);
|
||||||
|
write_op("pb\n");
|
||||||
|
}
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void radix_sort(t_stack *a, t_stack *b)
|
||||||
|
{
|
||||||
|
int bits;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
bits = get_max_bits(a);
|
||||||
|
while (i < bits)
|
||||||
|
{
|
||||||
|
radix_sort_2(a, b, i);
|
||||||
|
push_radix(a, b);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void sort_stack(t_stack *a, t_stack *b)
|
||||||
|
{
|
||||||
|
if (a->size <= 1)
|
||||||
|
return ;
|
||||||
|
if (a->size <= 5)
|
||||||
|
sort_five(a, b);
|
||||||
|
else
|
||||||
|
radix_sort(a, b);
|
||||||
|
}
|
||||||
Binary file not shown.
|
|
@ -0,0 +1,105 @@
|
||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* sort_small.c :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: gechavia <chaviallegeraud@gmail.com> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2025/09/04 17:33:02 by gechavia #+# #+# */
|
||||||
|
/* Updated: 2025/09/04 17:33:03 by gechavia ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#include "push_swap.h"
|
||||||
|
|
||||||
|
static int min_index(t_stack *a)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int m;
|
||||||
|
int idx;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
m = a->array[0];
|
||||||
|
idx = 0;
|
||||||
|
while (i < a->size)
|
||||||
|
{
|
||||||
|
if (a->array[i] < m)
|
||||||
|
{
|
||||||
|
m = a->array[i];
|
||||||
|
idx = i;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
return (idx);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void op1(t_stack *s, void (*f)(t_stack *), const char *name)
|
||||||
|
{
|
||||||
|
f(s);
|
||||||
|
write_op(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sort_three(t_stack *a)
|
||||||
|
{
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
int z;
|
||||||
|
|
||||||
|
x = a->array[0];
|
||||||
|
y = a->array[1];
|
||||||
|
z = a->array[2];
|
||||||
|
if (x > y && y > z)
|
||||||
|
{
|
||||||
|
op1(a, swap, "sa\n");
|
||||||
|
op1(a, rrotate, "rra\n");
|
||||||
|
}
|
||||||
|
else if (x > y && x < z)
|
||||||
|
op1(a, swap, "sa\n");
|
||||||
|
else if (x > z && y < z)
|
||||||
|
op1(a, rotate, "ra\n");
|
||||||
|
else if (x < y && x > z)
|
||||||
|
op1(a, rrotate, "rra\n");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
op1(a, swap, "sa\n");
|
||||||
|
op1(a, rotate, "ra\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void push_min_to_b(t_stack *a, t_stack *b)
|
||||||
|
{
|
||||||
|
int idx;
|
||||||
|
int steps;
|
||||||
|
|
||||||
|
idx = min_index(a);
|
||||||
|
if (idx <= a->size / 2)
|
||||||
|
steps = idx;
|
||||||
|
else
|
||||||
|
steps = a->size - idx;
|
||||||
|
while (steps-- > 0)
|
||||||
|
{
|
||||||
|
if (idx <= a->size / 2)
|
||||||
|
op1(a, rotate, "ra\n");
|
||||||
|
else
|
||||||
|
op1(a, rrotate, "rra\n");
|
||||||
|
}
|
||||||
|
push(a, b);
|
||||||
|
write_op("pb\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void sort_five(t_stack *a, t_stack *b)
|
||||||
|
{
|
||||||
|
if (a->size == 2 && a->array[0] > a->array[1])
|
||||||
|
{
|
||||||
|
op1(a, swap, "sa\n");
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
while (a->size > 3)
|
||||||
|
push_min_to_b(a, b);
|
||||||
|
sort_three(a);
|
||||||
|
while (b->size)
|
||||||
|
{
|
||||||
|
push(b, a);
|
||||||
|
write_op("pa\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
Binary file not shown.
|
|
@ -0,0 +1,41 @@
|
||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* utils.c :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: gechavia <chaviallegeraud@gmail.com> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2025/09/04 17:33:05 by gechavia #+# #+# */
|
||||||
|
/* Updated: 2025/09/04 17:35:51 by gechavia ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#include "push_swap.h"
|
||||||
|
|
||||||
|
void free_stacks(t_stack *a, t_stack *b)
|
||||||
|
{
|
||||||
|
if (a && a->array)
|
||||||
|
free(a->array);
|
||||||
|
if (b && b->array)
|
||||||
|
free(b->array);
|
||||||
|
}
|
||||||
|
|
||||||
|
int has_duplicates(t_stack *a)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int j;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while (i < a->size)
|
||||||
|
{
|
||||||
|
j = i + 1;
|
||||||
|
while (j < a->size)
|
||||||
|
{
|
||||||
|
if (a->array[i] == a->array[j])
|
||||||
|
return (1);
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
Binary file not shown.
Reference in New Issue