commit to checkout master

This commit is contained in:
Jack Halford 2016-09-10 02:22:40 +02:00
parent 4b5e6d49f1
commit 165a8433da
3 changed files with 94 additions and 77 deletions

View file

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

View file

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

View file

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