/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* push_swap.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2021/11/25 23:10:37 by apommier #+# #+# */ /* Updated: 2022/01/08 18:25:27 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ #include "push_swap.h" void printf_list(t_list *start) { int i = 0; printf("----printf_list----\n"); while(start) { i++; printf("lst%d --- nbr: %d index: %d\n", i,*(int*)start->nbr, start->index); start = start->next; } return; } int is_nbr(int nbrarg, char **list) { int i; int j; i = 0; j = 0; while (++j < nbrarg) { i = 0; if (list[j][i] == '-' && !list[j][i++]) return (0); while (list[j][i]) { if (list[j][i] < '0' || list[j][i] > '9') { return (0); } i++; } } return (1); } int is_double(int nbrarg, char **list) { int i; int j; int len; i = 1; j = 1; nbrarg--; while (nbrarg - j) { i = 1; while(list[j + i]) { if (ft_strlen(list[j]) > ft_strlen(list[j + i])) len = ft_strlen(list[j]); else len = ft_strlen(list[j + i]); if (ft_strncmp(list[j], list[j + i], len) == 0) return (0); i++; } j++; } return (1); } int push_swap(int nbrarg, char **list) { t_list *start; start = 0; if (!is_nbr(nbrarg, list) || !is_double(nbrarg, list)) { ft_putstr_fd("Error\n", 2); return (0); } start = set_list(--nbrarg, list); lst_indexing(start); printf_list(start); find_loop_index(start); if (is_sorted(start)) { ft_lstclear(&start, &free); return (1); } ft_lstclear(&start, &free); return (1); } t_list *set_list(int nbrarg, char **srcs) { int *tmp; t_list *start; t_list *swap; start = 0; swap = 0; *(srcs)++; tmp = ft_calloc(sizeof(int), 1); *tmp = ft_atoi(*srcs); start = ft_lstnew(tmp); swap = start; while (--nbrarg) { *(srcs)++; tmp = ft_calloc(sizeof(int), 1); *tmp = ft_atoi(*srcs); swap->next = ft_lstnew(tmp); swap = swap->next; } return (start); } int is_sorted(t_list *list) { while (list->next) { if (*(int*)list->nbr > *(int*)list->next->nbr) return (0); else list = list->next; } return (1); } /*void choose_algo(t_list *list) { int size; size = ft_lstsize(list); if (size == 3) sort3(list); }*/