From ad855e59151d1295bcbb1118032bebb067cb9c6a Mon Sep 17 00:00:00 2001 From: Maoake Teriierooiterai Date: Fri, 9 Jan 2026 14:57:05 +0100 Subject: [PATCH 1/3] fixing some issues on the checker error and need to fix a last thing on the bucket range algo --- algorithms/medium/utils_medium.c | 5 +++++ checker/verif_is_digit.c | 2 ++ checker/verif_overflow.c | 9 +++++++++ flags/algorithms_sort.c | 4 +++- 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/algorithms/medium/utils_medium.c b/algorithms/medium/utils_medium.c index 5b78da6..c9307a6 100644 --- a/algorithms/medium/utils_medium.c +++ b/algorithms/medium/utils_medium.c @@ -43,6 +43,8 @@ int get_next_lower(t_stack *first, int old_lower) if (old_lower < tmp->value && tmp->value <= next_lower) { next_lower = tmp->value; + if (next_lower == -2147483648) + return (next_lower); } tmp = tmp->next; } @@ -53,7 +55,10 @@ int calcul_range(int value, int range) { int max_range; + max_range = 0; + if (value == 2147483647) + return (value); if (value < 0) while (max_range > value) max_range -= range; diff --git a/checker/verif_is_digit.c b/checker/verif_is_digit.c index 65b4e0a..9bbd134 100644 --- a/checker/verif_is_digit.c +++ b/checker/verif_is_digit.c @@ -21,6 +21,8 @@ static int scan_str_is_digit(char *tab) { if (!ft_isdigit(tab[i]) && (tab[i] == '-' && !ft_isdigit(tab[i + 1]))) return (0); + if (tab[i] == '+' && !ft_isdigit(tab[i + 1])) + return (0); i++; } return (1); diff --git a/checker/verif_overflow.c b/checker/verif_overflow.c index d9aa159..c9518c7 100644 --- a/checker/verif_overflow.c +++ b/checker/verif_overflow.c @@ -12,6 +12,13 @@ #include "parsing.h" +// static int calcul_sign(char c) +// { +// if (c == '-') +// return (-1); +// return (1); +// } + static int verif_atoi(const char *nptr) { size_t i; @@ -21,6 +28,8 @@ static int verif_atoi(const char *nptr) i = 0; tmp = 0; before = 0; + if (ft_strncmp("-2147483648", nptr, 12)) + return (1); while ((nptr[i] >= 9 && nptr[i] <= 13) || nptr[i] == ' ') i++; if (nptr[i] == '-' || nptr[i] == '+') diff --git a/flags/algorithms_sort.c b/flags/algorithms_sort.c index c91c614..fbdef72 100644 --- a/flags/algorithms_sort.c +++ b/flags/algorithms_sort.c @@ -48,6 +48,8 @@ void complex(t_stacks *stacks) void adaptive(t_stacks *stacks) { - (void)stacks; + //simple(stacks); + medium(stacks); + //complex(stacks); return ; } From 69dc80e498b3a4b5878d73e0a50ad533553dc3f8 Mon Sep 17 00:00:00 2001 From: Maoake Teriierooiterai Date: Mon, 12 Jan 2026 11:35:23 +0100 Subject: [PATCH 2/3] fix my medium algo --- algorithms/medium/utils_medium.c | 12 ++++++++---- algorithms/medium/utils_medium_two.c | 21 ++++++++++++++------- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/algorithms/medium/utils_medium.c b/algorithms/medium/utils_medium.c index c9307a6..80f68de 100644 --- a/algorithms/medium/utils_medium.c +++ b/algorithms/medium/utils_medium.c @@ -16,11 +16,14 @@ int get_first_lower(t_stack *first) { t_stack *tmp; int lower; + int pass; tmp = first; lower = tmp->value; - while (tmp->next != first) + pass = 1; + while (tmp != first || pass == 1) { + pass = 0; if (lower > tmp->value) lower = tmp->value; tmp = tmp->next; @@ -85,17 +88,18 @@ int get_number_in_range(int max_range, t_stack *a, int range) int nb_in; t_stack *tmp; t_stack *first; + int pass; nb_in = 0; tmp = a; + pass = 1; first = tmp; - while (tmp->next != first) + while (tmp != first || pass == 1) { + pass = 0; if (in_range(tmp->value, max_range, range)) nb_in++; tmp = tmp->next; } - if (in_range(tmp->value, max_range, range)) - nb_in++; return (nb_in); } diff --git a/algorithms/medium/utils_medium_two.c b/algorithms/medium/utils_medium_two.c index 70d91ed..167566a 100644 --- a/algorithms/medium/utils_medium_two.c +++ b/algorithms/medium/utils_medium_two.c @@ -16,12 +16,15 @@ static int get_max_number(t_stack *first) { int max; + int pass; t_stack *a; a = first; max = a->value; - while (a->next != first) + pass = 1; + while (a!= first || pass == 1) { + pass = 0; if (max < a->value) max = a->value; a = a->next; @@ -33,13 +36,17 @@ static int get_min_number(t_stack *first) { int min; t_stack *a; + int pass; a = first; min = a->value; - while (a->next != first) + pass = 1; + while (a != first || pass == 1) { + pass = 0; if (min > a->value) min = a->value; + a = a->next; } return (min); @@ -59,16 +66,16 @@ static int my_sqrt(int nb) int range_bucket(t_stack *first) { - int len; - int diff; - int sqrt; + int len; + long diff; + int sqrt; len = stack_len(first); - diff = get_max_number(first) - get_min_number(first); + diff = (long)get_max_number(first) - (long)get_min_number(first); sqrt = my_sqrt(len); if (diff / sqrt < 2) { return (get_max_number(first)); } - return ((get_max_number(first) - get_min_number(first)) / my_sqrt(len)); + return (diff / my_sqrt(len)); } From ccccc3b64015b8375a97e11bb97571f4e57ac68b Mon Sep 17 00:00:00 2001 From: Maoake Teriierooiterai Date: Mon, 12 Jan 2026 12:37:56 +0100 Subject: [PATCH 3/3] finish the disorder --- algorithms/medium/utils_medium.c | 1 - algorithms/medium/utils_medium_two.c | 3 +-- checker/check_error.c | 2 -- checker/verif_flag.c | 5 +++-- flags/algorithms_sort.c | 19 +++++++++++++++---- flags/flag.c | 4 ++-- headers/flags.h | 2 +- headers/parsing.h | 2 +- parsing/disorder.c | 7 ++++--- parsing/ft_strjoin.c | 2 +- 10 files changed, 28 insertions(+), 19 deletions(-) diff --git a/algorithms/medium/utils_medium.c b/algorithms/medium/utils_medium.c index 80f68de..f1d2113 100644 --- a/algorithms/medium/utils_medium.c +++ b/algorithms/medium/utils_medium.c @@ -58,7 +58,6 @@ int calcul_range(int value, int range) { int max_range; - max_range = 0; if (value == 2147483647) return (value); diff --git a/algorithms/medium/utils_medium_two.c b/algorithms/medium/utils_medium_two.c index 167566a..b89824d 100644 --- a/algorithms/medium/utils_medium_two.c +++ b/algorithms/medium/utils_medium_two.c @@ -22,7 +22,7 @@ static int get_max_number(t_stack *first) a = first; max = a->value; pass = 1; - while (a!= first || pass == 1) + while (a != first || pass == 1) { pass = 0; if (max < a->value) @@ -46,7 +46,6 @@ static int get_min_number(t_stack *first) pass = 0; if (min > a->value) min = a->value; - a = a->next; } return (min); diff --git a/checker/check_error.c b/checker/check_error.c index b549333..1f24a07 100644 --- a/checker/check_error.c +++ b/checker/check_error.c @@ -24,5 +24,3 @@ int check_error(char **tab, int mod) return (0); return (1); } - - diff --git a/checker/verif_flag.c b/checker/verif_flag.c index 8ad3d76..52b6794 100644 --- a/checker/verif_flag.c +++ b/checker/verif_flag.c @@ -20,6 +20,7 @@ static int is_exist_flag(char **tab, int pos) if (ft_strncmp(tab[pos], "--bench", 7) || ft_strncmp(tab[pos], "--simple", 8) || ft_strncmp(tab[pos], "--medium", 8) + || ft_strncmp(tab[pos], "--adaptive", 10) || ft_strncmp(tab[pos], "--complex", 9)) verif = 1; return (verif); @@ -40,7 +41,7 @@ static int verif_exist_flag(char **tab, int mod) return (verif); } -static int verif_double_flag(char **tab, int mod) +static int verif_double_flag(char **tab, int mod) { int verif; @@ -57,4 +58,4 @@ int verif_flag(char **tab, int mod) if (verif_double_flag(tab, mod) && verif_exist_flag(tab, mod)) return (1); return (0); -} \ No newline at end of file +} diff --git a/flags/algorithms_sort.c b/flags/algorithms_sort.c index fbdef72..2fe3c48 100644 --- a/flags/algorithms_sort.c +++ b/flags/algorithms_sort.c @@ -12,6 +12,7 @@ #include "push_swap.h" #include "medium_headers.h" +#include "parsing.h" void simple(t_stacks *stacks) { @@ -46,10 +47,20 @@ void complex(t_stacks *stacks) radix(stacks); } -void adaptive(t_stacks *stacks) +void adaptive(t_stacks *stacks, char **tab) { - //simple(stacks); - medium(stacks); - //complex(stacks); + int i; + float disorder; + + i = 0; + while (!ft_isdigit(tab[i][0]) && tab[i]) + i++; + disorder = compute_disorder(tab, i - 1); + if (disorder < 0.3) + simple(stacks); + else if (disorder < 0.46) + medium(stacks); + else + complex(stacks); return ; } diff --git a/flags/flag.c b/flags/flag.c index 6dcb3dc..e531221 100644 --- a/flags/flag.c +++ b/flags/flag.c @@ -102,9 +102,9 @@ void flags(int pos, int pos_b, char **argv, t_stacks *stacks) else if (ft_strncmp(argv[pos], "--complex", 30) && pos > 0) complex(stacks); else if (ft_strncmp(argv[pos], "--adaptive", 30) && pos > 0) - adaptive(stacks); + adaptive(stacks, argv); else - adaptive(stacks); + adaptive(stacks, argv); if (pos_b > 0) stacks->bench = 1; } diff --git a/headers/flags.h b/headers/flags.h index c92c67e..7e2cc2b 100644 --- a/headers/flags.h +++ b/headers/flags.h @@ -16,7 +16,7 @@ void simple(t_stacks *stacks); void medium(t_stacks *stacks); void complex(t_stacks *stacks); -void adaptive(t_stacks *stacks); +void adaptive(t_stacks *stacks, char **tab); void flags(int pos, int pos_b, char **argv, t_stacks *stacks); int pos_bench(char **argv, int mod); int pos_flag(char **argv, int mod); diff --git a/headers/parsing.h b/headers/parsing.h index eee65d8..9beb240 100644 --- a/headers/parsing.h +++ b/headers/parsing.h @@ -33,6 +33,6 @@ int ft_strlcpy(char *dst, const char *src, int size); int ft_strlcat(char *dst, const char *src, int size); char *join_all(int argc, char **argv); char **split_all(char *tab); -float compute_disorder(char **strs); +float compute_disorder(char **strs, int pos); #endif diff --git a/parsing/disorder.c b/parsing/disorder.c index d76d0c3..3c06b0c 100644 --- a/parsing/disorder.c +++ b/parsing/disorder.c @@ -11,6 +11,7 @@ /* ************************************************************************** */ #include "push_swap.h" +#include "parsing.h" static int strs_len(char **strs) { @@ -22,7 +23,7 @@ static int strs_len(char **strs) return (i); } -float compute_disorder(char **strs) +float compute_disorder(char **strs, int pos) { float mistakes; float total_pairs; @@ -31,14 +32,14 @@ float compute_disorder(char **strs) mistakes = 0; total_pairs = 0; - i = 0; + i = pos; while (i < strs_len(strs)) { j = i + 1; while (j < strs_len(strs)) { total_pairs += 1; - if (strs[i] > strs[j]) + if (ft_atoi(strs[i]) > ft_atoi(strs[j])) mistakes += 1; j++; } diff --git a/parsing/ft_strjoin.c b/parsing/ft_strjoin.c index 1e6a961..2a43733 100644 --- a/parsing/ft_strjoin.c +++ b/parsing/ft_strjoin.c @@ -14,7 +14,7 @@ char *ft_strjoin(char const *s1, char const *s2) { - int total_len; + int total_len; char *tmp; total_len = ft_strlen(s1) + ft_strlen(s2);