Skip to content

Commit 1c2acf4

Browse files
author
Allan BARRIELLE
committed
wbu keep the biggest path
1 parent a3f3458 commit 1c2acf4

File tree

7 files changed

+73
-92
lines changed

7 files changed

+73
-92
lines changed

includes/lemin.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ typedef struct s_room
2424
int y;
2525
int start;
2626
int end;
27+
int ants;
2728
struct s_tube *tube;
2829
struct s_room *next;
2930
} t_room;
@@ -38,8 +39,7 @@ typedef struct s_tube
3839
typedef struct s_path
3940
{
4041
char *name;
41-
int ants;
42-
int start;
42+
struct s_room *r;
4343
int size;
4444
struct s_path *next;
4545
} t_path;
@@ -50,13 +50,13 @@ typedef struct s_ant
5050
int bonus_color;
5151
int bonus_path;
5252
} t_ant;
53+
void add_back_path(t_path **t, t_room *r, int p);
5354
void handles_path(t_path **p, t_ant *a, int max_path);
5455
int check_link(t_room *r, char *s1);
5556
char *next_comment(char *name);
5657
char *ft_name_coord(char *name);
5758
void verif(t_room *r);
5859
t_path *save_path(t_room *r, int *i);
59-
void add_back_path(t_path **t, char *name, int start, int p);
6060
void poids(t_room *r);
6161
void handles_algo(t_room *r, t_ant *a);
6262
void print_room(t_room *b);

libft/get_next_line.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,14 @@ static int gnl_read(int const fd, char *tmpline, char *tmpbuf[0], char **line)
4747
}
4848
i = (tmpline[0] != '\0') ? 1 : 0;
4949
i = (ret < 0) ? -1 : i;
50-
// ft_printf("%s\n", *line);
50+
ft_printf("%s\n", *line);
5151
return (i);
5252
}
5353

5454
void normi(char **tmpbuf, char *tmp1, char *line)
5555
{
5656
*tmpbuf = ft_strdup(tmp1);
57-
// ft_printf("%s\n", line);
57+
ft_printf("%s\n", line);
5858
}
5959

6060
int get_next_line(int const fd, char **line)

srcs/algo.c

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -113,16 +113,6 @@ void handles_algo(t_room *r, t_ant *a)
113113
j = multi_path(r, a);
114114
// ft_printf("{RED}%d",j);
115115
path = (t_path **)malloc(sizeof(t_path *) * j);
116-
// algo_lem(r);
117-
// path[b] = save_path(r, &i);
118-
// // print_path(path[b]);
119-
// // algo_lem(r);
120-
// // while(r->tube->prev)
121-
// // r->tube = r->tube->prev;
122-
// // path[b] = save_path(r, &i);
123-
// // print_path(path[b]);
124-
// print_room(r);
125-
126116
while (i == 0 && b < j)
127117
{
128118
algo_lem(r);
@@ -131,14 +121,13 @@ void handles_algo(t_room *r, t_ant *a)
131121
{
132122
j = b;
133123
break;
134-
// ft_exit("Invalid Path");
135124
}
136125
else if(a->bonus_path == 1)
137126
print_path(path[b]);
138127
b++;
139128
}
140129
if (!(path[0]))
141130
ft_exit("Invalid Path");
142-
ft_printf("{RED}%d,%d,%d",i,b,j);
131+
// ft_printf("{RED}%d,%d,%d",i,b,j);
143132
handles_path(path, a, j);
144133
}

srcs/path.c

