python script for testing randoms sets

This commit is contained in:
Jack Halford 2016-09-16 03:08:52 +02:00
parent 105404cbed
commit fa7ef964d1
58 changed files with 270 additions and 148 deletions

20
fillit/.tags Normal file
View 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)$/

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -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
View file

@ -0,0 +1,2 @@
./random_tetriminos.py $1
time ../fillit ttmnfile

View 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)

View file

@ -0,0 +1,4 @@
#...
#...
#...
#...

View file

@ -0,0 +1,4 @@
####
....
....
....

View file

@ -0,0 +1,4 @@
.#..
.#..
##..
....

View file

@ -0,0 +1,4 @@
###.
..#.
....
....

View file

@ -0,0 +1,4 @@
##..
#...
#...
....

View file

@ -0,0 +1,4 @@
#...
###.
....
....

View file

@ -0,0 +1,4 @@
#...
#...
##..
....

View file

@ -0,0 +1,4 @@
..#.
###.
....
....

View file

@ -0,0 +1,4 @@
##..
.#..
.#..
....

View file

@ -0,0 +1,4 @@
###.
#...
....
....

View file

@ -0,0 +1,4 @@
##..
##..
....
....

View file

@ -0,0 +1,4 @@
.##.
##..
....
....

View file

@ -0,0 +1,4 @@
#...
##..
.#..
....

View file

@ -0,0 +1,4 @@
###.
.#..
....
....

View file

@ -0,0 +1,4 @@
#...
##..
#...
....

View file

@ -0,0 +1,4 @@
.#..
###.
....
....

View file

@ -0,0 +1,4 @@
.#..
##..
.#..
....

View file

@ -0,0 +1,4 @@
##..
.##.
....
....

View file

@ -0,0 +1,4 @@
.#..
##..
#...
....

74
fillit/tests/ttmnfile Normal file
View file

@ -0,0 +1,74 @@
#...
###.
....
....
#...
#...
##..
....
.#..
.#..
##..
....
##..
.#..
.#..
....
##..
##..
....
....
.##.
##..
....
....
.#..
###.
....
....
#...
###.
....
....
..#.
###.
....
....
#...
##..
.#..
....
###.
#...
....
....
##..
.#..
.#..
....
.#..
.#..
##..
....
##..
.##.
....
....
##..
.##.
....
....

0
fillit/ttmnfile Normal file
View file