]> git.dkaiser.de - 42/push_swap.git/commitdiff
Add movement (with some bugs)
authorDominik Kaiser <dominik@dominik-XPS.fritz.box>
Wed, 17 Apr 2024 10:21:25 +0000 (12:21 +0200)
committerDominik Kaiser <dominik@dominik-XPS.fritz.box>
Wed, 17 Apr 2024 10:21:25 +0000 (12:21 +0200)
TODO: Fix sorting direction. Right now the numbers are sorted max ->
min instead of min -> max.
TODO: Fix sorting bug. Some numbers are not sorted.

cmd_optimization.c
sorting.c

index d0928f5b13da4580e8c7f7cc2655aed218eb68e9..9fcf87662a5e2ef25d808a4eb931abc1f6324828 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/04/13 16:42:34 by dkaiser           #+#    #+#             */
-/*   Updated: 2024/04/17 09:41:10 by dkaiser          ###   ########.fr       */
+/*   Updated: 2024/04/17 12:15:41 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -88,5 +88,6 @@ void optimize_commands(t_psdata *data)
 {
     optimize_redundant(data, PA, PB);
     optimize_redundant(data, RB, RRB);
+    optimize_redundant(data, RA, RRA);
     optimize_two_stack_ops(data, RA, RB, RR);
 }
index a682280e6b88890b8d29b0e402d7e18410e2e710..c4d3644fd76350fabd5b5aab4fa384c31351efa3 100644 (file)
--- a/sorting.c
+++ b/sorting.c
@@ -6,7 +6,7 @@
 /*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/04/13 15:04:19 by dkaiser           #+#    #+#             */
-/*   Updated: 2024/04/17 11:50:56 by dkaiser          ###   ########.fr       */
+/*   Updated: 2024/04/17 12:20:26 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -57,9 +57,51 @@ static int calculate_score(t_psdata *data, int pos)
     return moves_to_top + moves_to_spot;
 }
 
-static void move_to_right_spot(t_psdata *data, int idx)
+
+
+static void move_to_top(t_psdata *data, int idx)
+{
+    if (idx < (data->b->size + 1) / 2)
+    {
+        while (idx--)
+            run_command(data, RB);
+    }
+    else
+    {
+        idx = data->b->size - idx;
+        while (idx--)
+            run_command(data, RRB);
+    }
+}
+
+static void move_to_spot(t_psdata *data)
 {
+    int pos;
+    int i;
 
+    pos = 0;
+    while (pos < data->a->size && data->b->stack[0] < data->a->stack[pos])
+        pos++;
+    if (pos < (data->a->size + 1) / 2)
+    {
+        i = pos;
+        while (i--)
+            run_command(data, RA);
+        run_command(data, PA);
+        i = pos;
+        while (i--)
+            run_command(data, RRA);
+    }
+    else
+    {
+        i = data->a->size - pos;
+        while (i--)
+            run_command(data, RRA);
+        run_command(data, PA);
+        i = data->a->size - pos;
+        while (i--)
+            run_command(data, RA);
+    }
 }
 
 static void scoresort(t_psdata *data)
@@ -84,7 +126,8 @@ static void scoresort(t_psdata *data)
             min_score = i;
         i++;
     }
-    move_to_right_spot(data, min_score);
+    move_to_top(data, min_score);
+    move_to_spot(data);
 
     free(scores);
     if (data->b->size > 0)