Lines changed: 11 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ int verif_no_path(t_room *r)
2323
tube = r->tube;
2424
while(r->tube)
2525
{
26-
ft_printf("{GRE}[%s by= %d p= %d]\n",r->tube->room->name,r->tube->room->by,r->tube->room->poids);
26+
// ft_printf("{GRE}[%s by= %d p= %d]\n",r->tube->room->name,r->tube->room->by,r->tube->room->poids);
2727
if (r->tube->room->by != 4)
2828
i++;
2929
r->tube = r->tube->next;
@@ -45,44 +45,27 @@ void save_path_(t_room **rp, t_path **pa, int p)
4545

4646
path = *pa;
4747
r = *rp;
48-
add_back_path(&path, r->name, r->start, p);
49-
48+
add_back_path(&path, r, p);
5049
while (r && r->end != 1)
5150
{
52-
// tmp = r->tube;
53-
// while(r->tube->prev)
54-
// r->tube = r->tube->prev;
5551
while (r->tube && (r->tube->room->by == 4 || r->tube->room->poids != 1))
5652
{
57-
// ft_printf("{GRE}[%s - %d - %d]\n", r->tube->room->name,r->tube->room->by,r->tube->room->poids);
5853
r->tube = r->tube->next;
5954
}
60-
// if(!r->tube->next)
61-
// {
62-
// ft_printf("{GRE}[%s - %d - %d]\n", r->tube->next->room->name,r->tube->next->room->by,r->tube->next->room->poids);
63-
// exit(1);
64-
// }
6555
if (r->by != 4 && r->tube->room->poids == 1)
6656
{
67-
// ft_printf("{RED}[r=%s - %s - %d - %d]\n",r->name,r->tube->room->name,r->tube->room->by,r->tube->room->poids);
6857
if(r->start != 1)
69-
add_back_path(&path, r->name, r->start, p);
58+
add_back_path(&path, r, p);
7059
r->by = 4;
71-
// ft_printf("{PUR}[%s]\n", r->name);
72-
// while (r->tube->room->by == 4 || r->tube->room->poids != 1)
73-
// r->tube = r->tube->next;
7460
r = r->tube->room;
7561
}
7662
else
7763
{
78-
// ft_printf("{RED}[%s]\n", tmp->room->name);
79-
// r->tube = r->tube->next;
8064
r = r->tube->room;
81-
// ft_printf("{YEL}[%s]\n", r->tube->room->name);
8265
}
8366
p++;
8467
}
85-
add_back_path(&path, r->name, r->start, p);
68+
add_back_path(&path, r, p);
8669
*pa = path;
8770
*rp = r;
8871
}
@@ -94,44 +77,41 @@ t_path *save_path(t_room *r, int *i)
9477

9578
p = 1;
9679
path = NULL;
97-
ft_printf("1");
9880
if(!r->tube || !verif_no_path(r))
9981
{
10082
(*i)++;
101-
ft_printf("3");
10283
return (path);
10384
}
104-
ft_printf("2");
85+
// ft_printf("2");
10586
save_path_(&r,&path,p);
10687
return (path);
10788
}
10889

109-
t_path *init_path(char *name, int start, int p)
90+
t_path *init_path(t_room *r, int p)
11091
{
11192
t_path *u;
11293

11394
if (!(u = (t_path*)malloc(sizeof(t_path))))
11495
ft_exit("Failed to Malloc");
115-
u->name = name;
116-
u->ants = 0;
117-
u->start = start;
96+
u->r = r;
97+
u->name = r->name;
11898
u->size = p;
11999
u->next = NULL;
120100
return (u);
121101
}
122102

123-
void add_back_path(t_path **t, char *name, int start, int p)
103+
void add_back_path(t_path **t, t_room *r, int p)
124104
{
125105
t_path *tmp;
126106

127107
tmp = *t;
128108
if (!tmp)
129109
{
130-
*t = init_path(name, start, p);
110+
*t = init_path(r, p);
131111
return ;
132112
}
133113
while (tmp->next)
134114
tmp = tmp->next;
135-
tmp->next = init_path(name, start, p);
115+
tmp->next = init_path(r, p);
136116
tmp = tmp->next;
137117
}

srcs/room.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ t_room *init_room(char *name, int index)
2424
r->x = 0;
2525
r->by = 0;
2626
r->poids = 0;
27+
r->ants = 0;
2728
r->name = ft_name_coord(name);
2829
r->start = (index == 1) ? 1 : 0;
2930
r->end = (index == 2) ? 1 : 0;

srcs/send.c

Lines changed: 54 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ void reverse_list(t_path **list, t_ant *a)
1919
t_path *r;
2020

2121
p = *list;
22-
p->ants = a->ant;
22+
p->r->ants = a->ant;
2323
q = NULL;
2424
while (p)
2525
{
@@ -28,7 +28,7 @@ void reverse_list(t_path **list, t_ant *a)
2828
p = p->next;
2929
q->next = r;
3030
}
31-
q->start = 2;
31+
// q->start = 2;
3232
*list = q;
3333
}
3434

