From 5cad71fcd3bb8d41419256b73ef8fdcb8788b8cd Mon Sep 17 00:00:00 2001 From: Willem Haffmans Date: Wed, 6 Nov 2024 20:14:21 +0000 Subject: [PATCH] add moves and split utils frommain file --- Makefile | 9 +++---- inc/push_swap.h | 37 +++++++++++++---------------- src/moves/push.c | 25 ++++++++++++++++++++ src/moves/reverse_rotate.c | 28 ++++++++++++++++++++++ src/moves/rotate.c | 25 ++++++++++++++++++++ src/moves/swap.c | 22 +++++++++++++++++ src/push_swap.c | 48 +++++++------------------------------- src/util/ft_lstat.c | 28 ++++++++++++++++++++++ src/util/new_element.c | 39 +++++++++++++++++++++++++++++++ 9 files changed, 197 insertions(+), 64 deletions(-) create mode 100644 src/util/ft_lstat.c create mode 100644 src/util/new_element.c diff --git a/Makefile b/Makefile index 4536892..5b46e72 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: whaffman +#+ +:+ +#++#++:++#++ # # +#+ +#+#+ +#++#+ +#+ \o/ # # Created: 2024/10/15 11:48:46 by whaffman #+#+# #+#+# #+# #+# | # -# Updated: 2024/11/04 13:56:19 by whaffman ### ### ### ### / \ # +# Updated: 2024/11/06 20:10:28 by whaffman ### ### ### ### / \ # # # # **************************************************************************** # @@ -18,9 +18,10 @@ LIBFT_INC_PATH = libft/inc LIBFT = libft/libft.a OBJ_PATH = obj -VPATH = $(SRC_PATH) +VPATH = src:src/util:src/moves -SOURCES = push_swap.c +SOURCES = push_swap.c ft_lstat.c new_element.c push.c rotate.c reverse_rotate.c \ + swap.c OBJECTS = $(addprefix $(OBJ_PATH)/, $(SOURCES:.c=.o)) @@ -63,7 +64,7 @@ re: fclean all run: all @$(eval ARG = $(shell shuf -i 0-100 -n 5)) - ./$(NAME) $(ARG) + ./$(NAME) 1 2 3 4 5 6 7 8 9 debug: CFLAGS += -DDEBUG -g debug: all diff --git a/inc/push_swap.h b/inc/push_swap.h index 61441e4..15c9bf9 100644 --- a/inc/push_swap.h +++ b/inc/push_swap.h @@ -6,28 +6,23 @@ /* By: whaffman +#+ +:+ +#++#++:++#++ */ /* +#+ +#+#+ +#++#+ +#+ \o/ */ /* Created: 2024/11/04 13:58:35 by whaffman #+#+# #+#+# #+# #+# | */ -/* Updated: 2024/11/04 14:11:03 by whaffman ### ### ### ### / \ */ +/* Updated: 2024/11/06 20:10:14 by whaffman ### ### ### ### / \ */ /* */ /* ************************************************************************** */ -typedef struct s_clist -{ - void *content; - struct s_clist *next; - struct s_clist *prev; -} t_clist; +#ifndef PUSH_SWAP_H +# define PUSH_SWAP_H -typedef struct s_node -{ - int n; - int ra; - int rb; - int rr; - int rra; - int rrb; - int rrr; - int pa; - int pb; - int sa; - int sb; -} t_node; +# include "libft.h" + +int new_element(t_list **stack, const char *str); +t_list *ft_lstat(t_list *list, int n); +void print_stack(const char *name, t_list *stack); +void print_stacks(t_list *stack_a, t_list *stack_b); + +void push(t_list **stack_1, t_list **stack_2); +void rotate(t_list **stack); +void reverse_rotate(t_list **stack); +void swap(t_list **stack); + +#endif diff --git a/src/moves/push.c b/src/moves/push.c index e69de29..0d661b6 100644 --- a/src/moves/push.c +++ b/src/moves/push.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* push.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/11/06 19:27:09 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/11/06 19:38:01 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" +#include "push_swap.h" + +void push(t_list **stack_1, t_list **stack_2) +{ + t_list *temp; + + if (!stack_1) + return ; + temp = (*stack_1)->next; + ft_lstadd_front(stack_2, *stack_1); + *stack_1 = temp; +} diff --git a/src/moves/reverse_rotate.c b/src/moves/reverse_rotate.c index e69de29..787f065 100644 --- a/src/moves/reverse_rotate.c +++ b/src/moves/reverse_rotate.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* reverse_rotate.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/11/06 19:58:58 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/11/06 20:03:30 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void reverse_rotate(t_list **stack) +{ + t_list *temp; + t_list *last; + + if (!stack) + return ; + temp = *stack; + last = ft_lstlast(*stack); + while (temp->next->next) + temp = temp->next; + temp->next = NULL; + ft_lstadd_front(stack, last); +} diff --git a/src/moves/rotate.c b/src/moves/rotate.c index e69de29..f917b88 100644 --- a/src/moves/rotate.c +++ b/src/moves/rotate.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* rotate.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/11/06 19:44:17 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/11/06 19:51:04 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void rotate(t_list **stack) +{ + t_list *temp; + + if (!stack) + return ; + temp = (*stack)->next; + (*stack)->next = NULL; + ft_lstadd_back(&temp, *stack); + *stack = temp; +} diff --git a/src/moves/swap.c b/src/moves/swap.c index e69de29..6565777 100644 --- a/src/moves/swap.c +++ b/src/moves/swap.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* swap.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/11/06 20:07:09 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/11/06 20:10:41 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void swap(t_list **stack) +{ + int *temp; + + temp = (*stack)->next->content; + (*stack)->next->content = (*stack)->content; + (*stack)->content = temp; +} diff --git a/src/push_swap.c b/src/push_swap.c index 0c23cb5..972c9cc 100644 --- a/src/push_swap.c +++ b/src/push_swap.c @@ -6,52 +6,15 @@ /* By: whaffman +#+ +:+ +#++#++:++#++ */ /* +#+ +#+#+ +#++#+ +#+ \o/ */ /* Created: 2024/11/04 13:04:11 by whaffman #+#+# #+#+# #+# #+# | */ -/* Updated: 2024/11/04 13:04:42 by whaffman ### ### ### ### / \ */ +/* Updated: 2024/11/06 20:11:40 by whaffman ### ### ### ### / \ */ /* */ /* ************************************************************************** */ #include "libft.h" +#include "push_swap.h" #include #include -int new_element(t_list **stack, const char *str) -{ - int *n; - char *test; - t_list *elem; - - n = malloc(sizeof (int)); - if (!n) - return (0); - *n = ft_atoi(str); - test = ft_itoa(*n); - if (ft_strncmp(str, test, 20)) - { - free(test); - return (0); - } - free(test); - elem = ft_lstnew(n); - if (!elem) - return (0); - ft_lstadd_front(stack, elem); - return (1); -} - -t_list *ft_lstat(t_list *list, int n) -{ - if (!list) - return (NULL); - while (list->next && n > 0) - { - list = list->next; - n--; - } - if (n > 0) - return (NULL); - return (list); -} - void print_stack(const char *name, t_list *stack) { int lst_size; @@ -94,6 +57,13 @@ int main(int argc, char *argv[]) return (1); } } + push(&stack_a, &stack_b); + push(&stack_a, &stack_b); + push(&stack_a, &stack_b); + rotate(&stack_a); + reverse_rotate(&stack_b); + print_stacks(stack_a, stack_b); + swap(&stack_a); print_stacks(stack_a, stack_b); return (0); } diff --git a/src/util/ft_lstat.c b/src/util/ft_lstat.c new file mode 100644 index 0000000..41b2a17 --- /dev/null +++ b/src/util/ft_lstat.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_lstat.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/11/06 19:20:38 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/11/06 19:24:52 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" +#include "push_swap.h" + +t_list *ft_lstat(t_list *list, int n) +{ + if (!list) + return (NULL); + while (list->next && n > 0) + { + list = list->next; + n--; + } + if (n > 0) + return (NULL); + return (list); +} diff --git a/src/util/new_element.c b/src/util/new_element.c new file mode 100644 index 0000000..a13fbac --- /dev/null +++ b/src/util/new_element.c @@ -0,0 +1,39 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* new_element.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/11/06 19:19:32 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/11/06 19:37:28 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" +#include "push_swap.h" +#include + +int new_element(t_list **stack, const char *str) +{ + int *n; + char *test; + t_list *elem; + + n = malloc(sizeof (int)); + if (!n) + return (0); + *n = ft_atoi(str); + test = ft_itoa(*n); + if (ft_strncmp(str, test, 20)) + { + free(test); + return (0); + } + free(test); + elem = ft_lstnew(n); + if (!elem) + return (0); + ft_lstadd_front(stack, elem); + return (1); +}