all sorts of sorts =3
added specific sort for 3 and 5
This commit is contained in:
parent
efab9452b1
commit
9ab20ed483
@ -6,7 +6,7 @@
|
|||||||
/* By: tmaze <tmaze@student.42.fr> +#+ +:+ +#+ */
|
/* By: tmaze <tmaze@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2019/02/23 13:35:15 by tmaze #+# #+# */
|
/* Created: 2019/02/23 13:35:15 by tmaze #+# #+# */
|
||||||
/* Updated: 2019/03/08 16:48:26 by tmaze ### ########.fr */
|
/* Updated: 2019/03/09 14:57:41 by tmaze ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -50,10 +50,10 @@ int read_ops(t_psdata *data)
|
|||||||
buff = NULL;
|
buff = NULL;
|
||||||
while ((ret = get_next_line(0, &buff)) > 0)
|
while ((ret = get_next_line(0, &buff)) > 0)
|
||||||
{
|
{
|
||||||
ft_printf("'%s'\n", buff);
|
|
||||||
if (ft_strlen(buff) > 4 || !is_op(buff) || (nop = ft_lstnew(buff, 4)) == NULL)
|
if (ft_strlen(buff) > 4 || !is_op(buff) || (nop = ft_lstnew(buff, 4)) == NULL)
|
||||||
{
|
{
|
||||||
ft_putendl_fd("Error", 2);
|
ft_printf("'%s' %d %d %d\n", buff, ft_strlen(buff) > 4, !is_op(buff), nop == NULL);
|
||||||
|
ft_putendl_fd("Error 2", 2);
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
ft_lstaddend(&(data->op), nop);
|
ft_lstaddend(&(data->op), nop);
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
/* By: tmaze <tmaze@student.42.fr> +#+ +:+ +#+ */
|
/* By: tmaze <tmaze@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2019/02/25 12:44:08 by tmaze #+# #+# */
|
/* Created: 2019/02/25 12:44:08 by tmaze #+# #+# */
|
||||||
/* Updated: 2019/03/08 16:25:38 by tmaze ### ########.fr */
|
/* Updated: 2019/03/09 15:04:14 by tmaze ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -56,7 +56,7 @@ int get_params(t_psdata *data, int ac, char **av)
|
|||||||
ps_stkpsh(data, 'a', new);
|
ps_stkpsh(data, 'a', new);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ft_putendl_fd("Error", 2);
|
ft_putendl_fd("Error 1", 2);
|
||||||
ps_stkclean(data);
|
ps_stkclean(data);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
115
srcs/push_swap.c
115
srcs/push_swap.c
@ -6,7 +6,7 @@
|
|||||||
/* By: tmaze <tmaze@student.42.fr> +#+ +:+ +#+ */
|
/* By: tmaze <tmaze@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2019/03/03 11:41:49 by tmaze #+# #+# */
|
/* Created: 2019/03/03 11:41:49 by tmaze #+# #+# */
|
||||||
/* Updated: 2019/03/08 18:02:31 by tmaze ### ########.fr */
|
/* Updated: 2019/03/09 17:44:01 by tmaze ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -28,6 +28,80 @@ void mark_groups(t_psdata *data)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void get_min_max(t_psdata *data, int *min_max, int *ind_min_max)
|
||||||
|
{
|
||||||
|
t_stack *ptr;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
min_max[0] = FT_INT_MAX;
|
||||||
|
min_max[1] = FT_INT_MIN;
|
||||||
|
ptr = data->a;
|
||||||
|
i = 0;
|
||||||
|
while (ptr)
|
||||||
|
{
|
||||||
|
if (ptr->nb < min_max[0] && (ind_min_max[0] = i) == i)
|
||||||
|
min_max[0] = ptr->nb;
|
||||||
|
if (ptr->nb > min_max[1] && (ind_min_max[1] = i) == i)
|
||||||
|
min_max[1] = ptr->nb;
|
||||||
|
i++;
|
||||||
|
ptr = ptr->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void sortfor3(t_psdata *data)
|
||||||
|
{
|
||||||
|
int min_max[2];
|
||||||
|
int ind_min_max[2];
|
||||||
|
|
||||||
|
get_min_max(data, min_max, ind_min_max);
|
||||||
|
while (ind_min_max[0] != 0 || ind_min_max[1] != 2)
|
||||||
|
{
|
||||||
|
if (ind_min_max[0] == ind_min_max[1] - 1)
|
||||||
|
ft_printf("sa\n");
|
||||||
|
if (ind_min_max[0] == ind_min_max[1] - 1)
|
||||||
|
ps_swap(data, 'a');
|
||||||
|
if (ind_min_max[1] == 0)
|
||||||
|
ft_printf("ra\n");
|
||||||
|
if (ind_min_max[1] == 0)
|
||||||
|
ps_rot(data, 'a');
|
||||||
|
if (ind_min_max[0] == 2 && ind_min_max[1] == 1)
|
||||||
|
ft_printf("rra\n");
|
||||||
|
if (ind_min_max[0] == 2 && ind_min_max[1] == 1)
|
||||||
|
ps_rerot(data, 'a');
|
||||||
|
get_min_max(data, min_max, ind_min_max);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void sortfor5(t_psdata *data)
|
||||||
|
{
|
||||||
|
ft_printf("pb\n");
|
||||||
|
ps_push(data, 'b');
|
||||||
|
ft_printf("pb\n");
|
||||||
|
ps_push(data, 'b');
|
||||||
|
if (data->b->nb > data->b->next->nb)
|
||||||
|
{
|
||||||
|
ft_printf("sb\n");
|
||||||
|
ps_swap(data, 'b');
|
||||||
|
}
|
||||||
|
sortfor3(data);
|
||||||
|
data->b->ind = 1;
|
||||||
|
data->b->next->ind = 1;
|
||||||
|
data->a->ind = 2;
|
||||||
|
data->a->next->ind = 2;
|
||||||
|
data->a->next->next->ind = 2;
|
||||||
|
while (data->a->ind == 2 || data->size_b > 0)
|
||||||
|
{
|
||||||
|
if (data->a->ind != 2 || (data->size_b > 0 && data->b->nb < data->a->nb))
|
||||||
|
{
|
||||||
|
ft_printf("pa\n");
|
||||||
|
ps_push(data, 'a');
|
||||||
|
}
|
||||||
|
data->a->ind = 3;
|
||||||
|
ft_printf("ra\n");
|
||||||
|
ps_rot(data, 'a');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void sort2(t_psdata *data)
|
void sort2(t_psdata *data)
|
||||||
{
|
{
|
||||||
t_stack *ptr;
|
t_stack *ptr;
|
||||||
@ -56,6 +130,13 @@ void sort2(t_psdata *data)
|
|||||||
ps_rot(data, 'b');
|
ps_rot(data, 'b');
|
||||||
}
|
}
|
||||||
inds = data->a->ind;
|
inds = data->a->ind;
|
||||||
|
if (data->size_a == 3)
|
||||||
|
{
|
||||||
|
sortfor3(data);
|
||||||
|
data->a->ind = inds;
|
||||||
|
data->a->next->ind = inds;
|
||||||
|
data->a->next->next->ind = inds;
|
||||||
|
}
|
||||||
while (inds == data->a->ind || data->size_b > 0)
|
while (inds == data->a->ind || data->size_b > 0)
|
||||||
{
|
{
|
||||||
if (data->a->ind != inds || (data->size_b > 0 && data->b->nb < data->a->nb))
|
if (data->a->ind != inds || (data->size_b > 0 && data->b->nb < data->a->nb))
|
||||||
@ -166,35 +247,27 @@ int main(int ac, char **av)
|
|||||||
ptr->ind = 0;
|
ptr->ind = 0;
|
||||||
ptr = ptr->next;
|
ptr = ptr->next;
|
||||||
}
|
}
|
||||||
|
if (data.size_a == 3)
|
||||||
|
{
|
||||||
|
sortfor3(&data);
|
||||||
|
ps_stkclean(&data);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
else if (data.size_a == 5)
|
||||||
|
{
|
||||||
|
sortfor5(&data);
|
||||||
|
ps_stkclean(&data);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
mark_groups(&data);
|
mark_groups(&data);
|
||||||
ptr = data.a;
|
ptr = data.a;
|
||||||
i = 0;
|
i = 0;
|
||||||
while (ptr)
|
while (ptr)
|
||||||
{
|
{
|
||||||
// ft_printf("@ind: %d nb: %d ind: %d\n", i, ptr->nb, ptr->ind);
|
|
||||||
ptr = ptr->next;
|
ptr = ptr->next;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
sort2(&data);
|
sort2(&data);
|
||||||
/* if (!sort(&data, data.size_a)) */
|
|
||||||
/* { */
|
|
||||||
/* printf("Error\n"); */
|
|
||||||
/* ps_stkclean(&data); */
|
|
||||||
/* return (1); */
|
|
||||||
/* } */
|
|
||||||
ptr = data.a;
|
|
||||||
while (ptr)
|
|
||||||
{
|
|
||||||
// ft_printf("%d\n", ptr->nb);
|
|
||||||
if (ptr->next && ptr->nb > ptr->next->nb)
|
|
||||||
{
|
|
||||||
// ft_printf("KO\n");
|
|
||||||
ps_stkclean(&data);
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
ptr = ptr->next;
|
|
||||||
}
|
|
||||||
// ft_printf("OK\n");
|
|
||||||
ps_stkclean(&data);
|
ps_stkclean(&data);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user