Skip to content

Commit

Permalink
merge main with refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
rask24 committed Jan 23, 2024
2 parents e1d6b22 + e42f8be commit 924fde8
Show file tree
Hide file tree
Showing 19 changed files with 206 additions and 184 deletions.
3 changes: 2 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ SRC = $(SRC_DIR)/main.c \
$(SRC_DIR)/stack_operations/ft_lst_before.c \
$(SRC_DIR)/utils/first_content.c \
$(SRC_DIR)/utils/second_content.c \
$(SRC_DIR)/utils/exit_with_error.c
$(SRC_DIR)/utils/exit_with_error.c \
$(SRC_DIR)/utils/clear_stack.c
OBJ = $(patsubst $(SRC_DIR)/%.c, $(BUILD_DIR)/%.o, $(SRC))
DEP = $(patsubst $(SRC_DIR)/%.c, $(BUILD_DIR)/%.d, $(SRC))
OBJ_FILTER_MAIN = $(filter-out $(BUILD_DIR)/main.o, $(patsubst $(SRC_DIR)/%.c, $(BUILD_DIR)/%.o, $(SRC)))
Expand Down
43 changes: 23 additions & 20 deletions include/push_swap.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
/* By: reasuke <[email protected]> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/01/10 12:37:54 by reasuke #+# #+# */
/* Updated: 2024/01/22 16:55:46 by reasuke ### ########.fr */
/* Updated: 2024/01/23 15:56:52 by reasuke ### ########.fr */
/* */
/* ************************************************************************** */

Expand All @@ -23,29 +23,32 @@

# include "../libft/libft.h"

typedef t_list t_stack;

int check_args(int argc, char **argv);

t_list *generate_stack(int argc, char **argv);

void sort(t_list **stack_a, t_list **stack_b, int num_a);
void nano_sort(t_list **stack, int num_a);
void micro_sort(t_list **stack_a, t_list **stack_b, int num_a);
void large_sort(t_list **stack_a, t_list **stack_b, int num_a);

void operate_sa(t_list **stack_a);
void operate_sb(t_list **stack_b);
void operate_ra(t_list **stack_a);
void operate_rra(t_list **stack_a);
void operate_pa(t_list **stack_b, t_list **stack_a);
void operate_pb(t_list **stack_a, t_list **stack_b);
void push_stack(t_list **stack_1, t_list **stack_2);
void swap_stack(t_list **stack);
void rotate_stack(t_list **stack);
void reverse_rotate_stack(t_list **stack);
t_stack *generate_stack(int argc, char **argv);

void sort(t_stack **p_a, t_stack **p_b, int num_a);
void nano_sort(t_stack **p_a, int num_a);
void micro_sort(t_stack **p_a, t_stack **p_b, int num_a);
void large_sort(t_list **p_a, t_list **p_b, int num_a);

void operate_sa(t_stack **p_a);
void operate_sb(t_stack **p_b);
void operate_ra(t_stack **p_a);
void operate_rra(t_stack **p_a);
void operate_pa(t_stack **p_b, t_stack **p_a);
void operate_pb(t_stack **p_a, t_stack **p_b);
void push_stack(t_stack **p_s1, t_stack **p_s2);
void swap_stack(t_stack **p_stack);
void rotate_stack(t_stack **p_stack);
void reverse_rotate_stack(t_stack **p_stack);
t_list *ft_lst_before(t_list *lst, t_list *trg);

int first_content(t_list **stack);
int second_content(t_list **stack);
int first_content(t_stack **p_stack);
int second_content(t_stack **p_stack);
void exit_with_error(void);
void clear_stack(t_stack **p_stack, void (*del)(void *));

#endif
6 changes: 3 additions & 3 deletions src/generate_stack.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
/* By: reasuke <[email protected]> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/01/11 19:04:40 by reasuke #+# #+# */
/* Updated: 2024/01/15 12:56:26 by reasuke ### ########.fr */
/* Updated: 2024/01/23 15:10:51 by reasuke ### ########.fr */
/* */
/* ************************************************************************** */

Expand Down Expand Up @@ -88,9 +88,9 @@ int *_coordinate_compression(int argc, char **argv)
return (compressred_array);
}

