diff --git a/srcs/checker.c b/srcs/checker.c index 2998dd0..2241f36 100644 --- a/srcs/checker.c +++ b/srcs/checker.c @@ -6,7 +6,7 @@ /* 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; 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) { - 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); } ft_lstaddend(&(data->op), nop); diff --git a/srcs/ps_stktools2.c b/srcs/ps_stktools2.c index 6d2843a..5362610 100644 --- a/srcs/ps_stktools2.c +++ b/srcs/ps_stktools2.c @@ -6,7 +6,7 @@ /* 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); else { - ft_putendl_fd("Error", 2); + ft_putendl_fd("Error 1", 2); ps_stkclean(data); return (0); } diff --git a/srcs/push_swap.c b/srcs/push_swap.c index 8423c7e..18f4ac0 100644 --- a/srcs/push_swap.c +++ b/srcs/push_swap.c @@ -6,7 +6,7 @@ /* 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) { t_stack *ptr; @@ -56,6 +130,13 @@ void sort2(t_psdata *data) ps_rot(data, 'b'); } 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) { 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 = 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); ptr = data.a; i = 0; while (ptr) { -// ft_printf("@ind: %d nb: %d ind: %d\n", i, ptr->nb, ptr->ind); ptr = ptr->next; i++; } 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); return (0); }