/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 */
/* */
/* ************************************************************************** */
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
*/
/* By: agilliar <agilliar@student.42mulhouse.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 */
/* */
/* ************************************************************************** */
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);
}
/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 */
/* */
/* ************************************************************************** */
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)
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++);
}
/* By: agilliar <agilliar@student.42mulhouse.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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);
}
/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 */
/* */
/* ************************************************************************** */
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);
/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 */
/* */
/* ************************************************************************** */
{
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);
/* By: clefrere <clefrere@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 */
/* */
/* ************************************************************************** */
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);