much progress on getting the parsing to norm
This commit is contained in:
parent
c9a7badaeb
commit
a7bb8aa364
11 changed files with 209 additions and 191 deletions
17
fillit/.tags
17
fillit/.tags
|
|
@ -1,20 +1,23 @@
|
||||||
Mmain src/main.c /^int main(int ac, char **av)$/
|
Mmain src/main.c /^int main(int ac, char **av)$/
|
||||||
ft_board_add src/lib_board.c /^int ft_board_add(char **board, t_ttmn ttmn, int i/
|
ft_board_add src/lib_board2.c /^int ft_board_add(char **board, t_ttmn ttmn, int i/
|
||||||
ft_board_copy src/lib_board.c /^char **ft_board_copy(char **board)$/
|
ft_board_copy src/lib_board.c /^char **ft_board_copy(char **board)$/
|
||||||
ft_board_fill src/lib_board.c /^void ft_board_fill(char **dst, char **src)$/
|
ft_board_fill src/lib_board.c /^void ft_board_fill(char **dst, char **src)$/
|
||||||
ft_board_free src/lib_board.c /^void ft_board_free(char ***board)$/
|
ft_board_free src/lib_board2.c /^void ft_board_free(char ***board)$/
|
||||||
ft_board_init src/lib_board.c /^char **ft_board_init(size_t size)$/
|
ft_board_init src/lib_board.c /^char **ft_board_init(size_t size)$/
|
||||||
ft_board_print src/lib_board.c /^void ft_board_print(char **board)$/
|
ft_board_print src/lib_board.c /^void ft_board_print(char **board)$/
|
||||||
ft_board_remove src/lib_board.c /^void ft_board_remove(char **board, char c)$/
|
ft_board_remove src/lib_board2.c /^void ft_board_remove(char **board, char c)$/
|
||||||
ft_board_replace src/lib_board.c /^void ft_board_replace(char **board, char a, char b/
|
ft_board_replace src/lib_board2.c /^void ft_board_replace(char **board, char a, char b/
|
||||||
ft_check_waste src/fillit_check_waste.c /^int ft_check_waste(char **board, t_list *lttmn, i/
|
ft_check_waste src/fillit_check_waste.c /^int ft_check_waste(char **board, t_list *lttmn, i/
|
||||||
ft_fit_blob src/fillit_fit_blob.c /^int ft_fit_blob(char **board, t_list *lttmn, int /
|
ft_fit_blob src/fillit_fit_blob.c /^int ft_fit_blob(char **board, t_list *lttmn, int /
|
||||||
ft_floodfill_recursive src/floodfill.c /^int ft_floodfill_recursive(char **board, int size/
|
ft_floodfill_recursive src/floodfill.c /^int ft_floodfill_recursive(char **board, int size/
|
||||||
ft_floodfill_stack src/floodfill.c /^int ft_floodfill_stack(char **board, int size, in/
|
ft_floodfill_stack src/floodfill.c /^int ft_floodfill_stack(char **board, int size, in/
|
||||||
ft_parse_ttmn src/fillit_parser.c /^t_list *ft_parse_ttmn(char *filename)$/
|
ft_parse src/fillit_parser.c /^t_list *ft_parse(char *filename)$/
|
||||||
ft_show_ttmn src/lib_ttmn.c /^void ft_show_ttmn(t_ttmn ttmn)$/
|
ft_parse_addttmn src/fillit_parser.c /^int ft_parse_addttmn(int *j, int *k, t_ttmn ttmn,/
|
||||||
|
ft_parse_line src/fillit_parser.c /^int ft_parse_line(char *line, int linenumber, t_l/
|
||||||
|
ft_parse_sharp src/fillit_parser.c /^int ft_parse_sharp(int *j, int *k, t_ttmn *ttmn)$/
|
||||||
ft_solved src/fillit_solver.c /^int ft_solved(char **board)$/
|
ft_solved src/fillit_solver.c /^int ft_solved(char **board)$/
|
||||||
ft_solver src/fillit_solver.c /^int ft_solver(char **board, t_list *lttmn, int sp/
|
ft_solver src/fillit_solver.c /^int ft_solver(char **board, t_list *lttmn, int sp/
|
||||||
|
ft_ttmn_print src/lib_ttmn.c /^void ft_ttmn_print(t_ttmn ttmn)$/
|
||||||
ft_ttmn_reset src/lib_ttmn.c /^void ft_ttmn_reset(t_list *ttmn)$/
|
ft_ttmn_reset src/lib_ttmn.c /^void ft_ttmn_reset(t_list *ttmn)$/
|
||||||
|
ft_ttmn_validate src/lib_ttmn.c /^int ft_ttmn_validate(t_ttmn ttmn)$/
|
||||||
ft_usage src/main.c /^void ft_usage(void)$/
|
ft_usage src/main.c /^void ft_usage(void)$/
|
||||||
ft_validate_ttmn src/fillit_parser.c /^int ft_validate_ttmn(t_ttmn ttmn)$/
|
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,8 @@ D_OBJ = obj
|
||||||
F_OBJ = $(F_SRC:.c=.o)
|
F_OBJ = $(F_SRC:.c=.o)
|
||||||
DF_OBJ := $(addprefix $(D_OBJ)/, $(F_OBJ))
|
DF_OBJ := $(addprefix $(D_OBJ)/, $(F_OBJ))
|
||||||
|
|
||||||
D_INC = includes
|
D_INC = includes libft/includes
|
||||||
|
O_INC = $(addprefix -I, $(D_INC))
|
||||||
|
|
||||||
W_FLAGS = -Wall -Wextra -Werror
|
W_FLAGS = -Wall -Wextra -Werror
|
||||||
D_FLAGS =
|
D_FLAGS =
|
||||||
|
|
@ -22,8 +23,8 @@ RM = /bin/rm -rf
|
||||||
|
|
||||||
all: libft/libft.a $(NAME) $(TAGFILE)
|
all: libft/libft.a $(NAME) $(TAGFILE)
|
||||||
|
|
||||||
test:
|
test: all
|
||||||
gcc -Iincludes main.c libftprintf.a
|
cd fillit-tests && ./test 2
|
||||||
|
|
||||||
$(TAGFILE): $(D_SRC)/*.c
|
$(TAGFILE): $(D_SRC)/*.c
|
||||||
@ctags -f $(TAGFILE) $(addprefix $(D_SRC)/, $(F_SRC))
|
@ctags -f $(TAGFILE) $(addprefix $(D_SRC)/, $(F_SRC))
|
||||||
|
|
@ -31,14 +32,14 @@ $(TAGFILE): $(D_SRC)/*.c
|
||||||
|
|
||||||
$(D_OBJ)/%.o: $(D_SRC)/%.c $(D_INC)
|
$(D_OBJ)/%.o: $(D_SRC)/%.c $(D_INC)
|
||||||
@$(MKDIR) $(D_OBJ)
|
@$(MKDIR) $(D_OBJ)
|
||||||
@$(CC) -I$(D_INC) $(W_FLAGS) -c $< -o $@ $(D_FLAGS)
|
@$(CC) $(O_INC) $(W_FLAGS) -c $< -o $@ $(D_FLAGS)
|
||||||
@echo "Compiling "$<"..."
|
@echo "Compiling "$<"..."
|
||||||
|
|
||||||
libft/libft.a:
|
libft/libft.a:
|
||||||
@$(MAKE) -C libft/ 2>/dev/null
|
@$(MAKE) -C libft/ 2>/dev/null
|
||||||
|
|
||||||
$(NAME): $(DF_OBJ)
|
$(NAME): $(DF_OBJ)
|
||||||
$(CC) -I$(D_INC) -Llibft -lft $(W_FLAGS) $(DF_OBJ) -o $@ $(D_FLAGS)
|
$(CC) $(O_INC) -Llibft -lft $(W_FLAGS) $(DF_OBJ) -o $@ $(D_FLAGS)
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
$(RM) $(D_OBJ)
|
$(RM) $(D_OBJ)
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,10 @@ typedef struct s_ttmn
|
||||||
int pos[4][2];
|
int pos[4][2];
|
||||||
} t_ttmn;
|
} t_ttmn;
|
||||||
|
|
||||||
t_list *ft_parse_ttmn(char *filename);
|
t_list *ft_parse(char *filename);
|
||||||
|
int ft_parse_line(char *line, int linenumber, t_list **list);
|
||||||
|
int ft_parse_sharp(int *j, int *k, t_ttmn *ttmn);
|
||||||
|
int ft_parse_addttmn(int *j, int *k, t_ttmn ttmn, t_list **list);
|
||||||
|
|
||||||
int ft_solver(char **board, t_list *lttmn, int space, int size);
|
int ft_solver(char **board, t_list *lttmn, int space, int size);
|
||||||
int ft_solved(char **board);
|
int ft_solved(char **board);
|
||||||
|
|
@ -41,6 +44,7 @@ void ft_board_replace(char **board, char a, char b);
|
||||||
void ft_board_remove(char **board, char c);
|
void ft_board_remove(char **board, char c);
|
||||||
int ft_board_add(char **board, t_ttmn ttmn, int i, int size);
|
int ft_board_add(char **board, t_ttmn ttmn, int i, int size);
|
||||||
|
|
||||||
void ft_show_ttmn(t_ttmn ttmn);
|
int ft_ttmn_validate(t_ttmn ttmn);
|
||||||
|
void ft_ttmn_print(t_ttmn ttmn);
|
||||||
void ft_ttmn_reset(t_list *ttmn);
|
void ft_ttmn_reset(t_list *ttmn);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit e9098a7097a1f3e848fda45403093cb38b540306
|
Subproject commit 70af533db4c5a53646e2ea2e371d611cc9959f48
|
||||||
|
|
@ -19,11 +19,7 @@ int ft_check_waste(char **board, t_list *lttmn, int space, int size)
|
||||||
continue ;
|
continue ;
|
||||||
ft_board_replace(board, '*', '^');
|
ft_board_replace(board, '*', '^');
|
||||||
blob_size = ft_floodfill_recursive(board, size, i, '*');
|
blob_size = ft_floodfill_recursive(board, size, i, '*');
|
||||||
/* ft_board_print(board); */
|
|
||||||
/* printf("blob size = %i\n", blob_size); */
|
|
||||||
/* fflush(stdout); */
|
|
||||||
space -= blob_size % 4;
|
space -= blob_size % 4;
|
||||||
|
|
||||||
if (space < 0)
|
if (space < 0)
|
||||||
{
|
{
|
||||||
ft_board_remove(board, '^');
|
ft_board_remove(board, '^');
|
||||||
|
|
|
||||||
|
|
@ -1,114 +1,100 @@
|
||||||
#include "fillit.h"
|
#include "fillit.h"
|
||||||
|
|
||||||
int g_target = 0;
|
int g_target = 0;
|
||||||
int g_ttmn = 0;
|
int g_ttmn = 0;
|
||||||
|
|
||||||
int ft_validate_ttmn(t_ttmn ttmn)
|
int ft_parse_line(char *line, int linenumber, t_list **list)
|
||||||
{
|
{
|
||||||
size_t i;
|
static t_ttmn ttmn;
|
||||||
size_t j;
|
static int j = 0;
|
||||||
int touch;
|
static int k = 0;
|
||||||
|
int i;
|
||||||
|
|
||||||
if (!(ttmn.id >= 'A' && ttmn.id <= 'Z'))
|
if ((linenumber + 1) % 5 == 0)
|
||||||
return(0);
|
|
||||||
|
|
||||||
i = -1;
|
|
||||||
touch = 0;
|
|
||||||
while (++i < 4)
|
|
||||||
{
|
{
|
||||||
j = -1;
|
if (ft_strlen(line) != 0)
|
||||||
while (++j < 4)
|
return (1);
|
||||||
{
|
if (ft_parse_addttmn(&j, &k, ttmn, list))
|
||||||
if (i != j
|
|
||||||
&& ((FT_DIST(ttmn.pos[i][0], ttmn.pos[j][0]) == 0
|
|
||||||
&& FT_DIST(ttmn.pos[i][1], ttmn.pos[j][1]) == 1)
|
|
||||||
|| (FT_DIST(ttmn.pos[i][0], ttmn.pos[j][0]) == 1
|
|
||||||
&& FT_DIST(ttmn.pos[i][1], ttmn.pos[j][1]) == 0)))
|
|
||||||
touch++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (touch == 6 || touch == 8)
|
|
||||||
return (1);
|
return (1);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
if (ft_strlen(line) != 4)
|
||||||
t_list *ft_parse_ttmn(char *filename)
|
return (1);
|
||||||
|
i = -1;
|
||||||
|
while (line[++i])
|
||||||
{
|
{
|
||||||
int fd;
|
/* ft_printf("%i,%i,%i: %c\n", i, j, k, line[i]); */
|
||||||
char buf[BUF_SIZE + 1];
|
if (!ft_strchr(".#", line[i]))
|
||||||
int ret;
|
return (1);
|
||||||
size_t i;
|
else if (line[i] == '#' && ft_parse_sharp(&j, &k, &ttmn))
|
||||||
size_t j;
|
return (1);
|
||||||
size_t k;
|
|
||||||
int ref[2];
|
|
||||||
t_ttmn ttmn;
|
|
||||||
t_list *list;
|
|
||||||
t_list *tmp;
|
|
||||||
|
|
||||||
list = NULL;
|
|
||||||
fd = open(filename, O_RDONLY);
|
|
||||||
if (fd == -1)
|
|
||||||
return (0);
|
|
||||||
k = 0;
|
|
||||||
j = 0;
|
|
||||||
while ((ret = read(fd, buf, BUF_SIZE)))
|
|
||||||
{
|
|
||||||
buf[ret] = '\0';
|
|
||||||
i = 0;
|
|
||||||
while (buf[i])
|
|
||||||
{
|
|
||||||
if (buf[i] == '.')
|
|
||||||
;
|
|
||||||
else if (buf[i] == '#')
|
|
||||||
{
|
|
||||||
if (k == 0)
|
|
||||||
{
|
|
||||||
ref[0] = j / 5;
|
|
||||||
ref[1] = j % 5;
|
|
||||||
ttmn.pos[0][0] = 0;
|
|
||||||
ttmn.pos[0][1] = 0;
|
|
||||||
ttmn.id = 'A' + ft_lstsize(list);
|
|
||||||
}
|
|
||||||
else if (k <= 3)
|
|
||||||
{
|
|
||||||
ttmn.pos[k][0] = j / 5 - ref[0];
|
|
||||||
ttmn.pos[k][1] = j % 5 - ref[1];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return (0);
|
|
||||||
k++;
|
|
||||||
}
|
|
||||||
else if (buf[i] == '\n')
|
|
||||||
{
|
|
||||||
if (i > 0 && buf[i - 1] == '\n')
|
|
||||||
{
|
|
||||||
if (j != 20)
|
|
||||||
return (0);
|
|
||||||
if (!ft_validate_ttmn(ttmn))
|
|
||||||
return (0);
|
|
||||||
tmp = ft_lstnew(&ttmn , sizeof(t_ttmn));
|
|
||||||
ft_lsteadd(&list, tmp);
|
|
||||||
j = -1;
|
|
||||||
k = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ((j + 1) % 5 != 0)
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return (0);
|
|
||||||
i++;
|
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
|
return (0);
|
||||||
}
|
}
|
||||||
if (j != 20)
|
|
||||||
|
int ft_parse_sharp(int *j, int *k, t_ttmn *ttmn)
|
||||||
|
{
|
||||||
|
static int ref[2];
|
||||||
|
|
||||||
|
if (*k == 0)
|
||||||
|
{
|
||||||
|
ref[0] = *j / 4;
|
||||||
|
ref[1] = *j % 4;
|
||||||
|
/* ft_printf("refs: %i,%i\n", ref[0], ref[1]); */
|
||||||
|
ttmn->pos[0][0] = 0;
|
||||||
|
ttmn->pos[0][1] = 0;
|
||||||
|
}
|
||||||
|
else if (*k <= 3)
|
||||||
|
{
|
||||||
|
ttmn->pos[*k][0] = (*j) / 4 - ref[0];
|
||||||
|
ttmn->pos[*k][1] = (*j) % 4 - ref[1];
|
||||||
|
/* ft_printf("pos: %i,%i\n", ttmn->pos[*k][0], ttmn->pos[*k][1]); */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
*k += 1;
|
||||||
return (0);
|
return (0);
|
||||||
if (!ft_validate_ttmn(ttmn))
|
}
|
||||||
|
|
||||||
|
int ft_parse_addttmn(int *j, int *k, t_ttmn ttmn, t_list **list)
|
||||||
|
{
|
||||||
|
static char id = 'A';
|
||||||
|
t_list *tmp;
|
||||||
|
|
||||||
|
ttmn.id = id++;
|
||||||
|
/* ft_printf("%i,%i\n", *j, *k); */
|
||||||
|
if (*j != 16 || *k != 4)
|
||||||
|
return (1);
|
||||||
|
if (ft_ttmn_validate(ttmn))
|
||||||
|
return (1);
|
||||||
|
tmp = ft_lstnew(&ttmn , sizeof(t_ttmn));
|
||||||
|
ft_lsteadd(list, tmp);
|
||||||
|
*j = 0;
|
||||||
|
*k = 0;
|
||||||
return (0);
|
return (0);
|
||||||
ft_lsteadd(&list, ft_lstnew(&ttmn , sizeof(t_ttmn)));
|
}
|
||||||
g_target = 2;
|
|
||||||
|
t_list *ft_parse(char *filename)
|
||||||
|
{
|
||||||
|
int fd;
|
||||||
|
int ret;
|
||||||
|
char *line;
|
||||||
|
int linenumber;
|
||||||
|
t_list *list;
|
||||||
|
|
||||||
|
list = NULL;
|
||||||
|
if ((fd = open(filename, O_RDONLY)) == -1)
|
||||||
|
return (0);
|
||||||
|
linenumber = 0;
|
||||||
|
while ((ret = get_next_line(fd, &line)))
|
||||||
|
{
|
||||||
|
/* ft_printf("parsing line:%s\n", line); */
|
||||||
|
if (ft_parse_line(line, linenumber++, &list))
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
if (ft_parse_line("", linenumber, &list))
|
||||||
|
return (0);
|
||||||
|
g_target = 4;
|
||||||
g_ttmn = ft_lstsize(list);
|
g_ttmn = ft_lstsize(list);
|
||||||
while ((g_ttmn * 4) > (g_target) * (g_target))
|
while ((g_ttmn * 4) > (g_target) * (g_target))
|
||||||
g_target++;
|
g_target++;
|
||||||
|
|
|
||||||
|
|
@ -21,14 +21,12 @@ int ft_solver(char **board, t_list *lttmn, int space, int size)
|
||||||
ttmn = (t_ttmn *)lttmn->content;
|
ttmn = (t_ttmn *)lttmn->content;
|
||||||
if (ttmn->placed)
|
if (ttmn->placed)
|
||||||
return (ft_solver(board, lttmn->next, space, size));
|
return (ft_solver(board, lttmn->next, space, size));
|
||||||
|
/* ft_board_print(board); */
|
||||||
/* ft_board_show(board); */
|
|
||||||
i = -1;
|
i = -1;
|
||||||
while (++i < size * size)
|
while (++i < size * size)
|
||||||
{
|
{
|
||||||
if (ft_board_add(board, *ttmn, i, size))
|
if (ft_board_add(board, *ttmn, i, size))
|
||||||
continue ;
|
continue ;
|
||||||
|
|
||||||
/* if (ft_solver(board, lttmn->next, space, size)) */
|
/* if (ft_solver(board, lttmn->next, space, size)) */
|
||||||
/* return (1); */
|
/* return (1); */
|
||||||
if (ft_check_waste(board, lttmn->next, space, size))
|
if (ft_check_waste(board, lttmn->next, space, size))
|
||||||
|
|
|
||||||
|
|
@ -56,81 +56,3 @@ void ft_board_fill(char **dst, char **src)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ft_board_free(char ***board)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
while ((*board)[i])
|
|
||||||
{
|
|
||||||
free((*board)[i]);
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
free(*board);
|
|
||||||
*board = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ft_board_replace(char **board, char a, char b)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
int j;
|
|
||||||
|
|
||||||
i = -1;
|
|
||||||
while (board[++i])
|
|
||||||
{
|
|
||||||
j = -1;
|
|
||||||
while (board[i][++j])
|
|
||||||
{
|
|
||||||
if (board[i][j] == a)
|
|
||||||
board[i][j] = b;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ft_board_remove(char **board, char c)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
int j;
|
|
||||||
|
|
||||||
i = -1;
|
|
||||||
while (board[++i])
|
|
||||||
{
|
|
||||||
j = -1;
|
|
||||||
while (board[i][++j])
|
|
||||||
{
|
|
||||||
if (board[i][j] == c)
|
|
||||||
board[i][j] = '.';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int ft_board_add(char **board, t_ttmn ttmn, int i, int size)
|
|
||||||
{
|
|
||||||
int x;
|
|
||||||
int y;
|
|
||||||
int k;
|
|
||||||
|
|
||||||
k = 0;
|
|
||||||
while (k < 4)
|
|
||||||
{
|
|
||||||
x = i % size + ttmn.pos[k][1];
|
|
||||||
y = i / size + ttmn.pos[k][0];
|
|
||||||
/* printf("adding %c to %i,%i\n", block.id, y, x); */
|
|
||||||
/* fflush(stdout); */
|
|
||||||
if (x > size - 1 || y > size - 1 || x < 0 || y < 0)
|
|
||||||
return (1);
|
|
||||||
if (board[y][x] != '.' && board[y][x] != '*')
|
|
||||||
return (1);
|
|
||||||
k++;
|
|
||||||
}
|
|
||||||
k = 0;
|
|
||||||
while (k < 4)
|
|
||||||
{
|
|
||||||
x = i % size + ttmn.pos[k][1];
|
|
||||||
y = i / size + ttmn.pos[k][0];
|
|
||||||
board[y][x] = ttmn.id;
|
|
||||||
/* ft_show_board(board); */
|
|
||||||
k++;
|
|
||||||
}
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
|
|
|
||||||
80
fillit/src/lib_board2.c
Normal file
80
fillit/src/lib_board2.c
Normal file
|
|
@ -0,0 +1,80 @@
|
||||||
|
#include "fillit.h"
|
||||||
|
|
||||||
|
int ft_board_add(char **board, t_ttmn ttmn, int i, int size)
|
||||||
|
{
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
int k;
|
||||||
|
|
||||||
|
k = 0;
|
||||||
|
while (k < 4)
|
||||||
|
{
|
||||||
|
x = i % size + ttmn.pos[k][1];
|
||||||
|
y = i / size + ttmn.pos[k][0];
|
||||||
|
/* printf("adding %c to %i,%i\n", block.id, y, x); */
|
||||||
|
/* fflush(stdout); */
|
||||||
|
if (x > size - 1 || y > size - 1 || x < 0 || y < 0)
|
||||||
|
return (1);
|
||||||
|
if (board[y][x] != '.' && board[y][x] != '*')
|
||||||
|
return (1);
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
k = 0;
|
||||||
|
while (k < 4)
|
||||||
|
{
|
||||||
|
x = i % size + ttmn.pos[k][1];
|
||||||
|
y = i / size + ttmn.pos[k][0];
|
||||||
|
board[y][x] = ttmn.id;
|
||||||
|
/* ft_show_board(board); */
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ft_board_free(char ***board)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while ((*board)[i])
|
||||||
|
{
|
||||||
|
free((*board)[i]);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
free(*board);
|
||||||
|
*board = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ft_board_replace(char **board, char a, char b)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int j;
|
||||||
|
|
||||||
|
i = -1;
|
||||||
|
while (board[++i])
|
||||||
|
{
|
||||||
|
j = -1;
|
||||||
|
while (board[i][++j])
|
||||||
|
{
|
||||||
|
if (board[i][j] == a)
|
||||||
|
board[i][j] = b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ft_board_remove(char **board, char c)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int j;
|
||||||
|
|
||||||
|
i = -1;
|
||||||
|
while (board[++i])
|
||||||
|
{
|
||||||
|
j = -1;
|
||||||
|
while (board[i][++j])
|
||||||
|
{
|
||||||
|
if (board[i][j] == c)
|
||||||
|
board[i][j] = '.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,34 @@
|
||||||
#include "fillit.h"
|
#include "fillit.h"
|
||||||
|
|
||||||
void ft_show_ttmn(t_ttmn ttmn)
|
int ft_ttmn_validate(t_ttmn ttmn)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
size_t j;
|
||||||
|
int touch;
|
||||||
|
|
||||||
|
if (!(ttmn.id >= 'A' && ttmn.id <= 'Z'))
|
||||||
|
return(1);
|
||||||
|
i = -1;
|
||||||
|
touch = 0;
|
||||||
|
while (++i < 4)
|
||||||
|
{
|
||||||
|
j = -1;
|
||||||
|
while (++j < 4)
|
||||||
|
{
|
||||||
|
if (i != j
|
||||||
|
&& ((FT_DIST(ttmn.pos[i][0], ttmn.pos[j][0]) == 0
|
||||||
|
&& FT_DIST(ttmn.pos[i][1], ttmn.pos[j][1]) == 1)
|
||||||
|
|| (FT_DIST(ttmn.pos[i][0], ttmn.pos[j][0]) == 1
|
||||||
|
&& FT_DIST(ttmn.pos[i][1], ttmn.pos[j][1]) == 0)))
|
||||||
|
touch++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (touch == 6 || touch == 8)
|
||||||
|
return (0);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ft_ttmn_print(t_ttmn ttmn)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ int main(int ac, char **av)
|
||||||
char **board;
|
char **board;
|
||||||
int size;
|
int size;
|
||||||
|
|
||||||
if (ac != 2 || !(lttmn = ft_parse_ttmn(av[1])))
|
if (ac != 2 || !(lttmn = ft_parse(av[1])))
|
||||||
{
|
{
|
||||||
ft_usage();
|
ft_usage();
|
||||||
return (1);
|
return (1);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue