commit to checkout master
This commit is contained in:
parent
4b5e6d49f1
commit
165a8433da
3 changed files with 94 additions and 77 deletions
|
|
@ -1,16 +1,16 @@
|
||||||
#include "fillit.h"
|
#include "fillit.h"
|
||||||
|
|
||||||
int ft_fit_blob(char **board, t_list **amap, t_list *lblob, t_list *lttmn, int space)
|
int ft_fit_blob(char **board, t_list **amap, t_list *blob, t_list *lttmn, int space)
|
||||||
{
|
{
|
||||||
t_list *list;
|
t_list *list;
|
||||||
t_list *new_map;
|
t_list *new_map;
|
||||||
t_list *blob;
|
|
||||||
t_ttmn *ttmn;
|
t_ttmn *ttmn;
|
||||||
int size;
|
int size;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
size = ft_strlen(*board);
|
size = ft_strlen(*board);
|
||||||
blob = *(t_list **)lblob->content;
|
/* blob = *(t_list **)lblob->content; */
|
||||||
|
|
||||||
/* ft_putendl("fitting blob :"); */
|
/* ft_putendl("fitting blob :"); */
|
||||||
/* ft_show_board(board); */
|
/* ft_show_board(board); */
|
||||||
/* ft_lst_print2(lblob, &ft_putnbr); */
|
/* ft_lst_print2(lblob, &ft_putnbr); */
|
||||||
|
|
@ -38,7 +38,7 @@ int ft_fit_blob(char **board, t_list **amap, t_list *lblob, t_list *lttmn, int
|
||||||
new_map = ft_lstmap(*amap, &ft_id);
|
new_map = ft_lstmap(*amap, &ft_id);
|
||||||
/* printf("just fitted ttmn %c\n", ttmn->id); */
|
/* printf("just fitted ttmn %c\n", ttmn->id); */
|
||||||
/* ft_show_ttmn(*ttmn); */
|
/* ft_show_ttmn(*ttmn); */
|
||||||
if (ft_check_blobs(board, &new_map, lblob->next, lttmn, space))
|
if (ft_solver(board, &new_map, lttmn, space))
|
||||||
return (1);
|
return (1);
|
||||||
ttmn->placed = 0;
|
ttmn->placed = 0;
|
||||||
ft_board_remove(board, ttmn->id);
|
ft_board_remove(board, ttmn->id);
|
||||||
|
|
@ -52,35 +52,52 @@ int ft_fit_blob(char **board, t_list **amap, t_list *lblob, t_list *lttmn, int
|
||||||
|
|
||||||
int ft_get_blobs(char **board, t_list **amap, t_list *lttmn, int space)
|
int ft_get_blobs(char **board, t_list **amap, t_list *lttmn, int space)
|
||||||
{
|
{
|
||||||
t_list *lblob;
|
|
||||||
t_list *blob;
|
t_list *blob;
|
||||||
t_list *map;
|
t_list *new_map;
|
||||||
|
int sup_space = 0;
|
||||||
int size;
|
int size;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (!lttmn)
|
if (!lttmn)
|
||||||
return (ft_solved(board));
|
return (ft_solved(board));
|
||||||
lblob = NULL;
|
|
||||||
size = ft_strlen(*board);
|
size = ft_strlen(*board);
|
||||||
map = *amap;
|
|
||||||
/* ft_putendl("getting blobs for"); */
|
/* ft_putendl("getting blobs for"); */
|
||||||
/* ft_lst_print(map, &ft_putnbr); */
|
/* ft_lst_print(*amap, &ft_putnbr); */
|
||||||
/* ft_show_board(board); */
|
/* ft_show_board(board); */
|
||||||
while (map)
|
new_map = ft_lstmap(*amap, &ft_id);
|
||||||
|
while (new_map)
|
||||||
{
|
{
|
||||||
i = *(int *)map->content;
|
i = *(int *)(new_map)->content;
|
||||||
blob = ft_empty_here(board, amap, size, i);
|
blob = ft_empty_here(board, &new_map, size, i);
|
||||||
map = *amap;
|
ft_board_remove(board, '*');
|
||||||
if (ft_lstsize(blob) / 4 > 0)
|
/* ft_putendl("found blob:"); */
|
||||||
ft_lsteadd(&lblob, ft_lstnew(&blob, sizeof(t_list *)));
|
/* ft_lst_print(blob, &ft_putnbr); */
|
||||||
|
/* if (ft_lstsize(blob) / 4 > 0) */
|
||||||
|
/* ft_lsteadd(&lblob, ft_lstnew(&blob, sizeof(t_list *))); */
|
||||||
if (ft_lstsize(blob) / 4 <= 1)
|
if (ft_lstsize(blob) / 4 <= 1)
|
||||||
|
{
|
||||||
space -= ft_lstsize(blob) % 4;
|
space -= ft_lstsize(blob) % 4;
|
||||||
|
/* ft_putendl("delsub:"); */
|
||||||
|
/* ft_lst_print(*amap, &ft_putnbr); */
|
||||||
|
ft_lst_delsub(amap, blob, &ft_diff, &ft_lst_cfree);
|
||||||
|
/* ft_lst_print(blob, &ft_putnbr); */
|
||||||
|
/* ft_lst_print(*amap, &ft_putnbr); */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
sup_space -= ft_lstsize(blob) % 4;
|
||||||
|
if (ft_lstsize(blob) / 4 == 1)
|
||||||
|
{
|
||||||
|
if (ft_fit_blob(board, amap, blob, lttmn, space))
|
||||||
|
return (1);
|
||||||
|
else
|
||||||
|
space -= 4;
|
||||||
|
}
|
||||||
/* ft_lst_print(*(t_list **)ft_lstlast(lblob), &ft_putnbr); */
|
/* ft_lst_print(*(t_list **)ft_lstlast(lblob), &ft_putnbr); */
|
||||||
/* printf("took off %i, waste=%i\n", ft_lstsize(blob) % 4, size*size - 4*g_ttmn - space); */
|
/* printf("took off %i, waste=%i\n", ft_lstsize(blob) % 4, size*size - 4*g_ttmn - space); */
|
||||||
/* ft_show_board(board); */
|
/* ft_show_board(board); */
|
||||||
/* ft_lst_print(blob, &ft_putnbr); */
|
/* ft_lst_print(blob, &ft_putnbr); */
|
||||||
/* fflush(stdout); */
|
/* fflush(stdout); */
|
||||||
if (space < 0)
|
if (space + sup_space < 0)
|
||||||
{
|
{
|
||||||
ft_board_remove(board, '*');
|
ft_board_remove(board, '*');
|
||||||
/* ft_show_board(board); */
|
/* ft_show_board(board); */
|
||||||
|
|
@ -94,64 +111,64 @@ int ft_get_blobs(char **board, t_list **amap, t_list *lttmn, int space)
|
||||||
/* ft_putendl("found blobs in map:"); */
|
/* ft_putendl("found blobs in map:"); */
|
||||||
/* ft_show_board(board); */
|
/* ft_show_board(board); */
|
||||||
/* ft_lst_print2(lblob, &ft_putnbr); */
|
/* ft_lst_print2(lblob, &ft_putnbr); */
|
||||||
return (ft_check_blobs(board, amap, lblob, lttmn, space));
|
return (ft_solver(board, amap, lttmn, space));
|
||||||
}
|
}
|
||||||
|
|
||||||
int ft_check_blobs(char **board, t_list **amap, t_list *lblob, t_list *lttmn, int space)
|
/* int ft_check_blobs(char **board, t_list **amap, t_list *lblob, t_list *lttmn, int space) */
|
||||||
{
|
/* { */
|
||||||
t_list *blob;
|
/* t_list *blob; */
|
||||||
t_list *new_map;
|
/* t_list *new_map; */
|
||||||
int size;
|
/* int size; */
|
||||||
|
|
||||||
/* ft_putendl("at start of check_blobs"); */
|
/* /1* ft_putendl("at start of check_blobs"); *1/ */
|
||||||
if (!lttmn)
|
/* if (!lttmn) */
|
||||||
return (ft_solved(board));
|
/* return (ft_solved(board)); */
|
||||||
if (((t_ttmn *)lttmn->content)->placed)
|
/* if (((t_ttmn *)lttmn->content)->placed) */
|
||||||
return (ft_check_blobs(board, amap, lblob, lttmn->next, space));
|
/* return (ft_check_blobs(board, amap, lblob, lttmn->next, space)); */
|
||||||
fflush(stdout);
|
/* fflush(stdout); */
|
||||||
if (!lblob)
|
/* if (!lblob) */
|
||||||
{
|
/* { */
|
||||||
/* printf("calling solver, no more blobs\n"); */
|
/* /1* printf("calling solver, no more blobs\n"); *1/ */
|
||||||
/* fflush(stdout); */
|
/* /1* fflush(stdout); *1/ */
|
||||||
/* new_map = ft_lstmap(*amap, &ft_id); */
|
/* /1* new_map = ft_lstmap(*amap, &ft_id); *1/ */
|
||||||
return (ft_solver(board, amap, lttmn, space));
|
/* return (ft_solver(board, amap, lttmn, space)); */
|
||||||
}
|
/* } */
|
||||||
size = ft_strlen(*board);
|
/* size = ft_strlen(*board); */
|
||||||
blob = *(t_list **)lblob->content;
|
/* blob = *(t_list **)lblob->content; */
|
||||||
|
|
||||||
/* ft_show_board(board); */
|
/* /1* ft_show_board(board); *1/ */
|
||||||
/* ft_lst_print(*amap, &ft_putnbr); */
|
/* /1* ft_lst_print(*amap, &ft_putnbr); *1/ */
|
||||||
/* ft_lst_print2(lblob, &ft_putnbr); */
|
/* /1* ft_lst_print2(lblob, &ft_putnbr); *1/ */
|
||||||
if (ft_lstsize(blob) / 4 == 1)
|
/* if (ft_lstsize(blob) / 4 == 1) */
|
||||||
{
|
/* { */
|
||||||
/* new_map = ft_lstmap(*amap, &ft_id); */
|
/* /1* new_map = ft_lstmap(*amap, &ft_id); *1/ */
|
||||||
if (ft_fit_blob(board, amap, lblob, lttmn, space))
|
/* if (ft_fit_blob(board, amap, lblob, lttmn, space)) */
|
||||||
{
|
/* { */
|
||||||
lblob = lblob->next;
|
/* lblob = lblob->next; */
|
||||||
return (1);
|
/* return (1); */
|
||||||
}
|
/* } */
|
||||||
else
|
/* else */
|
||||||
{
|
/* { */
|
||||||
space -= 4;
|
/* space -= 4; */
|
||||||
/* printf("took off 4 from space : %i (fit)\n", space); */
|
/* /1* printf("took off 4 from space : %i (fit)\n", space); *1/ */
|
||||||
/* fflush(stdout); */
|
/* /1* fflush(stdout); *1/ */
|
||||||
if (space < 0)
|
/* if (space < 0) */
|
||||||
{
|
/* { */
|
||||||
/* ft_show_board(board); */
|
/* /1* ft_show_board(board); *1/ */
|
||||||
/* ft_putendl("not enough space"); */
|
/* /1* ft_putendl("not enough space"); *1/ */
|
||||||
return (0);
|
/* return (0); */
|
||||||
}
|
/* } */
|
||||||
}
|
/* } */
|
||||||
}
|
/* } */
|
||||||
else
|
/* else */
|
||||||
{
|
/* { */
|
||||||
/* ft_lst_print(*amap, &ft_putnbr); */
|
/* /1* ft_lst_print(*amap, &ft_putnbr); *1/ */
|
||||||
/* printf("blob too big, adding to map\n"); */
|
/* /1* printf("blob too big, adding to map\n"); *1/ */
|
||||||
/* fflush(stdout); */
|
/* /1* fflush(stdout); *1/ */
|
||||||
/* ft_lst_print(*amap, &ft_putnbr); */
|
/* /1* ft_lst_print(*amap, &ft_putnbr); *1/ */
|
||||||
|
|
||||||
ft_lst_sorted_merge(amap, blob, &ft_diff);
|
/* ft_lst_sorted_merge(amap, blob, &ft_diff); */
|
||||||
}
|
/* } */
|
||||||
new_map = ft_lstmap(*amap, &ft_id);
|
/* new_map = ft_lstmap(*amap, &ft_id); */
|
||||||
return(ft_check_blobs(board, &new_map, lblob->next, lttmn, space));
|
/* return(ft_check_blobs(board, &new_map, lblob->next, lttmn, space)); */
|
||||||
}
|
/* } */
|
||||||
|
|
|
||||||
|
|
@ -28,9 +28,9 @@ int ft_solver(char **board, t_list **amap, t_list *lttmn, int space)
|
||||||
/* ft_putendl("before solver"); */
|
/* ft_putendl("before solver"); */
|
||||||
/* printf("space=%i, waste=%i\n", space, size*size - 4*g_ttmn - space); */
|
/* printf("space=%i, waste=%i\n", space, size*size - 4*g_ttmn - space); */
|
||||||
/* fflush(stdout); */
|
/* fflush(stdout); */
|
||||||
/* ft_show_board(board); */
|
ft_show_board(board);
|
||||||
/* ft_lst_print(map, &ft_putnbr); */
|
ft_lst_print(map, &ft_putnbr);
|
||||||
/* ft_show_ttmn(*ttmn); */
|
ft_show_ttmn(*ttmn);
|
||||||
while (map)
|
while (map)
|
||||||
{
|
{
|
||||||
i = *(int *)map->content;
|
i = *(int *)map->content;
|
||||||
|
|
@ -55,7 +55,7 @@ int ft_solver(char **board, t_list **amap, t_list *lttmn, int space)
|
||||||
/* fflush(stdout); */
|
/* fflush(stdout); */
|
||||||
|
|
||||||
ft_map_addttmn(amap, i, ttmn->pos, size);
|
ft_map_addttmn(amap, i, ttmn->pos, size);
|
||||||
ft_lst_remove_if(amap, &i, &ft_diff);
|
ft_lst_delif(amap, &i, &ft_diff, &ft_lst_cfree);
|
||||||
map = *amap;
|
map = *amap;
|
||||||
ft_board_remove(board, ttmn->id);
|
ft_board_remove(board, ttmn->id);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ t_list *ft_empty_here(char **board, t_list **amap, int size, int i)
|
||||||
/* ft_lst_print(*amap, &ft_putnbr); */
|
/* ft_lst_print(*amap, &ft_putnbr); */
|
||||||
/* printf("removing %i from map\n", i); */
|
/* printf("removing %i from map\n", i); */
|
||||||
/* ft_lst_print(*amap, &ft_putnbr); */
|
/* ft_lst_print(*amap, &ft_putnbr); */
|
||||||
ft_lst_remove_if(amap, &i, &ft_diff);
|
ft_lst_delif(amap, &i, &ft_diff, &ft_lst_cfree);
|
||||||
blob = ft_empty_around(board, amap, size, i);
|
blob = ft_empty_around(board, amap, size, i);
|
||||||
ft_lst_sorted_insert(&blob, ft_lstnew(&i, sizeof(int)), &ft_diff);
|
ft_lst_sorted_insert(&blob, ft_lstnew(&i, sizeof(int)), &ft_diff);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue