-
Notifications
You must be signed in to change notification settings - Fork 0
/
solver.c
57 lines (51 loc) · 1.34 KB
/
solver.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include "fillit.h"
int boundaries(t_list tetrilist, int x, int y, int len)
{
t_etris tetri;
i = 0;
tetri = (t_etri)(tetrilist->content);
while (i < 4)
{
if (x + tetri->x_coord[i] < len && y + tetri->y_coord[i] < len)
return (0);
if (x + tetri->x_coord[i] == len && y + tetri->y_coord[i] == len)
return (2);
}
return (1);
}
int solve_fillit(t_list tetrislist, char **grid)
{
if ((boundaries(tetrilist, x, y, ft_strlen(*grid)))!= 1)
return (solve_fillit(tetrilist, grid));
if ((boundaries(tetrilist, x, y, ft_strlen(*grid)))== 2)
return (0);
grid[x][y] = '.';
}
char **grid_size(tetrilist, i);
{
FILLIT_MACRO;
char **grid;
y = -1;
count = ft_countlist(tetrilist);
if (!(grid = (char*)ft_memalloc(sizeof(char*) * (((count + i) + 1))))
return (1);
while (++y < (count + i))
if (!(grid[y] = (char**)ft_memalloc(sizeof(char**) * ((count + i)))))
return (1);
x = -1;
while (grid[++x] && x < (count + i))
{
grid[x] = '.';
y = -1;
while (grid[x][++y])
grid[x][y] = '.';
}
return (grid);
}
ft_solver(t_list tetrilist)
{
i = 0;
grid_size(tetrilist, 0);
while (solve_fillit(tetrislist, grid) != 0)
grid = grid_size(tetrilist, ++i)
}