From e563d663eccd1950062fde0857bf331a6dd8c006 Mon Sep 17 00:00:00 2001 From: Maoake Date: Mon, 22 Dec 2025 11:06:34 +0000 Subject: [PATCH] modifying some preset for the tabs and adding some functions in the main for do the test --- Makefile | 2 +- algorithms/medium_algo.c | 7 ++- algorithms/medium_utils/utils_medium.c | 8 +-- algorithms/medium_utils/utils_medium_two.c | 65 ++++++++++++++++++++++ algorithms/medium_utils/utils_struct_tab.c | 19 ++++--- main.c | 46 +++++++++++++++ push_swap.h | 14 +++-- 7 files changed, 141 insertions(+), 20 deletions(-) create mode 100644 algorithms/medium_utils/utils_medium_two.c diff --git a/Makefile b/Makefile index 290233c..24f94e2 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ 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 +MEDIUM_ALGO = utils_medium.c utils_struct_tab.c utils_medium_two.c ALGO_UTILS = check_order.c compare_value.c stack_len.c diff --git a/algorithms/medium_algo.c b/algorithms/medium_algo.c index 0c405e0..b8bd74d 100644 --- a/algorithms/medium_algo.c +++ b/algorithms/medium_algo.c @@ -12,7 +12,12 @@ #include "push_swap.h" -void bucket_algo(void) +void bucket_algo(t_stacks *piles) { + int range; + t_tab *preset; + + range = range_bucket(piles->a); + preset = get_tabs(piles->a, range); return ; } diff --git a/algorithms/medium_utils/utils_medium.c b/algorithms/medium_utils/utils_medium.c index 7156c01..098af07 100644 --- a/algorithms/medium_utils/utils_medium.c +++ b/algorithms/medium_utils/utils_medium.c @@ -60,17 +60,17 @@ int calcul_range(int value, int range) return (max_range - 1); } -int in_range(int value, int max_range) +int in_range(int value, int max_range, int range) { int min_range; - min_range = max_range - 9; + min_range = max_range - (range - 1); if (value <= max_range && value >= min_range) return (1); return (0); } -int get_number_in_range(int range, t_stack *a) +int get_number_in_range(int max_range, t_stack *a, int range) { int nb_in; t_stack *tmp; @@ -81,7 +81,7 @@ int get_number_in_range(int range, t_stack *a) first = tmp; while (tmp->next != first) { - if (in_range(tmp->value, range)) + if (in_range(tmp->value, max_range, range)) nb_in++; tmp = tmp->next; } diff --git a/algorithms/medium_utils/utils_medium_two.c b/algorithms/medium_utils/utils_medium_two.c new file mode 100644 index 0000000..020c9bd --- /dev/null +++ b/algorithms/medium_utils/utils_medium_two.c @@ -0,0 +1,65 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* utils_medium_two.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mteriier +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/12/22 09:36:56 by mteriier #+# #+# */ +/* Updated: 2025/12/22 09:38:19 by mteriier ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "push_swap.h" + +int get_max_number(t_stack *first) +{ + int max; + t_stack *a; + + a = first; + max = a->value; + while (a->next != first) + { + if (max < a->value) + max = a->value; + a = a->next; + } + return (max); +} + +int get_min_number(t_stack *first) +{ + int min; + t_stack *a; + + a = first; + min = a->value; + while (a->next != first) + { + if (min > a->value) + min = a->value; + a = a->next; + } + return (min); +} + +int my_sqrt(int nb) +{ + int i; + + if (nb < 1) + return (0); + i = 0; + while (i * i <= nb) + i++; + return (i); +} + +int range_bucket(t_stack *first) +{ + int len; + + len = stack_len(first); + return ((get_max_number(first) - get_min_number(first)) / my_sqrt(len)); +} diff --git a/algorithms/medium_utils/utils_struct_tab.c b/algorithms/medium_utils/utils_struct_tab.c index 7d5caa0..e67a6cc 100644 --- a/algorithms/medium_utils/utils_struct_tab.c +++ b/algorithms/medium_utils/utils_struct_tab.c @@ -25,7 +25,7 @@ t_tab *allocate_tab(int range_max, int nb) return (tab); } -t_tab *get_tabs(t_stack *first) +t_tab *get_tabs(t_stack *first, int range) { t_tab *tmp; t_tab *first_tab; @@ -33,14 +33,14 @@ t_tab *get_tabs(t_stack *first) int scan_nb_in_tab; len_stack = stack_len(first); - first_tab = init_first_tab(first); + first_tab = init_first_tab(first, range); if (!first_tab) return (NULL); scan_nb_in_tab = first_tab->nb_in; tmp = first_tab; while (scan_nb_in_tab < len_stack) { - tmp->next = get_next_tab(first, tmp); + tmp->next = get_next_tab(first, tmp, range); if (!(tmp->next)) return (free_tab(first_tab)); tmp = tmp->next; @@ -49,29 +49,30 @@ t_tab *get_tabs(t_stack *first) return (first_tab); } -t_tab *init_first_tab(t_stack *first) +t_tab *init_first_tab(t_stack *first, int range) { t_tab *tab; int lower; int range_max; lower = get_first_lower(first); - range_max = calcul_range(lower, 10); - tab = allocate_tab(range_max, get_number_in_range(range_max, first)); + range_max = calcul_range(lower, range); + tab = allocate_tab(range_max, get_number_in_range(range_max, first, range)); if (!tab) return (NULL); return (tab); } -t_tab *get_next_tab(t_stack *first, t_tab *tab) +t_tab *get_next_tab(t_stack *first, t_tab *tab, int range) { int lower; int range_max; t_tab *next_tab; lower = get_next_lower(first, tab->max_range); - range_max = calcul_range(lower, 10); - next_tab = allocate_tab(range_max, get_number_in_range(range_max, first)); + range_max = calcul_range(lower, range); + next_tab = allocate_tab(range_max, + get_number_in_range(range_max, first, range)); return (next_tab); } diff --git a/main.c b/main.c index 9d3f5de..a364247 100644 --- a/main.c +++ b/main.c @@ -33,6 +33,52 @@ void print_all_stack(t_stack *stack, t_stack *first, char pile) printf("[%d] \n", tmp->value); } +int verif_no_double(int *tab, int len, int value) +{ + int i; + + i = 0; + while (i < len) + { + if (value == tab[i]) + return (0); + i++; + } + return (1); +} + +int adding_number(int *tab, int len) +{ + int stock; + + stock = tab[0]; + while (!verif_no_double(tab, len, stock)) + { + stock = rand(); + } + return stock; +} + +int *auto_shuffle(int len_tab) +{ + int *tab; + int i; + int len_added; + + i = 1; + tab = malloc(len_tab * sizeof(int)); + if (!tab) + return (NULL); + tab[0] = rand(); + while (i < len_tab) + { + tab[i] = adding_number(tab, i); + i++; + } + return (tab); +} + + int main(int argc, char **argv) { t_stacks *stacks; diff --git a/push_swap.h b/push_swap.h index fa6482a..e63820e 100644 --- a/push_swap.h +++ b/push_swap.h @@ -58,15 +58,19 @@ int check_order(t_stack *stack); int is_upper_compare(t_stack *t1, t_stack *t2); int stack_len(t_stack *stack); /*FUNCTION FOR MEDIUM ALGO*/ -t_tab *get_tabs(t_stack *first); -int get_number_in_range(int range, t_stack *a); -int in_range(int value, int max_range); +t_tab *get_tabs(t_stack *first, int range); +int get_number_in_range(int max_range, t_stack *a, int range); +int in_range(int value, int max_range, int range); int calcul_range(int value, int range); int get_next_lower(t_stack *first, int old_lower); int get_first_lower(t_stack *first); +int my_sqrt(int nb); +int get_max_number(t_stack *first); +int get_min_number(t_stack *first); +int range_bucket(t_stack *first); t_tab *free_tab(t_tab *first); -t_tab *get_next_tab(t_stack *first, t_tab *tab); -t_tab *init_first_tab(t_stack *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); #endif