fonction fillsolution remplis les lignes dans le bon sens

This commit is contained in:
hugogogo
2021-07-01 12:35:28 +02:00
parent c6edab3883
commit 95ae6c5c4e
14 changed files with 64 additions and 36 deletions

View File

@@ -33,7 +33,7 @@ SRCS = push_swap.c \
ODIR = ./builds
OBJS = $(SRCS:%.c=$(ODIR)/%.o)
CFLAGS = -I$(IDIR) -g3 -Wall -Wextra -Werror
CFLAGS = -I$(IDIR) -I./libft/includes/ -g3 -Wall -Wextra -Werror
LFLAGS = -L$(LDIR) -l$(LIBS)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,7 +1,7 @@
#ifndef PUSH_SWAP_H
# define PUSH_SWAP_H
# include "../libft/includes/libft.h"
# include "libft.h"
# include <unistd.h> // read(), write(), sleep()
# include <stdlib.h> // malloc(), free(), exit(), atoi()

BIN
push_swap

Binary file not shown.

View File

@@ -1,32 +1,28 @@
#include "push_swap.h"
/*
** the nb compared to i in the while loop is the number
** of elements of the list that are competiting
** n is the nbr of elements of the list that are competiting
*/
int match(t_stack **a)
int match(t_stack *a, int n)
{
t_stack *tmp;
int smaller;
int position;
int i;
int j;
tmp = *a;
smaller = tmp->n;
smaller = a->n;
position = 0;
i = 1;
j = 0;
while (i < 4)
while (i < n)
{
tmp = tmp->next;
if (tmp->n < smaller)
a = a->next;
if (a->n < smaller)
{
smaller = tmp->n;
j = i;
smaller = a->n;
position = i;
}
i++;
}
ft_printf("%i [%i]\n", smaller, j);
return (j);
return (position);
}
void nb_to_top(t_stack **a, t_list *solution, int i)
@@ -47,13 +43,36 @@ void nb_to_top(t_stack **a, t_list *solution, int i)
}
}
int last_element(t_stack *a)
{
while (a->next)
a = a->next;
return (a->n);
}
void hugo_sort(t_stack **a, t_stack **b, t_list *solution)
{
int i;
// int last;
int i;
int j;
i = match(a);
nb_to_top(a, solution, i);
(void)b;
// last = last_element(*a);
j = 5;
while (--j)
{
i = match(*a, 4);
nb_to_top(a, solution, i);
if ((*b) && (*a)->n < (*b)->n)
{
ra(a, &solution);
ft_putchar('t');
}
else
{
ft_putchar('v');
pb(b, a, &solution);
}
}
}
/*
sa(a, &solution);

View File

@@ -2,15 +2,23 @@
/*
** this function is called by actions like sa()
** it fills a new element on the chained list like this :
** name!a: nb nb nb nb nb!b: nb nb nb
** it fills a new str element on the chained list like this :
**
** it will later be printed like this ("!" is the char to split) :
** name
** a: nb nb nb nb nb
** b: nb nb nb
** b: nbb3 nbb2 nbb1!a: nba5 nba4 nba3 nba2 nba1!name
** (it fills it by the end, "!name" first, then "nba1" on its back, and so on)
**
** or only "name" if no flag -p
** so it can later be printed like that (in case of flag -p) :
** the "!" split the str :
**
** [0]b: nbb3 nbb2 nbb1 [1]a: nba5 nba4 nba3 nba2 nba1 [2]name
**
** to produce :
**
** [2]name
** [1] a: nba5 nba4 nba3 nba2 nba1
** [0] b: nbb3 nbb2 nbb1
**
** (if no flag -p, only [2]name is displayed)
*/
void fill_solution(t_list *solution, char *sp)
{
@@ -20,20 +28,21 @@ void fill_solution(t_list *solution, char *sp)
a = *(t_stack **)(solution->content);
b = *(t_stack **)(solution->next->content);
stack = ft_strjoinfree(ft_strdup(sp), ft_strdup("!a:"));
stack = ft_strjoinfree(ft_strdup("!"), ft_strdup(sp));
while (a != NULL)
{
stack = ft_strjoinfree(stack, ft_strdup(" "));
stack = ft_strjoinfree(stack, ft_itoa(a->n));
stack = ft_strjoinfree(ft_itoa(a->n), stack);
stack = ft_strjoinfree(ft_strdup(" "), stack);
a = a->next;
}
stack = ft_strjoinfree(stack, ft_strdup("!b:"));
stack = ft_strjoinfree(ft_strdup("!a:"), stack);
while (b != NULL)
{
stack = ft_strjoinfree(stack, ft_strdup(" "));
stack = ft_strjoinfree(stack, ft_itoa(b->n));
stack = ft_strjoinfree(ft_itoa(b->n), stack);
stack = ft_strjoinfree(ft_strdup(" "), stack);
b = b->next;
}
stack = ft_strjoinfree(ft_strdup("b:"), stack);
ft_lstadd_back(&solution, ft_lstnew(stack));
}
@@ -48,11 +57,11 @@ void print_result(t_list *result, int flag)
{
i++;
part = ft_split(result->content, '!');
ft_printf("%s\n", part[0]);
ft_printf("%s\n", part[2]);
if (flag)
{
ft_printf(" %s\n", part[1]);
ft_printf(" %s\n", part[2]);
ft_printf(" %s\n", part[0]);
}
result = result->next;
free(part[0]);