stable, going to branch out new architecture

This commit is contained in:
Jack Halford 2016-09-01 01:29:20 +02:00
parent a349813cd3
commit 359b453734
5 changed files with 66 additions and 66 deletions

View file

@ -27,8 +27,8 @@ void ft_show_board(char **board);
void ft_grow_board(char **board); void ft_grow_board(char **board);
void ft_shrink_board(char **board); void ft_shrink_board(char **board);
int ft_addto_board(char **board, t_ttmn block, size_t i, size_t j); int ft_board_add(char **board, t_ttmn block, size_t i, size_t j);
void ft_takeoff_board(char **board, char c); void ft_board_remove(char **board, char c);
int ft_check_pos(char **board, t_ttmn block, int i, int j); int ft_check_pos(char **board, t_ttmn block, int i, int j);
int ft_solver(char **board, t_ttmn *ttmn); int ft_solver(char **board, t_ttmn *ttmn);

View file

@ -0,0 +1,29 @@
/*
void ft_grow_board(char **board)
{
int i;
int size;
size = ft_strlen(*board);
i = 0;
while (++i <= size)
{
board[i][size] = '.';
board[size][i] = '.';
}
}
void ft_shrink_board(char **board)
{
int i;
int size;
size = ft_strlen(*board);
i = -1;
while (++i < size)
{
board[i][size - 1] = '\0';
board[size - 1][i] = '\0';
}
}
*/

View file

@ -62,35 +62,8 @@ void ft_free_board(char ***board)
*board = NULL; *board = NULL;
} }
void ft_grow_board(char **board)
{
int i;
int size;
size = ft_strlen(*board); void ft_board_remove(char **board, char c)
i = 0;
while (++i <= size)
{
board[i][size] = '.';
board[size][i] = '.';
}
}
void ft_shrink_board(char **board)
{
int i;
int size;
size = ft_strlen(*board);
i = -1;
while (++i < size)
{
board[i][size - 1] = '\0';
board[size - 1][i] = '\0';
}
}
void ft_takeoff_board(char **board, char c)
{ {
int i; int i;
int j; int j;
@ -107,7 +80,7 @@ void ft_takeoff_board(char **board, char c)
} }
} }
int ft_addto_board(char **board, t_ttmn block, size_t i, size_t j) int ft_board_add(char **board, t_ttmn block, size_t i, size_t j)
{ {
int x; int x;
int y; int y;
@ -116,20 +89,26 @@ int ft_addto_board(char **board, t_ttmn block, size_t i, size_t j)
size = ft_strlen(*board); size = ft_strlen(*board);
k = 0; k = 0;
if (block.id) while (k < 4)
while (k < 4) {
{ x = (int)j + block.pos[k][1];
x = (int)j + block.pos[k][1]; y = (int)i + block.pos[k][0];
y = (int)i + block.pos[k][0]; /* printf("adding %c to %i,%i\n", block.id, y, x); */
/* printf("adding %c to %i,%i\n", block.id, y, x); */ /* fflush(stdout); */
/* fflush(stdout); */ if (x > size - 1 || y > size - 1 || x < 0 || y < 0)
if (x > size - 1 || y > size - 1 || x < 0 || y < 0) return (1);
return (1); if (board[y][x] != '.')
if (board[y][x] != '.') return (1);
return (1); /* ft_show_board(board); */
board[y][x] = block.id; k++;
/* ft_show_board(board); */ }
k++; k = 0;
} while (k < 4)
{
x = (int)j + block.pos[k][1];
y = (int)i + block.pos[k][0];
board[y][x] = block.id;
k++;
}
return (0); return (0);
} }

View file