@@ -74,20 +74,20 @@ void sort_lists(t_path **p, int *max_path)
7474
}
7575
i = 0;
7676
p = begin;
77-
while(i < *(max_path))
78-
{
79-
if (i + 1 < *(max_path) && (p[i + 1]->size > (p[0]->size + 2)))
80-
{
81-
*(max_path) = i + 1;
82-
p[i + 1] = NULL;
83-
p = begin;
84-
return ;
85-
// free(p[i + 1]);
86-
// i = 0;
87-
}
88-
i++;
89-
}
90-
// p = begin;
77+
// while(i < *(max_path))
78+
// {
79+
// if (i + 1 < *(max_path) && (p[i + 1]->size > (p[0]->size + 2)))
80+
// {
81+
// *(max_path) = i + 1;
82+
// p[i + 1] = NULL;
83+
// p = begin;
84+
// return ;
85+
// // free(p[i + 1]);
86+
// // i = 0;
87+
// }
88+
// i++;
89+
// }
90+
// // p = begin;
9191
}
9292
void handles_path(t_path **p, t_ant *a, int max_path)
9393
{
@@ -106,56 +106,66 @@ void handles_path(t_path **p, t_ant *a, int max_path)
106106
while(i < max_path)
107107
{
108108
reverse_list(&p[i],a);
109-
// tmp[i] = p[i];
110-
i++;
111-
}
112-
if (max_path > 1)
113-
sort_lists(p,&max_path);
114-
i = 0;
115-
ft_printf("\n\n");
116-
while(i <= max_path)
117-
{
118109
tmp[i] = p[i];
119110
i++;
120111
}
112+
// if (max_path > 1)
113+
// sort_lists(p,&max_path);
114+
// i = 0;
115+
// ft_printf("\n\n");
116+
// while(i <= max_path)
117+
// {
118+
// tmp[i] = p[i];
119+
// i++;
120+
// }
121121
i = 0;
122-
while(end <= a->ant)
122+
ft_printf("%d",max_path);
123+
while (p[i]->r->ants <= a->ant)
123124
{
124-
while(i < max_path)
125+
while (i < max_path)
125126
{
126-
while(p[i])
127+
while (p[i])
127128
{
128-
if (p[i]->start == 2 && p[i]->next->ants > 0)
129+
if (p[i]->r->end == 1 && p[i]->next->r->ants > 0 && p[i]->next->r->start != 1)
129130
{
130-
end++;
131-
p[i]->ants = end;
132-
// ft_printf("[1]");
133-
print_ants(a->bonus_color, p[i]->ants,p[i]->name);
134-
if (end == a->ant)
135-
return ;
131+
// ft_printf("[%d - %d - %s - %s]",p[i]->next->r->ants,p[i]->r->ants, p[i]->next->r->name, p[i]->r->name);
132+
// p[i]->r->ants++;
133+
p[i]->r->ants = p[i]->next->r->ants;
134+
// ft_printf("[%d - %d - %s - %s]",p[i]->next->r->ants,p[i]->r->ants, p[i]->next->r->name, p[i]->r->name);
135+
136+
p[i]->next->r->ants =0;
137+
// ft_printf("[4]");
138+
print_ants(a->bonus_color, p[i]->r->ants,p[i]->name);
139+
// if (p[i]->r->ants == a->ant)
140+
// return ;
136141
}
137-
else if (p[i]->next && p[i]->next->start == 1 && start > 0)
142+
else if (p[i]->next && p[i]->next->r->start == 1 && start > 0)
138143
{
139-
p[i]->next->ants--;
144+
p[i]->next->r->ants--;
140145
start--;
141146
ants++;
142-
p[i]->ants = ants;
147+
p[i]->r->ants = ants;
143148
// ft_printf("[2]");
144-
print_ants(a->bonus_color, p[i]->ants,p[i]->name);
149+
print_ants(a->bonus_color, p[i]->r->ants,p[i]->name);
150+
// ft_printf("[5]");
145151
}
146-
else if (p[i]->next && p[i]->next->ants > 0 && p[i]->next->start != 1)
152+
else if (p[i]->next && p[i]->next->r->ants > 0 && p[i]->next->r->start != 1)
147153
{
148-
p[i]->ants = p[i]->next->ants;
149-
p[i]->next->ants = 0;
154+
// ft_printf("[6]");
155+
p[i]->r->ants = p[i]->next->r->ants;
156+
p[i]->next->r->ants = 0;
150157
// ft_printf("[3]");
151-
print_ants(a->bonus_color, p[i]->ants,p[i]->name);
158+
print_ants(a->bonus_color, p[i]->r->ants,p[i]->name);
152159
}
153160
p[i] = p[i]->next;
161+
// ft_printf("[8]");
154162
}
163+
// ft_printf("[9]");
155164
p[i] = tmp[i];
156165
i++;
166+
if(p[0]->r->ants == a->ant)
167+
return ;
157168
}
158-
159169
i = 0;
160170
ft_printf("\n");
161171
p[i] = tmp[i];

tests/simple

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@
33
start 0 0
44
##end
55
end 1 1
6+
dada 1 1
67
start-end

0 commit comments

Comments
 (0)