Compare commits

...

5 Commits

Author SHA1 Message Date
Tanguy MAZE
3156bddf27 added start-end check
if start and end are linked, push all the ants through
2019-05-02 14:35:37 +02:00
Mthandazo Ndhlovu
a40b6b00e7 no more leaks on all maps 2019-05-02 13:25:41 +02:00
Mthandazo Ndhlovu
8552cf8a32 semi-final parser 2019-05-02 12:58:28 +02:00
Mthandazo Ndhlovu
4bb3b45781 a bit of code cleaning on the parser 2019-04-30 12:07:28 +02:00
Mthandazo Ndhlovu
ee59b79e75 a bit of code cleaning on the parser 2019-04-30 12:06:58 +02:00
23 changed files with 12916 additions and 87 deletions

BIN
Archive.zip Normal file

Binary file not shown.

BIN
generator Executable file

Binary file not shown.

View File

@@ -6,7 +6,7 @@
/* By: tmaze <tmaze@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/03/23 17:31:19 by tmaze #+# #+# */
/* Updated: 2019/04/29 12:14:34 by mndhlovu ### ########.fr */
/* Updated: 2019/05/02 14:26:31 by tmaze ### ########.fr */
/* */
/* ************************************************************************** */
@@ -78,6 +78,7 @@ typedef struct s_holder
{
int count;
t_temp *data;
t_syntax *syntax;
} t_holder;
typedef struct s_rdata
@@ -100,7 +101,7 @@ int lm_validate(t_syntax *synt, t_lmdata *lmdata);
int lm_parser(t_syntax *synt, t_lmdata *ldata
, t_holder *holder);
int lm_check_room_before(char **tab, t_syntax *synt);
void lm_clear_unv(t_holder *holder);
void lm_clear_unv(t_holder *holder, t_lmdata *ldata);
int lm_add_vertex(t_lmdata *ldata, char *raw, char flag
, t_syntax *synt);
int lm_ext_conn(t_holder *holder, t_lmdata *data
@@ -108,13 +109,17 @@ int lm_ext_conn(t_holder *holder, t_lmdata *data
int lm_init_src_dest(int *src, int *dest, t_lmdata *data
, char *raw);
int lm_find_index(t_lmdata *data, char *str);
void lm_get_cmd_vertices(int count, t_syntax *synt
, t_lmdata *ldata, char *line);
int lm_get_value(char *line);
void lm_get_cmd_vert(int count, t_syntax *synt
, t_lmdata *ldata, char *line);
void lm_get_vert_link(int count, t_syntax *synt
, t_lmdata *ldata, t_holder *holder
, char *line);
void lm_check_start_vert(int count, t_syntax *synt
, t_lmdata *ldata, char *line);
void lm_check_end_vert(int count, t_syntax *synt
, t_lmdata *ldata, char *line);
void lm_get_vert_link(int count, t_lmdata *ldata
, t_syntax *synt, t_holder *holder, char *line);
int lm_validate_rooms(char *name, char *x, char *y);
int lm_adj_parser(t_lmdata *lmdata, t_holder *holder);
void lm_init_data(t_syntax *synt, t_holder *holder
@@ -144,6 +149,7 @@ int get_score(t_lmdata *data, t_ind **ret, int nb_paths);
void print_paths(t_lmdata *data, t_ind **ret);
int push_ants(t_lmdata *data, t_ind **paths
, int nb_paths);
void push_ants_end(t_lmdata *data, char *e_name);
void del_map(t_lmdata *data);
int add_line_map(t_lmdata *data, char *line);

12708
map3

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
4
23
##start
start 0 0
##end

View File

@@ -1,13 +1,63 @@
3
1 0 2
##start
#dd
#ddddd
##sjdjdjssjds
##djsjddjs
#sddsds
##start
#dsdsdsdsd
0 2 0
##end
##sjsjsjjds
#sjdsjdsjs
#sjsjdsjsaj
#sjsjss
##start
##end
#sjsjdsjsdh
#sksksdksdsk
#skdkskdsjds
4 2 6
2 4 2
#comment
#comment
#comment
#comment
#comment
3 4 4
#comment
#comment
##nothing
#comming
#asazii
0-1
#hellow
##42 ecole
##good
0-2
#comment
#comment
#comment
#comment
#comment
#comment
#comment
#comment
2-3
##kkkk
#kkklkk
#sdedfdds
#cdkskvkfdkndfvnds
#cbdjvbdj
#wofokdkfsdsd
3-4
#cooment
#comment
#comment
##starrtt
4-1
1-2
0-2

BIN
srcs/.lem_in.c.swp Normal file

Binary file not shown.

View File

@@ -6,7 +6,7 @@
/* By: tmaze <tmaze@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/04/18 09:25:05 by tmaze #+# #+# */
/* Updated: 2019/04/21 14:42:08 by tmaze ### ########.fr */
/* Updated: 2019/04/30 07:08:31 by mndhlovu ### ########.fr */
/* */
/* ************************************************************************** */

View File

@@ -6,7 +6,7 @@
/* By: tmaze <tmaze@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/04/18 09:59:11 by tmaze #+# #+# */
/* Updated: 2019/04/26 12:49:36 by mndhlovu ### ########.fr */
/* Updated: 2019/04/30 07:14:04 by mndhlovu ### ########.fr */
/* */
/* ************************************************************************** */
@@ -109,14 +109,11 @@ t_ind **edmonds_karp(t_lmdata *data, int s_ind, int e_ind)
scores[0] = 0;
nb_paths = 0;
i = 0;
ft_printf("data: %p\ndata->nb_nodes: %d\ndata->adj: %p\n\n", data, data->nb_nodes, data->adj);
while (i < data->nb_nodes)
tab[i++].old_visited = 0;
bfs(data, tab, s_ind, e_ind);
ft_printf("tab[e_ind].parent: %d\n", tab[e_ind].parent);
while (tab[e_ind].parent != -1)
{
ft_printf("new path\n");
nb_paths++;
update_weights(data, tab, s_ind, e_ind);
ret[1] = resolve_paths(data, nb_paths, s_ind, e_ind);

View File

@@ -6,12 +6,41 @@
/* By: mndhlovu <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/03/25 06:31:05 by mndhlovu #+# #+# */
/* Updated: 2019/04/29 12:54:07 by tmaze ### ########.fr */
/* Updated: 2019/05/02 14:26:13 by tmaze ### ########.fr */
/* */
/* ************************************************************************** */
#include "lem_in.h"
void lm_test_print(t_lmdata *data)
{
t_node *node;
if (data != NULL)
{
node = data->nodes_data;
while (node)
{
ft_printf("name: %s | x: %d | y: %d | role: %c \n", node->name, node->x, node->y, node->role);
node = node->next;
}
}
}
static int start_end_link(t_lmdata *data, int s_ind, int e_ind)
{
t_ind *it;
it = data->adj[s_ind];
while (it)
{
if (it->index == e_ind)
return (1);
it = it->next;
}
return (0);
}
static int lem_in(t_syntax *synt, t_holder *holder,
t_lmdata *lmdata, t_ind ***ret)
{
@@ -23,15 +52,21 @@ static int lem_in(t_syntax *synt, t_holder *holder,
if ((lm_adj_parser(lmdata, holder) == 0))
return (0);
print_map(lmdata);
lm_clear_unv(holder);
get_nb_paths_max(lmdata, get_node_role(lmdata, 's')->ind
, get_node_role(lmdata, 'e')->ind);
if ((*ret = edmonds_karp(lmdata, get_node_role(lmdata, 's')->ind
, get_node_role(lmdata, 'e')->ind)) == NULL)
return (0);
if (!push_ants(lmdata, *ret, get_nb_paths(*ret)))
return (0);
tablst_inddel(*ret);
lm_clear_unv(holder, lmdata);
if (start_end_link(lmdata, get_node_role(lmdata, 's')->ind
, get_node_role(lmdata, 'e')->ind))
push_ants_end(lmdata, get_node_role(lmdata, 'e')->name);
else
{
get_nb_paths_max(lmdata, get_node_role(lmdata, 's')->ind
, get_node_role(lmdata, 'e')->ind);
if ((*ret = edmonds_karp(lmdata, get_node_role(lmdata, 's')->ind
, get_node_role(lmdata, 'e')->ind)) == NULL)
return (0);
if (!push_ants(lmdata, *ret, get_nb_paths(*ret)))
return (0);
tablst_inddel(*ret);
}
return (1);
}
@@ -55,8 +90,10 @@ int main(int ac, char **av)
if (!(lem_in(&synt, &holder, &ldata, &ret)))
{
lm_clean_data(&ldata);
del_map(&ldata);
return (lm_error_exit());
}
del_map(&ldata);
lm_clean_data(&ldata);
return (0);
}

View File

@@ -6,7 +6,7 @@
/* By: mndhlovu <mndhlovu@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/04/22 08:55:30 by mndhlovu #+# #+# */
/* Updated: 2019/04/29 12:06:41 by mndhlovu ### ########.fr */
/* Updated: 2019/05/02 13:20:38 by mndhlovu ### ########.fr */
/* */
/* ************************************************************************** */
@@ -39,13 +39,13 @@ int lm_check_forbiden_chars(char *line, int flag)
if (flag == 2 && dash == NULL
&& (hash == NULL || (hash != NULL && line[1] != '#')))
return (1);
if (flag == 3 && dash != NULL && hash == NULL)
if (flag == 3 && (dash != NULL && hash == NULL))
return (1);
}
return (0);
}
void lm_clear_unv(t_holder *holder)
void lm_clear_unv(t_holder *holder, t_lmdata *ldata)
{
t_temp *data;
t_temp *flush;
@@ -59,6 +59,7 @@ void lm_clear_unv(t_holder *holder)
flush = NULL;
}
holder->data = NULL;
del_map(ldata);
}
int lm_verify_links(t_holder *data, t_syntax *synt)
@@ -74,10 +75,12 @@ int lm_verify_cmd(t_syntax *synt, t_holder *holder
if (synt->s_cmd && synt->e_cmd
&& !synt->e_error && !synt->s_error
&& !synt->v_error
&& synt->s_vert
&& synt->e_vert
&& synt->nb_state
&& lm_verify_links(holder, synt)
&& (data->nb_nodes > 0))
return (1);
lm_clear_unv(holder);
lm_clear_unv(holder, data);
return (0);
}

View File

@@ -6,7 +6,7 @@
/* By: mndhlovu <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/04/05 06:35:40 by mndhlovu #+# #+# */
/* Updated: 2019/04/29 12:06:18 by mndhlovu ### ########.fr */
/* Updated: 2019/04/30 07:14:50 by mndhlovu ### ########.fr */
/* */
/* ************************************************************************** */

View File

@@ -6,7 +6,7 @@
/* By: mndhlovu <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/03/29 07:17:06 by mndhlovu #+# #+# */
/* Updated: 2019/04/29 12:05:52 by mndhlovu ### ########.fr */
/* Updated: 2019/04/30 07:15:04 by mndhlovu ### ########.fr */
/* */
/* ************************************************************************** */

View File

@@ -6,7 +6,7 @@
/* By: tmaze <tmaze@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/03/23 17:43:34 by tmaze #+# #+# */
/* Updated: 2019/04/29 12:08:36 by mndhlovu ### ########.fr */
/* Updated: 2019/05/02 12:52:26 by mndhlovu ### ########.fr */
/* */
/* ************************************************************************** */
@@ -19,6 +19,56 @@ void lm_initdata(t_lmdata *data)
data->adj = NULL;
}
void lm_check_start_vert(int count, t_syntax *synt, t_lmdata *ldata, char *line)
{
if ((synt->s_pos < synt->e_pos) && lm_check_forbiden_chars(line, 0))
{
if ((count > synt->s_pos && count < synt->e_pos)
&& (!synt->s_vert))
{
if ((lm_add_vertex(ldata, line, 's', synt)))
synt->s_vert = count;
else
synt->s_error = 1;
}
}
if ((synt->s_pos > synt->e_pos) && lm_check_forbiden_chars(line, 0))
{
if (!synt->s_vert)
{
if ((lm_add_vertex(ldata, line, 's', synt)))
synt->s_vert = count;
else
synt->s_error = 1;
}
}
}
void lm_check_end_vert(int count, t_syntax *synt, t_lmdata *ldata, char *line)
{
if((synt->e_pos < synt->s_pos) && lm_check_forbiden_chars(line, 0))
{
if ((count > synt->e_pos && count < synt->s_pos)
&& (!synt->e_vert))
{
if ((lm_add_vertex(ldata, line, 'e', synt)))
synt->e_vert = count;
else
synt->e_error = 1;
}
}
if ((synt->e_pos > synt->s_pos) && lm_check_forbiden_chars(line, 0))
{
if (!synt->e_vert)
{
if ((lm_add_vertex(ldata, line, 'e', synt)))
synt->e_vert = count;
else
synt->e_error = 1;
}
}
}
int lm_init_src_dest(int *src, int *dest, t_lmdata *data
, char *raw)
{

View File

@@ -6,7 +6,7 @@
/* By: mndhlovu <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/03/25 06:31:37 by mndhlovu #+# #+# */
/* Updated: 2019/04/29 12:07:09 by mndhlovu ### ########.fr */
/* Updated: 2019/05/02 13:20:36 by mndhlovu ### ########.fr */
/* */
/* ************************************************************************** */
@@ -78,6 +78,8 @@ int lm_add_vertex(t_lmdata *ldata, char *raw, char flag,
ft_del_words_tables(&tab);
return (1);
}
ft_del_words_tables(&tab);
free(new);
}
return (0);
}
@@ -122,5 +124,6 @@ int lm_ext_conn(t_holder *holder, t_lmdata *data, char *raw)
(holder->count)++;
return (1);
}
free(new);
return (0);
}

