diff --git a/fillit/includes/fillit.h b/fillit/includes/fillit.h index 51352106..a9b34089 100644 --- a/fillit/includes/fillit.h +++ b/fillit/includes/fillit.h @@ -27,8 +27,8 @@ void ft_show_board(char **board); void ft_grow_board(char **board); void ft_shrink_board(char **board); -int ft_addto_board(char **board, t_ttmn block, size_t i, size_t j); -void ft_takeoff_board(char **board, char c); +int ft_board_add(char **board, t_ttmn block, size_t i, size_t j); +void ft_board_remove(char **board, char c); int ft_check_pos(char **board, t_ttmn block, int i, int j); int ft_solver(char **board, t_ttmn *ttmn); diff --git a/fillit/src/fillit_legacy.c b/fillit/src/fillit_legacy.c new file mode 100644 index 00000000..9cd7b7e5 --- /dev/null +++ b/fillit/src/fillit_legacy.c @@ -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'; + } +} +*/ diff --git a/fillit/src/fillit_lib.c b/fillit/src/fillit_lib.c index b67962cc..07c0fb25 100644 --- a/fillit/src/fillit_lib.c +++ b/fillit/src/fillit_lib.c @@ -62,35 +62,8 @@ void ft_free_board(char ***board) *board = NULL; } -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'; - } -} - -void ft_takeoff_board(char **board, char c) +void ft_board_remove(char **board, char c) { int i; 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 y; @@ -116,20 +89,26 @@ int ft_addto_board(char **board, t_ttmn block, size_t i, size_t j) size = ft_strlen(*board); k = 0; - if (block.id) - while (k < 4) - { - x = (int)j + block.pos[k][1]; - y = (int)i + block.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] != '.') - return (1); - board[y][x] = block.id; - /* ft_show_board(board); */ - k++; - } + while (k < 4) + { + x = (int)j + block.pos[k][1]; + y = (int)i + block.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] != '.') + return (1); + /* 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); } diff --git a/fillit/src/fillit_solver.c b/fillit/src/fillit_solver.c index 8550705b..ff928f1e 100644 --- a/fillit/src/fillit_solver.c +++ b/fillit/src/fillit_solver.c @@ -35,8 +35,8 @@ int ft_solver(char **board, t_ttmn *ttmn) int i; int j; int size; - char **tmp; + /* ft_show_board(board); */ size = ft_strlen(*board); if (!(*ttmn).id) { @@ -50,22 +50,13 @@ int ft_solver(char **board, t_ttmn *ttmn) j = -1; while (++j < size) { - if (ft_addto_board(board, *ttmn, i, j)) - { - ft_takeoff_board(board, ttmn->id); + if (ft_board_add(board, *ttmn, i, j)) continue ; - } - /* printf("validated for addto\n"); */ - tmp = ft_copy_board(board); - 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)) + if (size == (int)g_target && !ft_validate_waste(board, ttmn + 1)) + ; + else if (ft_solver(board, ttmn + 1)) return (1); - ft_takeoff_board(board, ttmn->id); + ft_board_remove(board, ttmn->id); } } return (0); diff --git a/fillit/src/fillit_waste.c b/fillit/src/fillit_waste.c index 949a8647..e7f22442 100644 --- a/fillit/src/fillit_waste.c +++ b/fillit/src/fillit_waste.c @@ -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 += 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; - /* printf("waste around %i,%i = %zu\n", i, j, n); */ return (n); } @@ -35,10 +34,10 @@ int ft_validate_waste(char **board, t_ttmn *ttmn) int waste; int i; int j; - int l; int blob; size_t size; + board = ft_copy_board(board); max_waste = g_target * g_target - g_ttmn * 4; waste = 0; size = ft_strlen(*board); @@ -50,16 +49,16 @@ int ft_validate_waste(char **board, t_ttmn *ttmn) while (++j < (int)size) { blob = ft_waste_here(&board, i, j); - if (blob / 4 == 1) + if (blob == 4) { waste += 4; - l = -1; + int l = -1; /* ft_show_board(board); */ while (ttmn[++l].id) { /* 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); */ - fflush(stdout); + /* fflush(stdout); */ if (ft_check_pos(board, ttmn[l], i, j) == (int)size) { 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); */ /* fflush(stdout); */ + /* ft_free_board(&board); */ return (0); } } } /* printf("waste = %i (passed: max = %i)\n", waste, max_waste); */ /* fflush(stdout); */ + /* ft_free_board(&board); */ return(1); }