stable, bit slower but one function less

This commit is contained in:
Jack Halford 2016-09-10 15:26:07 +02:00
parent 165a8433da
commit 6cb04a8eba
5 changed files with 63 additions and 124 deletions

@ -1 +1 @@
Subproject commit 3b137f6f49a9b1025a3566272d3dfb7e7a44d316 Subproject commit 4ec8bf9ec711dd24c399d75c5763ee6706d09104

View file

@ -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)); */
/* } */

View file

@ -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)); */
/* } */

View file

@ -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);
} }

View file

@ -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);
} }
} }