View File

@@ -6,7 +6,7 @@
/* By: mndhlovu <mndhlovu@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/04/20 15:24:51 by mndhlovu #+# #+# */
/* Updated: 2019/04/29 13:07:10 by tmaze ### ########.fr */
/* Updated: 2019/05/02 13:11:43 by mndhlovu ### ########.fr */
/* */
/* ************************************************************************** */
@@ -59,14 +59,14 @@ static int lm_get_ant_(int counter, t_lmdata *ldata
return (0);
}
static int lm_get_vertices(int count, t_syntax *synt
, t_lmdata *data, t_holder *holder, char *line)
static int lm_get_vertices(int count, t_lmdata *data
, t_syntax *syntax, t_holder *holder, char *line)
{
lm_get_cmd_vert(count, synt, data, line);
if (!synt->s_error && !synt->e_error)
lm_get_cmd_vertices(count, syntax, data, line);
if (!syntax->s_error && !syntax->e_error)
{
lm_get_vert_link(count, synt, data, holder, line);
if (!synt->v_error && !synt->l_error)
lm_get_vert_link(count, data, syntax, holder, line);
if (!syntax->v_error && !syntax->l_error)
return (1);
}
return (0);
@@ -86,7 +86,7 @@ int lm_parser(t_syntax *synt
if (!(lm_get_ant_(index, ldata, synt, raw)) && index == 0)
return (0);
lm_locate_cd(index, synt, raw);
if (!(lm_get_vertices(index, synt, ldata, holder, raw)))
if (!(lm_get_vertices(index, ldata, synt, holder, raw)))
return (0);
index++;
}

View File

@@ -6,7 +6,7 @@
/* By: mndhlovu <mndhlovu@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/04/29 11:50:04 by mndhlovu #+# #+# */
/* Updated: 2019/04/29 12:10:09 by mndhlovu ### ########.fr */
/* Updated: 2019/04/30 07:19:29 by mndhlovu ### ########.fr */
/* */
/* ************************************************************************** */

View File

@@ -6,7 +6,7 @@
/* By: mndhlovu <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/04/04 09:24:45 by mndhlovu #+# #+# */
/* Updated: 2019/04/29 12:05:40 by mndhlovu ### ########.fr */
/* Updated: 2019/05/02 13:12:06 by mndhlovu ### ########.fr */
/* */
/* ************************************************************************** */
@@ -34,49 +34,33 @@ int lm_get_value(char *line)
return (0);
}
void lm_get_cmd_vert(int count, t_syntax *synt
void lm_get_cmd_vertices(int count, t_syntax *synt
, t_lmdata *ldata, char *line)
{
char *tmp;
if (synt->s_pos == count - 1)
if (count > 0 && line != NULL)
{
tmp = ft_strchr(line, '#');
if (tmp == NULL && count != synt->e_vert)
{
synt->s_vert = count;
if (!(lm_add_vertex(ldata, line, 's', synt)))
synt->s_error = 1;
}
}
if (synt->e_pos == count - 1)
{
tmp = ft_strchr(line, '#');
if (tmp == NULL && count != synt->s_vert)
{
synt->e_vert = count;
if (!(lm_add_vertex(ldata, line, 'e', synt)))
synt->e_error = 1;
}
lm_check_start_vert(count, synt, ldata, line);
lm_check_end_vert(count, synt, ldata, line);
}
}
void lm_get_vert_link(int count, t_syntax *synt
, t_lmdata *ldata, t_holder *holder, char *line)
void lm_get_vert_link(int count, t_lmdata *ldata
, t_syntax *syntax, t_holder *holder, char *line)
{
if (count > 0 && (count != synt->s_vert && count != synt->e_vert)
&& (count != synt->s_pos
&& count != synt->e_pos && line != NULL))
if (count > 0 && (count != syntax->s_vert
&& count != syntax->e_vert)
&& (count != syntax->s_pos
&& count != syntax->e_pos && line != NULL))
{
if (lm_check_forbiden_chars(line, 0))
{
if (!(lm_add_vertex(ldata, line, 'v', synt)))
synt->v_error = 1;
if (!(lm_add_vertex(ldata, line, 'v', syntax)))
syntax->v_error = 1;
}
if (lm_check_forbiden_chars(line, 3))
{
if (!(lm_ext_conn(holder, ldata, line)))
synt->l_error = 1;
syntax->l_error = 1;
}
}
}

View File

@@ -6,7 +6,7 @@
/* By: tmaze <tmaze@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/03/27 14:56:55 by tmaze #+# #+# */
/* Updated: 2019/04/24 09:51:38 by tmaze ### ########.fr */
/* Updated: 2019/04/30 07:19:43 by mndhlovu ### ########.fr */
/* */
/* ************************************************************************** */

View File

@@ -6,7 +6,7 @@
/* By: tmaze <tmaze@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/04/24 17:35:29 by tmaze #+# #+# */
/* Updated: 2019/04/29 13:05:56 by tmaze ### ########.fr */
/* Updated: 2019/05/02 14:34:28 by tmaze ### ########.fr */
/* */
/* ************************************************************************** */
@@ -37,6 +37,7 @@ void print_map(t_lmdata *data)
it = it->next;
}
del_map(data);
ft_printf("\n");
}
int add_line_map(t_lmdata *data, char *line)
@@ -59,4 +60,3 @@ int add_line_map(t_lmdata *data, char *line)
}
return (0);
}

