]> Untitled Git - axy/ft/pushswap.git/commitdiff
Half broken but kinda works, just need to use something else inside split sort and...
author= <=>
Mon, 15 Dec 2025 19:48:23 +0000 (20:48 +0100)
committer= <=>
Mon, 15 Dec 2025 19:48:23 +0000 (20:48 +0100)
_res_leaf_sort_lookup.h
algorithm_leafsort.c
algorithm_splitsort.c
leaf_sort.c
leaf_sort.h
leaf_sort_parse.c
pushswap.h

index ddae9f7baba659de12b62ed6015385b2d75acf1f..9b78790fc277ca8fbf9eb2d8ff4d3bd43fc56537 100644 (file)
@@ -6,7 +6,7 @@
 /*   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       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -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
 */
index e01fb321e7445c8be03c56840fe473117fe87cd9..6e362398e19e2fc2a1ffa8d0fb7b2ae0fe7d6d1e 100644 (file)
@@ -6,7 +6,7 @@
 /*   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       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -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);
 }
index 12bbb8bac974368204544d37c2b8e66ac4e97d94..6fe5492c9c2d705a4706966fc2193e08b76deca7 100644 (file)
@@ -6,7 +6,7 @@
 /*   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       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -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++);
 }
index f3181a045b535d17dc450a884dc8f0ca0f1d2317..fba36474c9bdf41d675d554aaba2e994f57c9346 100644 (file)
@@ -6,61 +6,68 @@
 /*   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);
 }
index 316f05752a8ae5b694e1a5cc2455f1afb143298e..e31f834d8799fd4f97aa93cf60cabf5622c60bdb 100644 (file)
@@ -6,7 +6,7 @@
 /*   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       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -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);
index 00b8d010fe92b9005c485b76d1032ad0e89663e0..beb79749ead32f2fe0792f0cfc42f211c7b894e9 100644 (file)
@@ -6,7 +6,7 @@
 /*   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       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -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);
index 0133b6bba27d729df5edff93ee8b4edd3ec03f5e..8b42dbdfb4c0a30d34ebfa896475d73102ce21dd 100644 (file)
@@ -6,7 +6,7 @@
 /*   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       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -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);