/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* push_swap.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: tmaze +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/03/03 11:41:49 by tmaze #+# #+# */ /* Updated: 2019/03/06 12:10:10 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ #include "push_swap.h" int sort(t_psdata *data, int size) { t_stack *ptr; int i; printf("start sort %d\n", size); 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) return (1); 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++; } i = 0; ptr = data->a; while (ptr) { printf("@ind %d: nb=%d ind=%d\n", i, ptr->nb, ptr->ind); 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) { printf("data->a->ind %d\ndata->a->nb %d\ndata->size_b %zu\n", data->a->ind, data->a->nb, data->size_b); 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'); } printf("mise a zero:\ndata->a->ind %d\ndata->a->nb %d\n", data->a->ind, data->a->nb); data->a->ind = 0; printf("ra\n"); ps_rot(data, 'a'); i = 0; ptr = data->a; while (ptr) { printf("@ind %d: nb=%d ind=%d\n", i, ptr->nb, ptr->ind); ptr = ptr->next; i++; } } return (1); } int main(int ac, char **av) { t_stack *ptr; t_psdata data; 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; while (ptr) { printf("%d\n", ptr->nb); ptr->ind = 0; ptr = ptr->next; } return (0); }