View File

@@ -6,7 +6,7 @@
/* By: tmaze <tmaze@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/04/06 11:37:56 by tmaze #+# #+# */
/* Updated: 2019/04/21 16:14:45 by tmaze ### ########.fr */
/* Updated: 2019/04/30 07:05:43 by mndhlovu ### ########.fr */
/* */
/* ************************************************************************** */

View File

@@ -6,7 +6,7 @@
/* By: tmaze <tmaze@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/04/10 11:23:36 by tmaze #+# #+# */
/* Updated: 2019/04/18 19:04:49 by tmaze ### ########.fr */
/* Updated: 2019/05/02 14:33:30 by tmaze ### ########.fr */
/* */
/* ************************************************************************** */
@@ -69,3 +69,18 @@ t_ind *get_node_path(t_ind *lst, int index)
it = it->next;
return (it);
}
void push_ants_end(t_lmdata *data, char *e_name)
{
int i;
i = 1;
while (i <= data->nbants)
{
ft_printf("L%d-%s", i, e_name);
if (i != data->nbants)
ft_putchar(' ');
i++;
}
ft_printf("\n");
}

View File

@@ -6,7 +6,7 @@
/* By: tmaze <tmaze@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/04/18 18:05:06 by tmaze #+# #+# */
/* Updated: 2019/04/21 16:53:11 by tmaze ### ########.fr */
/* Updated: 2019/04/30 07:05:10 by mndhlovu ### ########.fr */
/* */
/* ************************************************************************** */