@ -35,8 +35,8 @@ int ft_solver(char **board, t_ttmn *ttmn)
int i; int i;
int j; int j;
int size; int size;
char **tmp;
/* ft_show_board(board); */
size = ft_strlen(*board); size = ft_strlen(*board);
if (!(*ttmn).id) if (!(*ttmn).id)
{ {
@ -50,22 +50,13 @@ int ft_solver(char **board, t_ttmn *ttmn)
j = -1; j = -1;
while (++j < size) while (++j < size)
{ {
if (ft_addto_board(board, *ttmn, i, j)) if (ft_board_add(board, *ttmn, i, j))
{
ft_takeoff_board(board, ttmn->id);
continue ; continue ;
} if (size == (int)g_target && !ft_validate_waste(board, ttmn + 1))
/* printf("validated for addto\n"); */ ;
tmp = ft_copy_board(board); else if (ft_solver(board, ttmn + 1))
if (size == (int)g_target && !ft_validate_waste(tmp, ttmn + 1))
{
ft_takeoff_board(board, ttmn->id);
continue ;
}
/* printf("validated for waste\n"); */
if (ft_solver(board, ttmn + 1))
return (1); return (1);
ft_takeoff_board(board, ttmn->id); ft_board_remove(board, ttmn->id);
} }
} }
return (0); return (0);

View file

@ -25,7 +25,6 @@ int ft_waste_around(char ***board_ptr, int i, int j)
n += j > 0 ? ft_waste_here(board_ptr, i, j - 1) : 0; n += j > 0 ? ft_waste_here(board_ptr, i, j - 1) : 0;
n += i < (int)size - 1 ? ft_waste_here(board_ptr, i + 1, j) : 0; n += i < (int)size - 1 ? ft_waste_here(board_ptr, i + 1, j) : 0;
n += j < (int)size - 1 ? ft_waste_here(board_ptr, i, j + 1) : 0; n += j < (int)size - 1 ? ft_waste_here(board_ptr, i, j + 1) : 0;
/* printf("waste around %i,%i = %zu\n", i, j, n); */
return (n); return (n);
} }
@ -35,10 +34,10 @@ int ft_validate_waste(char **board, t_ttmn *ttmn)
int waste; int waste;
int i; int i;
int j; int j;
int l;
int blob; int blob;
size_t size; size_t size;
board = ft_copy_board(board);
max_waste = g_target * g_target - g_ttmn * 4; max_waste = g_target * g_target - g_ttmn * 4;
waste = 0; waste = 0;
size = ft_strlen(*board); size = ft_strlen(*board);
@ -50,16 +49,16 @@ int ft_validate_waste(char **board, t_ttmn *ttmn)
while (++j < (int)size) while (++j < (int)size)
{ {
blob = ft_waste_here(&board, i, j); blob = ft_waste_here(&board, i, j);
if (blob / 4 == 1) if (blob == 4)
{ {
waste += 4; waste += 4;
l = -1; int l = -1;
/* ft_show_board(board); */ /* ft_show_board(board); */
while (ttmn[++l].id) while (ttmn[++l].id)
{ {
/* ft_show_ttmn(ttmn[l]); */ /* ft_show_ttmn(ttmn[l]); */
/* printf("checking at %i,%i = %i vs %i\n", i, j, ft_check_pos(board, ttmn[l], i, j), (int)size); */ /* printf("checking at %i,%i = %i vs %i\n", i, j, ft_check_pos(board, ttmn[l], i, j), (int)size); */
fflush(stdout); /* fflush(stdout); */
if (ft_check_pos(board, ttmn[l], i, j) == (int)size) if (ft_check_pos(board, ttmn[l], i, j) == (int)size)
{ {
waste -= 4; waste -= 4;
@ -72,11 +71,13 @@ int ft_validate_waste(char **board, t_ttmn *ttmn)
{ {
/* printf("waste = %i (failed: max = %i)\n", waste, max_waste); */ /* printf("waste = %i (failed: max = %i)\n", waste, max_waste); */
/* fflush(stdout); */ /* fflush(stdout); */
/* ft_free_board(&board); */
return (0); return (0);
} }
} }
} }
/* printf("waste = %i (passed: max = %i)\n", waste, max_waste); */ /* printf("waste = %i (passed: max = %i)\n", waste, max_waste); */
/* fflush(stdout); */ /* fflush(stdout); */
/* ft_free_board(&board); */
return(1); return(1);
} }