t_list *generate_stack(int argc, char **argv)
t_stack *generate_stack(int argc, char **argv)
{
t_list *stack;
t_stack *stack;
int *compressed_array;
int i;
int *ptr;
Expand Down
14 changes: 7 additions & 7 deletions src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
/* By: reasuke <[email protected]> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/01/10 12:37:36 by reasuke #+# #+# */
/* Updated: 2024/01/22 15:36:13 by reasuke ### ########.fr */
/* Updated: 2024/01/23 15:48:43 by reasuke ### ########.fr */
/* */
/* ************************************************************************** */

Expand Down Expand Up @@ -34,13 +34,13 @@ void put_void(void *content)

int main(int argc, char **argv)
{
t_list *stack_a;
t_list *stack_b;
t_stack *a;
t_stack *b;

check_args(argc, argv);
stack_a = generate_stack(argc, argv);
stack_b = NULL;
sort(&stack_a, &stack_b, argc - 1);
ft_lstclear(&stack_a, free);
a = generate_stack(argc, argv);
b = NULL;
sort(&a, &b, argc - 1);
clear_stack(&a, free);
return (0);
}
24 changes: 12 additions & 12 deletions src/sort/large_sort.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
/* By: reasuke <[email protected]> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/01/22 16:55:10 by reasuke #+# #+# */
/* Updated: 2024/01/22 17:02:49 by reasuke ### ########.fr */
/* Updated: 2024/01/23 15:58:27 by reasuke ### ########.fr */
/* */
/* ************************************************************************** */

Expand All @@ -15,40 +15,40 @@
// naive implement: insertion sort
// find smallest number of a
// rotate
// push to stack_b
// push to stack_a
// push to b
// push to a

static void push_in_order(t_list **stack_a, t_list **stack_b, int num_a)
static void push_in_order(t_list **p_a, t_list **p_b, int num_a)
{
int i;

i = 1;
while (i <= num_a)
{
if (first_content(stack_a) == i)
if (first_content(p_a) == i)
{
operate_pb(stack_a, stack_b);
operate_pb(p_a, p_b);
i++;
}
else
operate_ra(stack_a);
operate_ra(p_a);
}
}

static void push_revert(t_list **stack_a, t_list **stack_b, int num_a)
static void push_revert(t_list **p_a, t_list **p_b, int num_a)
{
int i;

i = 0;
while (i < num_a)
{
operate_pa(stack_b, stack_a);
operate_pa(p_b, p_a);
i++;
}
}

void large_sort(t_list **stack_a, t_list **stack_b, int num_a)
void large_sort(t_list **p_a, t_list **p_b, int num_a)
{
push_in_order(stack_a, stack_b, num_a);
push_revert(stack_a, stack_b, num_a);
push_in_order(p_a, p_b, num_a);
push_revert(p_a, p_b, num_a);
}
92 changes: 46 additions & 46 deletions src/sort/micro_sort.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,82 +6,82 @@
/* By: reasuke <[email protected]> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/01/15 16:32:27 by reasuke #+# #+# */
/* Updated: 2024/01/17 18:33:18 by reasuke ### ########.fr */
/* Updated: 2024/01/23 15:29:19 by reasuke ### ########.fr */
/* */
/* ************************************************************************** */

#include "push_swap.h"

static void _handle_4(t_list **stack_a, t_list **stack_b)
static void _handle_4(t_stack **p_a, t_stack **p_b)
{
operate_pb(stack_a, stack_b);
nano_sort(stack_a, 3);
if (first_content(stack_b) == 1)
operate_pa(stack_b, stack_a);
else if (first_content(stack_b) == 2)
operate_pb(p_a, p_b);
nano_sort(p_a, 3);
if (first_content(p_b) == 1)
operate_pa(p_b, p_a);
else if (first_content(p_b) == 2)
{
operate_pa(stack_b, stack_a);
operate_sa(stack_a);
operate_pa(p_b, p_a);
operate_sa(p_a);
}
else if (first_content(stack_b) == 3)
else if (first_content(p_b) == 3)
{
operate_rra(stack_a);
operate_pa(stack_b, stack_a);
operate_ra(stack_a);
operate_ra(stack_a);
operate_rra(p_a);
operate_pa(p_b, p_a);
operate_ra(p_a);
operate_ra(p_a);
}
else if (first_content(stack_b) == 4)
else if (first_content(p_b) == 4)
{
operate_pa(stack_b, stack_a);
operate_ra(stack_a);
operate_pa(p_b, p_a);
operate_ra(p_a);
}
}

static void _edge_flow_5(t_list **stack_a, t_list **stack_b)
static void _edge_flow_5(t_stack **p_a, t_stack **p_b)
{
operate_pa(stack_b, stack_a);
operate_pa(stack_b, stack_a);
operate_ra(stack_a);
operate_ra(stack_a);
operate_pa(p_b, p_a);
operate_pa(p_b, p_a);
operate_ra(p_a);
operate_ra(p_a);
}

static void _normal_flow_5(t_list **stack_a, t_list **stack_b)
static void _normal_flow_5(t_stack **p_a, t_stack **p_b)
{
if (first_content(stack_b) == 5)
if (first_content(p_b) == 5)
{
operate_pa(stack_b, stack_a);
operate_rra(stack_a);
operate_pa(p_b, p_a);
operate_rra(p_a);
}
else
{
while (first_content(stack_a) != first_content(stack_b) + 1)
operate_ra(stack_a);
operate_pa(stack_b, stack_a);
while (first_content(p_a) != first_content(p_b) + 1)
operate_ra(p_a);
operate_pa(p_b, p_a);
}
while (first_content(stack_a) != first_content(stack_b) + 1)
operate_rra(stack_a);
operate_pa(stack_b, stack_a);
while (first_content(stack_a) != 1)
operate_rra(stack_a);
while (first_content(p_a) != first_content(p_b) + 1)
operate_rra(p_a);
operate_pa(p_b, p_a);
while (first_content(p_a) != 1)
operate_rra(p_a);
}

static void _handle_5(t_list **stack_a, t_list **stack_b)
static void _handle_5(t_stack **p_a, t_stack **p_b)
{
operate_pb(stack_a, stack_b);
operate_pb(stack_a, stack_b);
nano_sort(stack_a, 3);
if (first_content(stack_b) < second_content(stack_b))
operate_sb(stack_b);
if (first_content(stack_b) == 5 && second_content(stack_b) == 4)
_edge_flow_5(stack_a, stack_b);
operate_pb(p_a, p_b);
operate_pb(p_a, p_b);
nano_sort(p_a, 3);
if (first_content(p_b) < second_content(p_b))
operate_sb(p_b);
if (first_content(p_b) == 5 && second_content(p_b) == 4)
_edge_flow_5(p_a, p_b);
else
_normal_flow_5(stack_a, stack_b);
_normal_flow_5(p_a, p_b);
}

void micro_sort(t_list **stack_a, t_list **stack_b, int num_a)
void micro_sort(t_stack **p_a, t_stack **p_b, int num_a)
{
if (num_a == 4)
_handle_4(stack_a, stack_b);
_handle_4(p_a, p_b);
else if (num_a == 5)
_handle_5(stack_a, stack_b);
_handle_5(p_a, p_b);
}
38 changes: 19 additions & 19 deletions src/sort/nano_sort.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,57 +6,57 @@
/* By: reasuke <[email protected]> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/01/12 15:58:22 by reasuke #+# #+# */
/* Updated: 2024/01/17 16:04:38 by reasuke ### ########.fr */
/* Updated: 2024/01/23 15:27:24 by reasuke ### ########.fr */
/* */
/* ************************************************************************** */

#include "push_swap.h"

static void _handle_2(t_list **stack)
static void _handle_2(t_stack **p_a)
{
int first;
int second;

first = *(int *)(*stack)->content;
second = *(int *)(*stack)->next->content;
first = *(int *)(*p_a)->content;
second = *(int *)(*p_a)->next->content;
if (first > second)
{
swap_stack(stack);
swap_stack(p_a);
ft_putendl_fd("sa", STDOUT_FILENO);
}
}

static void _handle_3(t_list **stack)
static void _handle_3(t_stack **p_a)
{
int first;
int second;
int third;

first = *(int *)(*stack)->content;
second = *(int *)(*stack)->next->content;
third = *(int *)(*stack)->next->next->content;
first = *(int *)(*p_a)->content;
second = *(int *)(*p_a)->next->content;
third = *(int *)(*p_a)->next->next->content;
if (second < first && first < third)
operate_sa(stack);
operate_sa(p_a);
else if (third < second && second < first)
{
operate_sa(stack);
operate_rra(stack);
operate_sa(p_a);
operate_rra(p_a);
}
else if (second < third && third < first)
operate_ra(stack);
operate_ra(p_a);
else if (first < third && third < second)
{
operate_sa(stack);
operate_ra(stack);
operate_sa(p_a);
operate_ra(p_a);
}
else if (third < first && first < second)
operate_rra(stack);
operate_rra(p_a);
}

void nano_sort(t_list **stack, int num_a)
void nano_sort(t_stack **p_a, int num_a)
{
if (num_a == 2)
_handle_2(stack);
_handle_2(p_a);
else if (num_a == 3)
_handle_3(stack);
_handle_3(p_a);
}
Loading

0 comments on commit 924fde8

Please sign in to comment.