From f98dce6f610f25b0ea0041af5e3e1ff873fe2648 Mon Sep 17 00:00:00 2001 From: Maoake Teriierooiterai Date: Tue, 6 Jan 2026 12:41:36 +0100 Subject: [PATCH] finish the medium need to modify and sort in a just need to do the reverse --- Makefile | 4 +- algorithms/medium_algo.c | 64 +++++++++++++++++++---- algorithms/medium_utils/sort_utils.c | 31 ++++++----- algorithms/medium_utils/sort_utils_two.c | 49 +++++++++++++++++ push_swap | Bin 0 -> 26928 bytes push_swap.h | 13 +++-- test_one.c | 26 +++++---- 7 files changed, 143 insertions(+), 44 deletions(-) create mode 100644 algorithms/medium_utils/sort_utils_two.c create mode 100755 push_swap diff --git a/Makefile b/Makefile index 6adb9ad..7dba4a3 100644 --- a/Makefile +++ b/Makefile @@ -12,9 +12,9 @@ STACK_UTILS = push.c rev_rotate.c rotate.c stack_add.c stack_remove.c swap.c ALGO_SORT = medium_algo.c -MEDIUM_ALGO = utils_medium.c utils_struct_tab.c utils_medium_two.c +MEDIUM_ALGO = utils_medium.c utils_struct_tab.c utils_medium_two.c sort_utils.c sort_utils_two.c -ALGO_UTILS = check_order.c compare_value.c stack_len.c +ALGO_UTILS = check_order.c compare_value.c ALL_FILES = $(SRC) $(STACK_UTILS_DIR)/$(STACK_UTILS) $(ALGO_DIR)/$(ALGO_SORT) \ $(ALGO_DIR)/$(MEDIUM_DIR)/$(MEDIUM_ALGO) $(ALGO_UTILS_DIR)/$(ALGO_UTILS) diff --git a/algorithms/medium_algo.c b/algorithms/medium_algo.c index 44e9bcc..3b1484f 100644 --- a/algorithms/medium_algo.c +++ b/algorithms/medium_algo.c @@ -11,61 +11,103 @@ /* ************************************************************************** */ #include "push_swap.h" +#include -int path_to_end(t_stacks *piles, int max_range, int range) +int path_to_end(t_stacks *piles, int max_range, int range, char c) { t_stack *tmp; int i; int first_pass; - tmp = piles->a; + if (c == 'a') + tmp = piles->a; + else + tmp = piles->b; tmp = tmp->previous; i = 0; - first_pass = 1 + first_pass = 1; while (first_pass || tmp != piles->a->previous) { first_pass = 0; if (in_range(tmp->value, max_range, range)) - tmp = piles->a->previous; + tmp = piles->a; tmp = tmp->previous; i++; } return (i); } -int path_to_start(t_stacks *piles, int max_range, int range) +int path_to_start(t_stacks *piles, int max_range, int range, char c) { t_stack *tmp; int i; int first_pass; - tmp = piles ->a; + if (c == 'a') + tmp = piles->a; + else + tmp = piles->b; i = 0; first_pass = 1; while (first_pass || tmp != piles->a) { first_pass = 0; if (in_range(tmp->value, max_range, range)) - tmp = piles->a; + { + tmp = piles->a->previous; + } tmp = tmp->next; i++; } return (i); } -int wich_path(t_stacks *piles, int max_range, int range) +int wich_path(t_stacks *piles, int max_range, int range, char c) { int path_start; int path_end; - path_start = path_to_start(piles, max_range, range); - path_end = path_to_end(piles, max_range, range); + path_start = path_to_start(piles, max_range, range, c); + path_end = path_to_end(piles, max_range, range, c); if (path_start < path_end) return (1); return (0); } -void bucket_algo(void) +int stack_len(t_stack *stack) { + t_stack *first; + int i; + + first = stack; + i = 1; + while (first->next != stack) + { + first = first->next; + i++; + } + return (i); +} + +void bucket_algo(t_stacks *piles, t_tab *preset, int range) +{ + t_tab *tmp; + + tmp = preset; + while (preset) + { + push_range_to_b(piles, preset, range); + if (preset->next) + tmp = preset->next; + else + tmp = NULL; + if (preset) + free(preset); + preset = tmp; + } + while (piles->b) + pa(piles); + print_all_stack(piles->a, piles->a, 'A'); + print_all_stack(piles->b, piles->b, 'B'); return ; } diff --git a/algorithms/medium_utils/sort_utils.c b/algorithms/medium_utils/sort_utils.c index 91b1ab1..5dafb47 100644 --- a/algorithms/medium_utils/sort_utils.c +++ b/algorithms/medium_utils/sort_utils.c @@ -14,23 +14,25 @@ void push_range_to_b(t_stacks *piles, t_tab *one_preset, int range) { - t_stack *a; - t_stack *b; - - a = piles->a; - b = piles->b; while (one_preset->nb_in > 0) { if (wich_path(piles, one_preset->max_range, range, 'a')) { - while (!in_range(a->value)) + while (!in_range(piles->a->value, one_preset->max_range, range)) ra(piles); } else - while (!in_range(a->value)) + { + while (!in_range(piles->a->value, one_preset->max_range, range)) + { rra(piles); - pb(piles); + } + } + sort_little_pile(piles); + one_preset->nb_in--; } + print_all_stack(piles->a, piles->a, 'A'); + print_all_stack(piles->b, piles->b, 'B'); } int sort_path(t_stacks *piles, int value) @@ -39,6 +41,8 @@ int sort_path(t_stacks *piles, int value) int end_path; start_path = number_move_reverse(piles, value, 's'); + if (start_path == 0) + return (1); end_path = number_move_reverse(piles, value, 'e'); if (start_path < end_path) return (1); @@ -54,7 +58,7 @@ int number_move_reverse(t_stacks *piles, int value, char start_end) tmp = piles->b; if (start_end == 's') { - while(tmp->value > value) + while(tmp->value < value) { tmp = tmp->next; i++; @@ -63,7 +67,7 @@ int number_move_reverse(t_stacks *piles, int value, char start_end) else { tmp = tmp->previous; - while(tmp->value < value) + while(tmp->value > value) { tmp = tmp->previous; i++; @@ -74,9 +78,6 @@ int number_move_reverse(t_stacks *piles, int value, char start_end) void sort_little_pile(t_stacks *piles) { - int i; - - i = 0; if (!piles->b) { pb(piles); @@ -89,5 +90,7 @@ void sort_little_pile(t_stacks *piles) return ; } if (sort_path(piles, piles->a->value)) - //you stop here + sort_from_left(piles); + else + sort_from_right(piles); } diff --git a/algorithms/medium_utils/sort_utils_two.c b/algorithms/medium_utils/sort_utils_two.c new file mode 100644 index 0000000..f21df33 --- /dev/null +++ b/algorithms/medium_utils/sort_utils_two.c @@ -0,0 +1,49 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* sort_utils_two.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mteriier +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2026/01/06 07:52:36 by mteriier #+# #+# */ +/* Updated: 2026/01/06 07:52:38 by mteriier ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "push_swap.h" + +void sort_from_left(t_stacks *piles) +{ + int i; + + i = 0; + while (piles->a->value > piles->b->value) + { + rb(piles); + i++; + } + pb(piles); + while (i > 0) + { + rrb(piles); + i--; + } +} + +void sort_from_right(t_stacks *piles) +{ + int i; + + i = 0; + while (piles->a->value < piles->b->previous->value) + { + rrb(piles); + i++; + } + pb(piles); + while (i >= 0) + { + rb(piles); + i--; + } +} diff --git a/push_swap b/push_swap new file mode 100755 index 0000000000000000000000000000000000000000..a863f9dadbe50a8e90dca5c39fe8052b8e59c251 GIT binary patch literal 26928 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 U{0Ezes?=MJp}NYxmLh}y2B5$HTmS$7 literal 0 HcmV?d00001 diff --git a/push_swap.h b/push_swap.h index f636297..75c7d55 100644 --- a/push_swap.h +++ b/push_swap.h @@ -73,9 +73,16 @@ t_tab *free_tab(t_tab **first); t_tab *get_next_tab(t_stack *first, t_tab *tab, int range); t_tab *init_first_tab(t_stack *first, int range); t_tab *allocate_tab(int range_max, int nb); -int wich_path(t_stacks *piles, int max_range, int range); -int path_to_start(t_stacks *piles, int max_range, int range); -int path_to_end(t_stacks *piles, int max_range, int range); +int wich_path(t_stacks *piles, int max_range, int range, char c); +int path_to_start(t_stacks *piles, int max_range, int range, char c); +int path_to_end(t_stacks *piles, int max_range, int range, char c); +void bucket_algo(t_stacks *piles, t_tab *preset, int range); +void push_range_to_b(t_stacks *piles, t_tab *one_preset, int range); +int sort_path(t_stacks *piles, int value); +int number_move_reverse(t_stacks *piles, int value, char start_end); +void sort_little_pile(t_stacks *piles); +void sort_from_left(t_stacks *piles); +void sort_from_right(t_stacks *piles); /*FUNCTION IN MAIN*/ void print_all_stack(t_stack *stack, t_stack *first, char pile); int verif_no_double(int *tab, int len, int value); diff --git a/test_one.c b/test_one.c index e56d78c..da1dac3 100644 --- a/test_one.c +++ b/test_one.c @@ -16,23 +16,21 @@ int test1(int argc, char **argv) { - t_stacks *stacks; + t_stacks *piles; + t_tab *preset; - stacks = NULL; + piles = NULL; if (argc > 1) { - stacks = init_big_stacks(argc, argv); - print_all_stack(stacks->a, stacks->a, 'A'); - print_all_stack(stacks->b, stacks->b, 'B'); - rra(stacks); - print_all_stack(stacks->a, stacks->a, 'A'); - print_all_stack(stacks->b, stacks->b, 'B'); + piles = init_big_stacks(argc, argv); + preset = get_tabs(piles->a, range_bucket(piles->a)); + bucket_algo(piles, preset, range_bucket(piles->a)); } - if (stacks->a) - stack_clear_all(stacks->a, stacks->a); - if (stacks->b) - stack_clear_all(stacks->b, stacks->b); - free(stacks); + if (piles->a) + stack_clear_all(piles->a, piles->a); + if (piles->b) + stack_clear_all(piles->b, piles->b); + free(piles); return (0); } @@ -52,8 +50,8 @@ int test2(char **argv) tab = auto_shuffle(len); piles = init_big_stacks2(tab, len); preset = get_tabs(piles->a, range_bucket(piles->a)); + bucket_algo(piles, preset, range_bucket(piles->a)); free(tab); - free_tab(&preset); if (piles->a) stack_clear_all(piles->a, piles->a); if (piles->b)