stable, bit slower but one function less
This commit is contained in:
parent
165a8433da
commit
6cb04a8eba
5 changed files with 63 additions and 124 deletions
|
|
@ -1 +1 @@
|
||||||
Subproject commit 3b137f6f49a9b1025a3566272d3dfb7e7a44d316
|
Subproject commit 4ec8bf9ec711dd24c399d75c5763ee6706d09104
|
||||||
|
|
@ -9,21 +9,13 @@ int ft_fit_blob(char **board, t_list **amap, t_list *blob, t_list *lttmn, int s
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
size = ft_strlen(*board);
|
size = ft_strlen(*board);
|
||||||
/* blob = *(t_list **)lblob->content; */
|
|
||||||
|
|
||||||
/* ft_putendl("fitting blob :"); */
|
|
||||||
/* ft_show_board(board); */
|
|
||||||
/* ft_lst_print2(lblob, &ft_putnbr); */
|
|
||||||
while (blob)
|
while (blob)
|
||||||
{
|
{
|
||||||
i = *(int*)blob->content;
|
i = *(int*)blob->content;
|
||||||
/* printf("at i=%i\n", i); */
|
|
||||||
/* fflush(stdout); */
|
|
||||||
list = lttmn;
|
list = lttmn;
|
||||||
while (list)
|
while (list)
|
||||||
{
|
{
|
||||||
ttmn = (t_ttmn *)list->content;
|
ttmn = (t_ttmn *)list->content;
|
||||||
/* ft_show_ttmn(*ttmn); */
|
|
||||||
if (ttmn->placed)
|
if (ttmn->placed)
|
||||||
{
|
{
|
||||||
list = list->next;
|
list = list->next;
|
||||||
|
|
@ -36,8 +28,6 @@ int ft_fit_blob(char **board, t_list **amap, t_list *blob, t_list *lttmn, int s
|
||||||
}
|
}
|
||||||
ttmn->placed = 1;
|
ttmn->placed = 1;
|
||||||
new_map = ft_lstmap(*amap, &ft_id);
|
new_map = ft_lstmap(*amap, &ft_id);
|
||||||
/* printf("just fitted ttmn %c\n", ttmn->id); */
|
|
||||||
/* ft_show_ttmn(*ttmn); */
|
|
||||||
if (ft_solver(board, &new_map, lttmn, space))
|
if (ft_solver(board, &new_map, lttmn, space))
|
||||||
return (1);
|
return (1);
|
||||||
ttmn->placed = 0;
|
ttmn->placed = 0;
|
||||||
|
|
@ -46,7 +36,6 @@ int ft_fit_blob(char **board, t_list **amap, t_list *blob, t_list *lttmn, int s
|
||||||
}
|
}
|
||||||
blob = blob->next;
|
blob = blob->next;
|
||||||
}
|
}
|
||||||
/* ft_putendl("failed to fit blob"); */
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -61,27 +50,16 @@ int ft_get_blobs(char **board, t_list **amap, t_list *lttmn, int space)
|
||||||
if (!lttmn)
|
if (!lttmn)
|
||||||
return (ft_solved(board));
|
return (ft_solved(board));
|
||||||
size = ft_strlen(*board);
|
size = ft_strlen(*board);
|
||||||
/* ft_putendl("getting blobs for"); */
|
|
||||||
/* ft_lst_print(*amap, &ft_putnbr); */
|
|
||||||
/* ft_show_board(board); */
|
|
||||||
new_map = ft_lstmap(*amap, &ft_id);
|
new_map = ft_lstmap(*amap, &ft_id);
|
||||||
while (new_map)
|
while (new_map)
|
||||||
{
|
{
|
||||||
i = *(int *)(new_map)->content;
|
i = *(int *)(new_map)->content;
|
||||||
blob = ft_empty_here(board, &new_map, size, i);
|
blob = ft_empty_here(board, &new_map, size, i);
|
||||||
ft_board_remove(board, '*');
|
ft_board_remove(board, '*');
|
||||||
/* ft_putendl("found blob:"); */
|
|
||||||
/* 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_delsub(amap, blob, &ft_diff, &ft_lst_cfree);
|
||||||
/* ft_lst_print(blob, &ft_putnbr); */
|
|
||||||
/* ft_lst_print(*amap, &ft_putnbr); */
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
sup_space -= ft_lstsize(blob) % 4;
|
sup_space -= ft_lstsize(blob) % 4;
|
||||||
|
|
@ -92,83 +70,12 @@ int ft_get_blobs(char **board, t_list **amap, t_list *lttmn, int space)
|
||||||
else
|
else
|
||||||
space -= 4;
|
space -= 4;
|
||||||
}
|
}
|
||||||
/* 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); */
|
|
||||||
/* ft_show_board(board); */
|
|
||||||
/* ft_lst_print(blob, &ft_putnbr); */
|
|
||||||
/* fflush(stdout); */
|
|
||||||
if (space + sup_space < 0)
|
if (space + sup_space < 0)
|
||||||
{
|
{
|
||||||
ft_board_remove(board, '*');
|
ft_board_remove(board, '*');
|
||||||
/* ft_show_board(board); */
|
|
||||||
/* printf("lack of space=%i\n", space); */
|
|
||||||
/* fflush(stdout); */
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ft_board_remove(board, '*');
|
ft_board_remove(board, '*');
|
||||||
|
|
||||||
/* ft_putendl("found blobs in map:"); */
|
|
||||||
/* ft_show_board(board); */
|
|
||||||
/* ft_lst_print2(lblob, &ft_putnbr); */
|
|
||||||
return (ft_solver(board, amap, 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) */
|
|
||||||
/* { */
|
|
||||||
/* t_list *blob; */
|
|
||||||
/* t_list *new_map; */
|
|
||||||
/* int size; */
|
|
||||||
|
|
||||||
/* /1* ft_putendl("at start of check_blobs"); *1/ */
|
|
||||||
/* if (!lttmn) */
|
|
||||||
/* return (ft_solved(board)); */
|
|
||||||
/* if (((t_ttmn *)lttmn->content)->placed) */
|
|
||||||
/* return (ft_check_blobs(board, amap, lblob, lttmn->next, space)); */
|
|
||||||
/* fflush(stdout); */
|
|
||||||
/* if (!lblob) */
|
|
||||||
/* { */
|
|
||||||
/* /1* printf("calling solver, no more blobs\n"); *1/ */
|
|
||||||
/* /1* fflush(stdout); *1/ */
|
|
||||||
/* /1* new_map = ft_lstmap(*amap, &ft_id); *1/ */
|
|
||||||
/* return (ft_solver(board, amap, lttmn, space)); */
|
|
||||||
/* } */
|
|
||||||
/* size = ft_strlen(*board); */
|
|
||||||
/* blob = *(t_list **)lblob->content; */
|
|
||||||
|
|
||||||
/* /1* ft_show_board(board); *1/ */
|
|
||||||
/* /1* ft_lst_print(*amap, &ft_putnbr); *1/ */
|
|
||||||
/* /1* ft_lst_print2(lblob, &ft_putnbr); *1/ */
|
|
||||||
/* if (ft_lstsize(blob) / 4 == 1) */
|
|
||||||
/* { */
|
|
||||||
/* /1* new_map = ft_lstmap(*amap, &ft_id); *1/ */
|
|
||||||
/* if (ft_fit_blob(board, amap, lblob, lttmn, space)) */
|
|
||||||
/* { */
|
|
||||||
/* lblob = lblob->next; */
|
|
||||||
/* return (1); */
|
|
||||||
/* } */
|
|
||||||
/* else */
|
|
||||||
/* { */
|
|
||||||
/* space -= 4; */
|
|
||||||
/* /1* printf("took off 4 from space : %i (fit)\n", space); *1/ */
|
|
||||||
/* /1* fflush(stdout); *1/ */
|
|
||||||
/* if (space < 0) */
|
|
||||||
/* { */
|
|
||||||
/* /1* ft_show_board(board); *1/ */
|
|
||||||
/* /1* ft_putendl("not enough space"); *1/ */
|
|
||||||
/* return (0); */
|
|
||||||
/* } */
|
|
||||||
/* } */
|
|
||||||
/* } */
|
|
||||||
/* else */
|
|
||||||
/* { */
|
|
||||||
/* /1* ft_lst_print(*amap, &ft_putnbr); *1/ */
|
|
||||||
/* /1* printf("blob too big, adding to map\n"); *1/ */
|
|
||||||
/* /1* fflush(stdout); *1/ */
|
|
||||||
/* /1* ft_lst_print(*amap, &ft_putnbr); *1/ */
|
|
||||||
|
|
||||||
/* ft_lst_sorted_merge(amap, blob, &ft_diff); */
|
|
||||||
/* } */
|
|
||||||
/* new_map = ft_lstmap(*amap, &ft_id); */
|
|
||||||
/* return(ft_check_blobs(board, &new_map, lblob->next, lttmn, space)); */
|
|
||||||
/* } */
|
|
||||||
|
|
|
||||||
|
|
@ -53,3 +53,62 @@
|
||||||
/* } */
|
/* } */
|
||||||
/* return (0); */
|
/* return (0); */
|
||||||
/* } */
|
/* } */
|
||||||
|
|
||||||
|
/* int ft_check_blobs(char **board, t_list **amap, t_list *lblob, t_list *lttmn, int space) */
|
||||||
|
/* { */
|
||||||
|
/* t_list *blob; */
|
||||||
|
/* t_list *new_map; */
|
||||||
|
/* int size; */
|
||||||
|
|
||||||
|
/* /1* ft_putendl("at start of check_blobs"); *1/ */
|
||||||
|
/* if (!lttmn) */
|
||||||
|
/* return (ft_solved(board)); */
|
||||||
|
/* if (((t_ttmn *)lttmn->content)->placed) */
|
||||||
|
/* return (ft_check_blobs(board, amap, lblob, lttmn->next, space)); */
|
||||||
|
/* fflush(stdout); */
|
||||||
|
/* if (!lblob) */
|
||||||
|
/* { */
|
||||||
|
/* /1* printf("calling solver, no more blobs\n"); *1/ */
|
||||||
|
/* /1* fflush(stdout); *1/ */
|
||||||
|
/* /1* new_map = ft_lstmap(*amap, &ft_id); *1/ */
|
||||||
|
/* return (ft_solver(board, amap, lttmn, space)); */
|
||||||
|
/* } */
|
||||||
|
/* size = ft_strlen(*board); */
|
||||||
|
/* blob = *(t_list **)lblob->content; */
|
||||||
|
|
||||||
|
/* /1* ft_show_board(board); *1/ */
|
||||||
|
/* /1* ft_lst_print(*amap, &ft_putnbr); *1/ */
|
||||||
|
/* /1* ft_lst_print2(lblob, &ft_putnbr); *1/ */
|
||||||
|
/* if (ft_lstsize(blob) / 4 == 1) */
|
||||||
|
/* { */
|
||||||
|
/* /1* new_map = ft_lstmap(*amap, &ft_id); *1/ */
|
||||||
|
/* if (ft_fit_blob(board, amap, lblob, lttmn, space)) */
|
||||||
|
/* { */
|
||||||
|
/* lblob = lblob->next; */
|
||||||
|
/* return (1); */
|
||||||
|
/* } */
|
||||||
|
/* else */
|
||||||
|
/* { */
|
||||||
|
/* space -= 4; */
|
||||||
|
/* /1* printf("took off 4 from space : %i (fit)\n", space); *1/ */
|
||||||
|
/* /1* fflush(stdout); *1/ */
|
||||||
|
/* if (space < 0) */
|
||||||
|
/* { */
|
||||||
|
/* /1* ft_show_board(board); *1/ */
|
||||||
|
/* /1* ft_putendl("not enough space"); *1/ */
|
||||||
|
/* return (0); */
|
||||||
|
/* } */
|
||||||
|
/* } */
|
||||||
|
/* } */
|
||||||
|
/* else */
|
||||||
|
/* { */
|
||||||
|
/* /1* ft_lst_print(*amap, &ft_putnbr); *1/ */
|
||||||
|
/* /1* printf("blob too big, adding to map\n"); *1/ */
|
||||||
|
/* /1* fflush(stdout); *1/ */
|
||||||
|
/* /1* ft_lst_print(*amap, &ft_putnbr); *1/ */
|
||||||
|
|
||||||
|
/* ft_lst_sorted_merge(amap, blob, &ft_diff); */
|
||||||
|
/* } */
|
||||||
|
/* new_map = ft_lstmap(*amap, &ft_id); */
|
||||||
|
/* return(ft_check_blobs(board, &new_map, lblob->next, lttmn, space)); */
|
||||||
|
/* } */
|
||||||
|
|
|
||||||
|
|
@ -3,9 +3,6 @@
|
||||||
int ft_solved(char **board)
|
int ft_solved(char **board)
|
||||||
{
|
{
|
||||||
g_sol = ft_copy_board(board);
|
g_sol = ft_copy_board(board);
|
||||||
/* printf("new solution : size %i\n", ft_strlen(*board)); */
|
|
||||||
/* fflush(stdout); */
|
|
||||||
/* ft_show_board(g_sol); */
|
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -24,44 +21,20 @@ int ft_solver(char **board, t_list **amap, t_list *lttmn, int space)
|
||||||
return (ft_solver(board, amap, lttmn->next, space));
|
return (ft_solver(board, amap, lttmn->next, space));
|
||||||
size = ft_strlen(*board);
|
size = ft_strlen(*board);
|
||||||
map = *amap;
|
map = *amap;
|
||||||
|
|
||||||
/* ft_putendl("before solver"); */
|
|
||||||
/* printf("space=%i, waste=%i\n", space, size*size - 4*g_ttmn - space); */
|
|
||||||
/* fflush(stdout); */
|
|
||||||
ft_show_board(board);
|
|
||||||
ft_lst_print(map, &ft_putnbr);
|
|
||||||
ft_show_ttmn(*ttmn);
|
|
||||||
while (map)
|
while (map)
|
||||||
{
|
{
|
||||||
i = *(int *)map->content;
|
i = *(int *)map->content;
|
||||||
/* printf("looking at %i\n", i); */
|
|
||||||
/* fflush(stdout); */
|
|
||||||
if (ft_board_add(board, *ttmn, i))
|
if (ft_board_add(board, *ttmn, i))
|
||||||
{
|
{
|
||||||
map = map->next;
|
map = map->next;
|
||||||
/* printf("map=%p\n", map); */
|
|
||||||
/* fflush(stdout); */
|
|
||||||
continue ;
|
continue ;
|
||||||
}
|
}
|
||||||
/* printf("placed ttmn %c at %i\n", ttmn->id, i); */
|
|
||||||
/* fflush(stdout); */
|
|
||||||
|
|
||||||
ft_map_delttmn(amap, i, ttmn->pos, size);
|
|
||||||
valmap = ft_lstmap(*amap, &ft_id);
|
valmap = ft_lstmap(*amap, &ft_id);
|
||||||
|
ft_map_delttmn(&valmap, i, ttmn->pos, size);
|
||||||
if (ft_get_blobs(board, &valmap, lttmn->next, space))
|
if (ft_get_blobs(board, &valmap, lttmn->next, space))
|
||||||
return (1);
|
return (1);
|
||||||
|
|
||||||
/* printf("after blob fail\n"); */
|
|
||||||
/* fflush(stdout); */
|
|
||||||
|
|
||||||
ft_map_addttmn(amap, i, ttmn->pos, size);
|
|
||||||
ft_lst_delif(amap, &i, &ft_diff, &ft_lst_cfree);
|
|
||||||
map = *amap;
|
|
||||||
ft_board_remove(board, ttmn->id);
|
ft_board_remove(board, ttmn->id);
|
||||||
|
map = map->next;
|
||||||
/* ft_lst_print(*amap, &ft_putnbr); */
|
|
||||||
/* ft_show_board(board); */
|
|
||||||
}
|
}
|
||||||
/* ft_putendl("failed solver"); */
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ void ft_map_delttmn(t_list **amap, int anchor, int pos[4][2], int size)
|
||||||
/* printf("deleting: %i\n", anchor + size * pos[i][0] + pos[i][1]); */
|
/* printf("deleting: %i\n", anchor + size * pos[i][0] + pos[i][1]); */
|
||||||
/* fflush(stdout); */
|
/* fflush(stdout); */
|
||||||
j = anchor + size * pos[i][0] + pos[i][1];
|
j = anchor + size * pos[i][0] + pos[i][1];
|
||||||
ft_lst_remove_if(amap, &j, &ft_diff);
|
ft_lst_delif(amap, &j, &ft_diff, &ft_lst_cfree);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue