/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* push_swap.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: tmaze +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/03/03 11:41:49 by tmaze #+# #+# */ /* Updated: 2019/03/06 16:24:16 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ #include "push_swap.h" int sort(t_psdata *data, int size) { t_stack *ptr; int i; if (size > 2) { if (!sort(data, ((size % 2) ? size + 1 : size) / 2)) return (0); if (!sort(data, size - (((size % 2) ? size + 1 : size) / 2))) return (0); } else if (size == 1) { printf("ra\n"); ps_rot(data, 'a'); return (1); } i = 0; while (size > 2 && i < size) { printf("rra\n"); ps_rerot(data, 'a'); i++; } i = 0; ptr = data->a; while (i < ((size % 2) ? size + 1 : size) / 2) { ptr->ind = 1; ptr = ptr->next; i++; } i = 0; while (ptr && i < (size - (((size % 2) ? size + 1 : size) / 2))) { ptr->ind = 2; ptr = ptr->next; i++; } while (data->a->ind == 1) { printf("pb\n"); if (!ps_push(data, 'b')) return (0); if (data->size_b > 1) { printf("rb\n"); ps_rot(data, 'b'); } } while (data->a->ind != 0 || data->size_b > 0) { if ((data->a->ind != 0 && data->size_b > 0 && data->a->nb > data->b->nb) || (data->a->ind == 0 && data->size_b > 0)) { printf("pa\n"); ps_push(data, 'a'); } data->a->ind = 0; printf("ra\n"); ps_rot(data, 'a'); } return (1); } int main(int ac, char **av) { t_stack *ptr; t_psdata data; int i; ps_initdata(&data); if (!get_params(&data, ac, av)) return (0); ptr = data.a; if (ptr == NULL) ft_putendl("Empty"); while (ptr) { ptr->ind = 0; ptr = ptr->next; } if (!sort(&data, data.size_a)) { printf("Error\n"); ps_stkclean(&data); return (1); } /* ptr = data.a; */ /* i = data.a->nb; */ /* while (ptr) */ /* { */ /* printf("%d\n", ptr->nb); */ /* ptr->ind = 0; */ /* if (i != ptr->nb && i > ptr->nb) */ /* { */ /* printf("KO\n"); */ /* break ; */ /* } */ /* i = ptr->nb; */ /* ptr = ptr->next; */ /* } */ /* if (ptr == NULL) */ /* printf("OK\n"); */ /* ps_stkclean(&data); */ return (0); }