-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsolvers.c
111 lines (102 loc) · 2.77 KB
/
solvers.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* solvers.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: ltombell <[email protected]> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/06 11:34:06 by ltombell #+# #+# */
/* Updated: 2022/12/12 11:34:41 by ltombell ### ########.fr */
/* */
/* ************************************************************************** */
#include "push_swap.h"
void ft_push_in_b_five_n_solve(t_lista **a, t_lista **b)
{
int tmp;
if (ft_is_list_ordered(*a) == 0)
{
while (ft_list_length(*a) > 3)
{
tmp = ft_find_min(*a);
while ((*a)->nb != tmp)
{
if (ft_doing_ra_counter(*a, tmp)
< ft_doing_rra_counter(*a, tmp))
{
while ((*a)->nb != tmp)
ra_rb(a, 'a');
}
else
{
while ((*a)->nb != tmp)
rra_rrb(a, 'a');
}
}
pa_pb(a, b, 'b');
}
ft_three_solver(a);
}
}
void ft_pusha_in_b(t_lista **a, t_lista **b, t_prg *prg)
{
int tmpmin;
tmpmin = prg->best_lis;
while (ft_list_length(*a) > prg->max_count)
{
if (tmpmin <= (*a)->nb)
{
tmpmin = (*a)->nb;
ra_rb(a, 'a');
}
else
pa_pb(a, b, 'b');
}
}
void ft_order_lis(t_lista **lista, int min)
{
if (ft_doing_ra_counter(*lista, min) < ft_doing_rra_counter(*lista, min))
{
while ((*lista)->nb != min)
ra_rb(lista, 'a');
}
else
{
while ((*lista)->nb != min)
rra_rrb(lista, 'a');
}
}
void ft_three_solver(t_lista **a)
{
if ((*a)->nb > (*a)->next->nb && (*a)->next->nb < (*a)->next->next->nb
&& (*a)->nb < (*a)->next->next->nb)
sa_sb(*a, 'a');
else if ((*a)->nb > (*a)->next->nb && (*a)->next->nb > (*a)->next->next->nb
&& (*a)->nb > (*a)->next->next->nb)
{
sa_sb(*a, 'a');
rra_rrb(a, 'a');
}
else if ((*a)->nb > (*a)->next->nb && (*a)->next->nb < (*a)->next->next->nb
&& (*a)->nb > (*a)->next->next->nb)
ra_rb(a, 'a');
else if ((*a)->nb < (*a)->next->nb && (*a)->next->nb > (*a)->next->next->nb
&& (*a)->nb < (*a)->next->next->nb)
{
sa_sb(*a, 'a');
ra_rb(a, 'a');
}
else if ((*a)->nb < (*a)->next->nb && (*a)->next->nb > (*a)->next->next->nb
&& (*a)->nb > (*a)->next->next->nb)
rra_rrb(a, 'a');
}
void sa_sb(t_lista *lista, char c)
{
int swap;
swap = lista->nb;
lista->nb = lista->next->nb;
lista->next->nb = swap;
if (c == 'a')
write(1, "sa\n", 3);
else if (c == 'b')
write(1, "sb\n", 3);
}