python script for testing randoms sets
This commit is contained in:
parent
105404cbed
commit
fa7ef964d1
58 changed files with 270 additions and 148 deletions
20
fillit/.tags
Normal file
20
fillit/.tags
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
Mmain src/main.c /^int main(int ac, char **av)$/
|
||||
ft_board_add src/lib_board.c /^int ft_board_add(char **board, t_ttmn ttmn, int i/
|
||||
ft_board_copy src/lib_board.c /^char **ft_board_copy(char **board)$/
|
||||
ft_board_fill src/lib_board.c /^void ft_board_fill(char **dst, char **src)$/
|
||||
ft_board_free src/lib_board.c /^void ft_board_free(char ***board)$/
|
||||
ft_board_init src/lib_board.c /^char **ft_board_init(size_t size)$/
|
||||
ft_board_print src/lib_board.c /^void ft_board_print(char **board)$/
|
||||
ft_board_remove src/lib_board.c /^void ft_board_remove(char **board, char c)$/
|
||||
ft_board_replace src/lib_board.c /^void ft_board_replace(char **board, char a, char b/
|
||||
ft_check_waste src/fillit_check_waste.c /^int ft_check_waste(char **board, t_list *lttmn, i/
|
||||
ft_fit_blob src/fillit_fit_blob.c /^int ft_fit_blob(char **board, t_list *lttmn, int /
|
||||
ft_floodfill_recursive src/floodfill.c /^int ft_floodfill_recursive(char **board, int size/
|
||||
ft_floodfill_stack src/floodfill.c /^int ft_floodfill_stack(char **board, int size, in/
|
||||
ft_parse_ttmn src/fillit_parser.c /^t_list *ft_parse_ttmn(char *filename)$/
|
||||
ft_show_ttmn src/lib_ttmn.c /^void ft_show_ttmn(t_ttmn ttmn)$/
|
||||
ft_solved src/fillit_solver.c /^int ft_solved(char **board)$/
|
||||
ft_solver src/fillit_solver.c /^int ft_solver(char **board, t_list *lttmn, int sp/
|
||||
ft_ttmn_reset src/lib_ttmn.c /^void ft_ttmn_reset(t_list *ttmn)$/
|
||||
ft_usage src/main.c /^void ft_usage(void)$/
|
||||
ft_validate_ttmn src/fillit_parser.c /^int ft_validate_ttmn(t_ttmn ttmn)$/
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
NAME = fillit
|
||||
CC = gcc
|
||||
TAGFILE = .tags
|
||||
|
||||
D_SRC = src
|
||||
F_SRC := $(shell ls -1 $(D_SRC) | grep "\.c$$")
|
||||
|
|
@ -22,9 +23,13 @@ D_FLAGS =
|
|||
MKDIR = mkdir -p
|
||||
RM = /bin/rm -rf
|
||||
|
||||
.PHONY: all clean fclean re lib/libft
|
||||
.PHONY: all clean fclean re tags lib/libft
|
||||
|
||||
all: $(NAME)
|
||||
all: $(NAME) tags
|
||||
|
||||
tags:
|
||||
@ctags -f $(TAGFILE) $(addprefix $(D_SRC)/, $(F_SRC))
|
||||
@echo "Making tags..."
|
||||
|
||||
$(D_OBJ)/%.o: $(D_SRC)/%.c $(D_INC)
|
||||
@$(MKDIR) $(D_OBJ)
|
||||
|
|
|
|||
|
|
@ -28,10 +28,9 @@ int ft_solver(char **board, t_list *lttmn, int space, int size);
|
|||
int ft_solved(char **board);
|
||||
|
||||
int ft_check_waste(char **board, t_list *lttmn, int space, int size);
|
||||
int ft_flood_fill(char **board, int size, int i, char c);
|
||||
|
||||
int ft_blobs(char **board, t_list *lttmn, int space, int size);
|
||||
int ft_fit_blob(char **board, t_list *lttmn, int space, int size, int blob_size, int i);
|
||||
int ft_floodfill_recursive(char **board, int size, int i, char c);
|
||||
int ft_floodfill_stack(char **board, int size, int i, char c);
|
||||
|
||||
void ft_board_print(char **board);
|
||||
char **ft_board_init(size_t size);
|
||||
|
|
|
|||
|
|
@ -18,7 +18,10 @@ int ft_check_waste(char **board, t_list *lttmn, int space, int size)
|
|||
if (board[i / size][i % size] != '.')
|
||||
continue ;
|
||||
ft_board_replace(board, '*', '^');
|
||||
blob_size = ft_flood_fill(board, size, i, '*');
|
||||
blob_size = ft_floodfill_recursive(board, size, i, '*');
|
||||
/* ft_board_print(board); */
|
||||
/* printf("blob size = %i\n", blob_size); */
|
||||
/* fflush(stdout); */
|
||||
space -= blob_size % 4;
|
||||
|
||||
if (space < 0)
|
||||
|
|
|
|||
|
|
@ -57,8 +57,6 @@ t_list *ft_parse_ttmn(char *filename)
|
|||
i = 0;
|
||||
while (buf[i])
|
||||
{
|
||||
/* printf("%i, %i, %i: '%c'\n", i, j, k, buf[i]); */
|
||||
/* fflush(stdout); */
|
||||
if (buf[i] == '.')
|
||||
;
|
||||
else if (buf[i] == '#')
|
||||
|
|
@ -89,16 +87,7 @@ t_list *ft_parse_ttmn(char *filename)
|
|||
if (!ft_validate_ttmn(ttmn))
|
||||
return (0);
|
||||
tmp = ft_lstnew(&ttmn , sizeof(t_ttmn));
|
||||
/* printf("list: %p\n", list); */
|
||||
/* printf("new: %p\n", tmp); */
|
||||
/* printf("new->next: %p\n", tmp->next); */
|
||||
/* fflush(stdout); */
|
||||
ft_lsteadd(&list, tmp);
|
||||
/* printf("list: %p\n", list); */
|
||||
/* printf("list->next: %p\n", list->next); */
|
||||
/* fflush(stdout); */
|
||||
/* ft_show_ttmn(*(t_ttmn*)list->content); */
|
||||
/* ft_show_ttmn(*(t_ttmn*)ft_lstlast(list)->content); */
|
||||
j = -1;
|
||||
k = 0;
|
||||
}
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
#include "fillit.h"
|
||||
|
||||
int ft_flood_fill(char **board, int size, int i, char c)
|
||||
{
|
||||
int n;
|
||||
|
||||
n = 0;
|
||||
if (board[i / size][i % size] == '.')
|
||||
{
|
||||
board[i / size][i % size] = c;
|
||||
n++;
|
||||
n += i % size < size - 1 ? ft_flood_fill(board, size, i + 1, c) : 0;
|
||||
n += i / size > 0 ? ft_flood_fill(board, size, i - size, c) : 0;
|
||||
n += i % size > 0 ? ft_flood_fill(board, size, i - 1, c) : 0;
|
||||
n += i / size < size - 1 ? ft_flood_fill(board, size, i + size, c) : 0;
|
||||
}
|
||||
/* printf("list at %i: ", i); */
|
||||
/* fflush(stdout); */
|
||||
/* ft_lst_print(blob, &ft_putnbr); */
|
||||
return (n);
|
||||
}
|
||||
66
fillit/src/floodfill.c
Normal file
66
fillit/src/floodfill.c
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
#include "fillit.h"
|
||||
|
||||
int ft_floodfill_recursive(char **board, int size, int i, char c)
|
||||
{
|
||||
int n;
|
||||
|
||||
n = 0;
|
||||
if (board[i / size][i % size] == '.')
|
||||
{
|
||||
board[i / size][i % size] = c;
|
||||
n++;
|
||||
n += i % size < size - 1 ? ft_floodfill_recursive(board, size, i + 1, c) : 0;
|
||||
n += i / size > 0 ? ft_floodfill_recursive(board, size, i - size, c) : 0;
|
||||
n += i % size > 0 ? ft_floodfill_recursive(board, size, i - 1, c) : 0;
|
||||
n += i / size < size - 1 ? ft_floodfill_recursive(board, size, i + size, c) : 0;
|
||||
}
|
||||
/* printf("list at %i: ", i); */
|
||||
/* fflush(stdout); */
|
||||
/* ft_lst_print(blob, &ft_putnbr); */
|
||||
return (n);
|
||||
}
|
||||
|
||||
int ft_floodfill_stack(char **board, int size, int i, char c)
|
||||
{
|
||||
static const int dx[4] = {1, -1, 0, 0};
|
||||
static const int dy[4] = {0, 0, 1, -1};
|
||||
int x;
|
||||
int y;
|
||||
int nx;
|
||||
int ny;
|
||||
int n;
|
||||
t_list *top;
|
||||
t_list *stack;
|
||||
t_list *stack2;
|
||||
|
||||
stack = NULL;
|
||||
stack2 = NULL;
|
||||
n = 0;
|
||||
ft_lstadd(&stack, ft_lstnew(&i, sizeof(int)));
|
||||
while (stack || stack2)
|
||||
{
|
||||
if (stack2)
|
||||
stack = stack2;
|
||||
stack2 = NULL;
|
||||
/* ft_board_print(board); */
|
||||
while((top = ft_lstpop(&stack)))
|
||||
{
|
||||
i = *(int *)top->content;
|
||||
x = i % size;
|
||||
y = i / size;
|
||||
board[y][x] = c;
|
||||
for(int j = 0; j < 4; j++) {
|
||||
nx = x + dx[j];
|
||||
ny = y + dy[j];
|
||||
i = nx + size * ny;
|
||||
if(nx >= 0 && nx < size && ny >= 0 && ny < size
|
||||
&& board[ny][nx] == '.')
|
||||
{
|
||||
ft_lstadd(&stack2, ft_lstnew(&i, sizeof(int)));
|
||||
n++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return (n);
|
||||
}
|
||||
|
|
@ -1,110 +0,0 @@
|
|||
/*
|
||||
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';
|
||||
}
|
||||
}
|
||||
|
||||
int ft_test_fit(char **board, t_ttmn block, int i, int j)
|
||||
{
|
||||
size_t k;
|
||||
int new_size;
|
||||
int size;
|
||||
int x;
|
||||
int y;
|
||||
|
||||
size = ft_strlen(*board);
|
||||
new_size = size;
|
||||
k = -1;
|
||||
while (++k < 4)
|
||||
{
|
||||
x = (int)j + block.pos[k][1];
|
||||
y = (int)i + block.pos[k][0];
|
||||
if (x < 0 || x < 0)
|
||||
return (0);
|
||||
if (x > size - 1 || y > size - 1)
|
||||
{
|
||||
new_size = MAX(new_size, MAX(x + 1, y + 1));
|
||||
continue ;
|
||||
}
|
||||
if (board[y][x] != '.' && board[y][x] != '*')
|
||||
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; */
|
||||
|
||||
/* 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) */
|
||||
/* { */
|
||||
/* return (ft_solver(board, amap, lttmn, space)); */
|
||||
/* } */
|
||||
/* size = ft_strlen(*board); */
|
||||
/* blob = *(t_list **)lblob->content; */
|
||||
|
||||
/* 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)); */
|
||||
/* } */
|
||||
2
fillit/tests/fillit_test.sh
Executable file
2
fillit/tests/fillit_test.sh
Executable file
|
|
@ -0,0 +1,2 @@
|
|||
./random_tetriminos.py $1
|
||||
time ../fillit ttmnfile
|
||||
19
fillit/tests/random_tetriminos.py
Executable file
19
fillit/tests/random_tetriminos.py
Executable file
|
|
@ -0,0 +1,19 @@
|
|||
#!/usr/bin/python
|
||||
from __future__ import print_function
|
||||
import sys, random, os
|
||||
|
||||
if (len(sys.argv) != 2):
|
||||
print("Please provide one argument.")
|
||||
sys.exit()
|
||||
print ("Generating file with %s random tetriminos: " % sys.argv[1], end="")
|
||||
os.chdir('tetriminos')
|
||||
ttmns = os.listdir('.')
|
||||
n_ttmns = len(ttmns)
|
||||
rand_ind = [random.randrange(0, n_ttmns - 1) for _ in range(int(sys.argv[1]))]
|
||||
# for i in indexes:
|
||||
# print(ttmns[i].rstrip(), end="")
|
||||
rand_ttmns = [ttmns[i].rstrip() for i in rand_ind]
|
||||
print(', '.join(rand_ttmns))
|
||||
command = "cat "+' '.join(rand_ttmns)+" | awk '1; NR % 4 == 0 {print \"\"}' | sed '$ d' > ../ttmnfile"
|
||||
# print(command)
|
||||
os.system(command)
|
||||
4
fillit/tests/tetriminos/I
Normal file
4
fillit/tests/tetriminos/I
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
#...
|
||||
#...
|
||||
#...
|
||||
#...
|
||||
4
fillit/tests/tetriminos/I2
Normal file
4
fillit/tests/tetriminos/I2
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
####
|
||||
....
|
||||
....
|
||||
....
|
||||
4
fillit/tests/tetriminos/J
Normal file
4
fillit/tests/tetriminos/J
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
.#..
|
||||
.#..
|
||||
##..
|
||||
....
|
||||
4
fillit/tests/tetriminos/J1
Normal file
4
fillit/tests/tetriminos/J1
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
###.
|
||||
..#.
|
||||
....
|
||||
....
|
||||
4
fillit/tests/tetriminos/J2
Normal file
4
fillit/tests/tetriminos/J2
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
##..
|
||||
#...
|
||||
#...
|
||||
....
|
||||
4
fillit/tests/tetriminos/J3
Normal file
4
fillit/tests/tetriminos/J3
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
#...
|
||||
###.
|
||||
....
|
||||
....
|
||||
4
fillit/tests/tetriminos/L
Normal file
4
fillit/tests/tetriminos/L
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
#...
|
||||
#...
|
||||
##..
|
||||
....
|
||||
4
fillit/tests/tetriminos/L1
Normal file
4
fillit/tests/tetriminos/L1
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
..#.
|
||||
###.
|
||||
....
|
||||
....
|
||||
4
fillit/tests/tetriminos/L2
Normal file
4
fillit/tests/tetriminos/L2
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
##..
|
||||
.#..
|
||||
.#..
|
||||
....
|
||||
4
fillit/tests/tetriminos/L3
Normal file
4
fillit/tests/tetriminos/L3
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
###.
|
||||
#...
|
||||
....
|
||||
....
|
||||
4
fillit/tests/tetriminos/O
Normal file
4
fillit/tests/tetriminos/O
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
##..
|
||||
##..
|
||||
....
|
||||
....
|
||||
4
fillit/tests/tetriminos/S
Normal file
4
fillit/tests/tetriminos/S
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
.##.
|
||||
##..
|
||||
....
|
||||
....
|
||||
4
fillit/tests/tetriminos/S1
Normal file
4
fillit/tests/tetriminos/S1
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
#...
|
||||
##..
|
||||
.#..
|
||||
....
|
||||
4
fillit/tests/tetriminos/T
Normal file
4
fillit/tests/tetriminos/T
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
###.
|
||||
.#..
|
||||
....
|
||||
....
|
||||
4
fillit/tests/tetriminos/T1
Normal file
4
fillit/tests/tetriminos/T1
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
#...
|
||||
##..
|
||||
#...
|
||||
....
|
||||
4
fillit/tests/tetriminos/T2
Normal file
4
fillit/tests/tetriminos/T2
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
.#..
|
||||
###.
|
||||
....
|
||||
....
|
||||
4
fillit/tests/tetriminos/T3
Normal file
4
fillit/tests/tetriminos/T3
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
.#..
|
||||
##..
|
||||
.#..
|
||||
....
|
||||
4
fillit/tests/tetriminos/Z
Normal file
4
fillit/tests/tetriminos/Z
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
##..
|
||||
.##.
|
||||
....
|
||||
....
|
||||
4
fillit/tests/tetriminos/Z1
Normal file
4
fillit/tests/tetriminos/Z1
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
.#..
|
||||
##..
|
||||
#...
|
||||
....
|
||||
74
fillit/tests/ttmnfile
Normal file
74
fillit/tests/ttmnfile
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
#...
|
||||
###.
|
||||
....
|
||||
....
|
||||
|
||||
#...
|
||||
#...
|
||||
##..
|
||||
....
|
||||
|
||||
.#..
|
||||
.#..
|
||||
##..
|
||||
....
|
||||
|
||||
##..
|
||||
.#..
|
||||
.#..
|
||||
....
|
||||
|
||||
##..
|
||||
##..
|
||||
....
|
||||
....
|
||||
|
||||
.##.
|
||||
##..
|
||||
....
|
||||
....
|
||||
|
||||
.#..
|
||||
###.
|
||||
....
|
||||
....
|
||||
|
||||
#...
|
||||
###.
|
||||
....
|
||||
....
|
||||
|
||||
..#.
|
||||
###.
|
||||
....
|
||||
....
|
||||
|
||||
#...
|
||||
##..
|
||||
.#..
|
||||
....
|
||||
|
||||
###.
|
||||
#...
|
||||
....
|
||||
....
|
||||
|
||||
##..
|
||||
.#..
|
||||
.#..
|
||||
....
|
||||
|
||||
.#..
|
||||
.#..
|
||||
##..
|
||||
....
|
||||
|
||||
##..
|
||||
.##.
|
||||
....
|
||||
....
|
||||
|
||||
##..
|
||||
.##.
|
||||
....
|
||||
....
|
||||
0
fillit/ttmnfile
Normal file
0
fillit/ttmnfile
Normal file
Loading…
Reference in a new issue