From 6c29f1ec878a654049c553e20aa8c89ea014e7e9 Mon Sep 17 00:00:00 2001 From: = <=> Date: Mon, 15 Dec 2025 20:48:23 +0100 Subject: [PATCH] Half broken but kinda works, just need to use something else inside split sort and we're good --- _res_leaf_sort_lookup.h | 68 ++++++++++++++++++++--------------------- algorithm_leafsort.c | 4 +-- algorithm_splitsort.c | 8 ++--- leaf_sort.c | 49 ++++++++++++++++------------- leaf_sort.h | 8 ++--- leaf_sort_parse.c | 8 ++--- pushswap.h | 12 +++++--- 7 files changed, 83 insertions(+), 74 deletions(-) diff --git a/_res_leaf_sort_lookup.h b/_res_leaf_sort_lookup.h index ddae9f7..9b78790 100644 --- a/_res_leaf_sort_lookup.h +++ b/_res_leaf_sort_lookup.h @@ -6,7 +6,7 @@ /* By: agilliar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/12/10 16:53:22 by agilliar #+# #+# */ -/* Updated: 2025/12/15 20:00:41 by agilliar ### ########.fr */ +/* Updated: 2025/12/15 20:22:13 by agilliar ### ########.fr */ /* */ /* ************************************************************************** */ @@ -80,37 +80,37 @@ rra rra rra sa rra rra rra rra rra sa rra rra rra rra -rra pb -rra rra pb pb -rra pb rra pb -rra rra rra pb pb pb -rra rra pb rra pb pb -rra pb rra rra pb sb pb -rra rra pb pb rra pb -rra pb rra rra pb pb -rra pb rra pb rra pb -rra rra rra rra pb pb pb pb -rra rra rra pb rra pb pb pb -rra rra pb rra rra pb sb pb pb -rra rra rra pb pb rra pb pb -rra rra pb rra rra pb pb pb -rra rra pb rra pb rra pb pb -rra rra sa rra rra pb pb pb pb -rra rra sa rra pb rra pb pb pb -rra rra pb rra rra pb ss pb pb -rra rra rra pb pb pb rra pb -rra rra pb pb rra rra pb sb pb -rra rra pb rra pb pb rra pb -rra pb rra rra rra pb sb pb pb -rra pb rb rra rra pb rrr pb pb -rra pb rra rra rra pb ss pb pb -rra pb rra rra pb sb pb rra pb -rra rra pb pb rra rra pb pb -rra rra pb pb rra pb rra pb -rra pb rra rra rra pb pb pb -rra pb rra rra pb rra pb pb -rra pb rra pb rra rra pb sb pb -rra pb rra rra pb pb rra pb -rra pb rra pb rra rra pb pb -rra pb rra pb rra pb rra pb +pa +sb pa pa +pa pa +sb pa sb pa sa pa +sb pa sb pa pa +pa sb pa sa pa +sb pa pa pa +pa sb pa pa +pa pa pa +sb pa rr sb pa pa rrr pa +sb pa rr pa pa rrr pa +pa pa ss ra pa sa pa rra +sb pa sb pa ss pa pa +pa pa ss pa sa pa sa +pa ra pa pa pa rra +pa rr sb pa pa rrr pa +pa rr pa pa rrr pa +sb pa pa rr pa sa rrr pa +sb pa sb pa sa pa pa +pa pa ss pa sa pa +sb pa sb pa pa pa +pa sb pa rr pa sa rrr pa +pa sb pa ss pa pa +pa pa rr pa sa rrr pa +pa sb pa sa pa pa +pa pa ss pa pa +sb pa pa pa pa +pa sb pa sb pa sa pa +pa sb pa sb pa pa +pa pa sb pa sa pa +pa sb pa pa pa +pa pa sb pa pa +pa pa pa pa */ diff --git a/algorithm_leafsort.c b/algorithm_leafsort.c index e01fb32..6e36239 100644 --- a/algorithm_leafsort.c +++ b/algorithm_leafsort.c @@ -6,7 +6,7 @@ /* By: agilliar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/12/11 01:00:50 by agilliar #+# #+# */ -/* Updated: 2025/12/11 01:04:13 by agilliar ### ########.fr */ +/* Updated: 2025/12/15 20:36:32 by agilliar ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,5 +14,5 @@ void algorithm_leafsort(const t_stacks *stacks, t_closure cb) { - leaf_sort_local(stacks, cb, false, stacks->a.len); + leaf_top_a_a(stacks, cb, stacks->a.len); } diff --git a/algorithm_splitsort.c b/algorithm_splitsort.c index 12bbb8b..6fe5492 100644 --- a/algorithm_splitsort.c +++ b/algorithm_splitsort.c @@ -6,7 +6,7 @@ /* By: agilliar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/12/11 12:45:16 by agilliar #+# #+# */ -/* Updated: 2025/12/15 17:21:36 by agilliar ### ########.fr */ +/* Updated: 2025/12/15 20:42:44 by agilliar ### ########.fr */ /* */ /* ************************************************************************** */ @@ -181,12 +181,12 @@ typedef void (t_layer_func) (t_splitsort, t_list); void splitsort_leaf_a(t_splitsort sort, t_list range) { - leaf_sort_local(sort.stacks, sort.cb, false, range.len); + leaf_bot_a_a(sort.stacks, sort.cb, range.len); } static void splitsort_leaf_b(t_splitsort sort, t_list range) { - leaf_sort_other(sort.stacks, sort.cb, true, range.len); + leaf_top_b_a(sort.stacks, sort.cb, range.len); } static t_layer_func *layer_from_info(size_t depth, size_t blocks, size_t len) @@ -254,6 +254,6 @@ void test_splitsort(const t_stacks *stacks, t_closure cb) range = list_new(stacks->a); list_sort(range); i = 0; - while (!stacks_is_solved(stacks)) + while (!stacks_is_solved(stacks) && i < 3) splitsort_part_layer(sort, range, i++); } diff --git a/leaf_sort.c b/leaf_sort.c index f3181a0..fba3647 100644 --- a/leaf_sort.c +++ b/leaf_sort.c @@ -6,61 +6,68 @@ /* By: agilliar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/12/11 00:27:32 by agilliar #+# #+# */ -/* Updated: 2025/12/15 16:44:54 by agilliar ### ########.fr */ +/* Updated: 2025/12/15 20:47:50 by agilliar ### ########.fr */ /* */ /* ************************************************************************** */ #include "leaf_sort.h" -static void leaf_solution_apply(t_closure cb, bool mirrored, - t_leaf_solution *solution) +static void leaf_solution_apply(t_closure cb, t_leaf_solution *solution) { size_t i; i = 0; while (i < solution->used) - closure_callm(cb, solution->store[i++], mirrored); + closure_call(cb, solution->store[i++]); } -static t_leaf_solution *leaf_solution_get(const t_stacks *stacks, size_t size, - bool mirrored, t_leaf_lookup *lookup) +static t_leaf_solution *leaf_solution_get(const t_stack *stack, size_t size, + t_leaf_lookup *lookup, bool src_top) { t_psval store[4]; - const t_stack *stack; size_t i; + int dir; - stack = &stacks->a; - if (mirrored) - stack = &stacks->b; + dir = 1; + if (src_top) + dir = -1; if (size > 4 || stack->len < size) cheatexit(1); i = 0; while (i < size) { - store[i] = clist_get_at(stack->list, -i); + store[i] = clist_get_at(stack->list, i * dir + !src_top); i++; } return (leaf_sort_get(size, store, lookup)); } -void leaf_sort_local(const t_stacks *stacks, t_closure cb, - bool mirrored, size_t size) +void leaf_top_a_a(const t_stacks *stacks, t_closure cb, size_t size) { t_leaf_solution *solution; t_leaf_lookup *lookup; - lookup = &leaf_lookups()->local; - solution = leaf_solution_get(stacks, size, mirrored, lookup); - leaf_solution_apply(cb, mirrored, solution); + lookup = &leaf_lookups()->top_a_a; + solution = leaf_solution_get(&stacks->a, size, lookup, true); + leaf_solution_apply(cb, solution); } -void leaf_sort_other(const t_stacks *stacks, t_closure cb, - bool mirrored, size_t size) +void leaf_bot_a_a(const t_stacks *stacks, t_closure cb, size_t size) { t_leaf_solution *solution; t_leaf_lookup *lookup; - lookup = &leaf_lookups()->other; - solution = leaf_solution_get(stacks, size, mirrored, lookup); - leaf_solution_apply(cb, mirrored, solution); + lookup = &leaf_lookups()->bot_a_a; + solution = leaf_solution_get(&stacks->a, size, lookup, false); + leaf_solution_apply(cb, solution); +} + +void leaf_top_b_a(const t_stacks *stacks, t_closure cb, size_t size) +{ + t_leaf_solution *solution; + t_leaf_lookup *lookup; + + lookup = &leaf_lookups()->top_b_a; + solution = leaf_solution_get(&stacks->b, size, lookup, true); + leaf_solution_apply(cb, solution); } diff --git a/leaf_sort.h b/leaf_sort.h index 316f057..e31f834 100644 --- a/leaf_sort.h +++ b/leaf_sort.h @@ -6,7 +6,7 @@ /* By: agilliar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/12/10 18:01:04 by agilliar #+# #+# */ -/* Updated: 2025/12/15 20:07:33 by agilliar ### ########.fr */ +/* Updated: 2025/12/15 20:26:37 by agilliar ### ########.fr */ /* */ /* ************************************************************************** */ @@ -34,9 +34,9 @@ typedef struct s_leaf_lookup typedef struct s_leaf_lookups { - t_leaf_lookup top_a_top_a; - t_leaf_lookup bot_a_top_a; - t_leaf_lookup bot_a_top_b; + t_leaf_lookup top_a_a; + t_leaf_lookup bot_a_a; + t_leaf_lookup top_b_a; } t_leaf_lookups; extern void _binary__build_leaf_sort_lookup_res_start(void); diff --git a/leaf_sort_parse.c b/leaf_sort_parse.c index 00b8d01..beb7974 100644 --- a/leaf_sort_parse.c +++ b/leaf_sort_parse.c @@ -6,7 +6,7 @@ /* By: agilliar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/12/10 17:59:06 by agilliar #+# #+# */ -/* Updated: 2025/12/15 20:08:21 by agilliar ### ########.fr */ +/* Updated: 2025/12/15 20:33:13 by agilliar ### ########.fr */ /* */ /* ************************************************************************** */ @@ -59,9 +59,9 @@ static t_leaf_lookups leaf_lookups_parse(t_slice iter) { t_leaf_lookups res; - res.top_a_top_a = leaf_lookup_parse(&iter); - res.bot_a_top_a = leaf_lookup_parse(&iter); - res.bot_a_top_b = leaf_lookup_parse(&iter); + res.top_a_a = leaf_lookup_parse(&iter); + res.bot_a_a = leaf_lookup_parse(&iter); + res.top_b_a = leaf_lookup_parse(&iter); if (iter.len) cheatexit(1); return (res); diff --git a/pushswap.h b/pushswap.h index 0133b6b..8b42dbd 100644 --- a/pushswap.h +++ b/pushswap.h @@ -6,7 +6,7 @@ /* By: clefrere +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/12/02 11:02:44 by agilliar #+# #+# */ -/* Updated: 2025/12/15 13:46:49 by agilliar ### ########.fr */ +/* Updated: 2025/12/15 20:28:36 by agilliar ### ########.fr */ /* */ /* ************************************************************************** */ @@ -171,10 +171,12 @@ bool slice_eq(t_slice lhs, t_slice rhs); t_slice slice_split(t_slice *rem, char at); void slice_output(t_slice s); -void leaf_sort_local(const t_stacks *stacks, t_closure cb, - bool mirrored, size_t size); -void leaf_sort_other(const t_stacks *stacks, t_closure cb, - bool mirrored, size_t size); +void leaf_top_a_a(const t_stacks *stacks, t_closure cb, + size_t size); +void leaf_bot_a_a(const t_stacks *stacks, t_closure cb, + size_t size); +void leaf_top_b_a(const t_stacks *stacks, t_closure cb, + size_t size); void algorithm_selection_sort(const t_stacks *stacks, t_closure cb); void algorithm_quicksort(const t_stacks *stacks, t_closure cb); -- 2.51.0