NAME=push_swap
-SRCS=algorithm_quicksort.c algorithm_selection_sort.c cheatalloc.c clist.c leaf_sort_parse.c list.c main_pushswap.c op_output.c op_p.c op_parse.c op_r.c op_rr.c op_s.c ops.c ops_groups.c ops_optimizer.c output.c psval.c slice.c stack.c stacks.c
+SRCS=algorithm_quicksort.c algorithm_selection_sort.c cheatalloc.c clist.c leaf_sort_index.c leaf_sort_parse.c list.c main_pushswap.c op_output.c op_p.c op_parse.c op_r.c op_rr.c op_s.c ops.c ops_groups.c ops_optimizer.c output.c psval.c slice.c stack.c stacks.c
RESSRCS=_res_leaf_sort_lookup.h
/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/12/10 18:01:04 by agilliar #+# #+# */
-/* Updated: 2025/12/10 18:35:51 by agilliar ### ########.fr */
+/* Updated: 2025/12/10 21:18:45 by agilliar ### ########.fr */
/* */
/* ************************************************************************** */
extern void _binary__build_leaf_sort_lookup_res_end(void);
t_leaf_lookups *leaf_lookups(void);
+t_leaf_solution *leaf_sort_get(size_t size, const t_psval *data,
+ t_leaf_lookup *lookup);
#endif
--- /dev/null
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* leaf_sort_index.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2025/12/10 19:46:38 by agilliar #+# #+# */
+/* Updated: 2025/12/10 21:16:39 by agilliar ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "leaf_sort.h"
+
+static size_t factorial(size_t n)
+{
+ if (n < 2)
+ return (1);
+ return (factorial(n - 1) * n);
+}
+
+static size_t leaf_sort_index_norm(size_t size, const t_psval *data)
+{
+ size_t store[4];
+ size_t i;
+ size_t j;
+ size_t max_pos;
+
+ if (size > 4 || size < 1)
+ cheatexit(1);
+ j = 0;
+ while (j < size)
+ store[j++] = 0;
+ i = size;
+ while (i--)
+ {
+ max_pos = 0;
+ j = 1;
+ while (j < size)
+ {
+ if (i >= store[j] && (data[j] > data[max_pos] || store[max_pos] > i))
+ max_pos = j;
+ j++;
+ }
+ store[max_pos] = i;
+ }
+ return (store[0]);
+}
+
+static size_t leaf_sort_index(size_t size, const t_psval *data)
+{
+ if (size < 2)
+ return (0);
+ return (leaf_sort_index_norm(size, data) * factorial(size - 1)
+ + leaf_sort_index(size - 1, data + 1));
+}
+
+static t_leaf_solution *leaf_group_get(size_t size, t_leaf_lookup *lookup)
+{
+ if (size == 0)
+ return (lookup->zero);
+ if (size == 1)
+ return (lookup->one);
+ if (size == 2)
+ return (lookup->two);
+ if (size == 3)
+ return (lookup->three);
+ return (lookup->four);
+}
+
+t_leaf_solution *leaf_sort_get(size_t size, const t_psval *data,
+ t_leaf_lookup *lookup)
+{
+ return (&leaf_group_get(size, lookup)[leaf_sort_index(size, data)]);
+}
/* By: clefrere <clefrere@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/12/02 22:15:12 by agilliar #+# #+# */
-/* Updated: 2025/12/10 19:17:52 by agilliar ### ########.fr */
+/* Updated: 2025/12/10 20:25:15 by agilliar ### ########.fr */
/* */
/* ************************************************************************** */
args.state = stacks_new();
args.bench = false;
args.algo = NULL;
- t_leaf_lookups *test = leaf_lookups();
- printf("%i", test->other.four[0].store[2]);
+ t_psval test[] = {0, 2, 3, 1};
+ printf("%i", leaf_sort_get(4, test, &leaf_lookups()->other)->store[4]);
for (int i = 1; i < argc; i++)
arg_step(argv[i], &args);
ops = ops_compose(ops_stackops(), ops_optimizer(ops_output(), &opt));