diff --git a/fillit/.tags b/fillit/.tags new file mode 100644 index 00000000..1d1c0ede --- /dev/null +++ b/fillit/.tags @@ -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)$/ diff --git a/fillit/Makefile b/fillit/Makefile index 6f7aa05c..26064048 100644 --- a/fillit/Makefile +++ b/fillit/Makefile @@ -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) diff --git a/fillit/includes/fillit.h b/fillit/includes/fillit.h index 8560cbdf..9f896c22 100644 --- a/fillit/includes/fillit.h +++ b/fillit/includes/fillit.h @@ -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); diff --git a/fillit/src/fillit_check_waste.c b/fillit/src/fillit_check_waste.c index 1005a797..eeeaa3dc 100644 --- a/fillit/src/fillit_check_waste.c +++ b/fillit/src/fillit_check_waste.c @@ -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) diff --git a/fillit/src/parser.c b/fillit/src/fillit_parser.c similarity index 80% rename from fillit/src/parser.c rename to fillit/src/fillit_parser.c index 371b6af7..21ffbe2e 100644 --- a/fillit/src/parser.c +++ b/fillit/src/fillit_parser.c @@ -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; } diff --git a/fillit/src/flood_fill.c b/fillit/src/flood_fill.c deleted file mode 100644 index b9990346..00000000 --- a/fillit/src/flood_fill.c +++ /dev/null @@ -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); -} diff --git a/fillit/src/floodfill.c b/fillit/src/floodfill.c new file mode 100644 index 00000000..3728bc6b --- /dev/null +++ b/fillit/src/floodfill.c @@ -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); +} diff --git a/fillit/src/legacy.c b/fillit/src/legacy.c deleted file mode 100644 index 9ac49f6d..00000000 --- a/fillit/src/legacy.c +++ /dev/null @@ -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)); */ -/* } */ diff --git a/fillit/src/board_lib.c b/fillit/src/lib_board.c similarity index 100% rename from fillit/src/board_lib.c rename to fillit/src/lib_board.c diff --git a/fillit/src/ttmn_lib.c b/fillit/src/lib_ttmn.c similarity index 100% rename from fillit/src/ttmn_lib.c rename to fillit/src/lib_ttmn.c diff --git a/fillit/examples/ok_12_blocks b/fillit/tests/examples/12_hard similarity index 100% rename from fillit/examples/ok_12_blocks rename to fillit/tests/examples/12_hard diff --git a/fillit/examples/bad_ttmn_00 b/fillit/tests/examples/bad_ttmn_00 similarity index 100% rename from fillit/examples/bad_ttmn_00 rename to fillit/tests/examples/bad_ttmn_00 diff --git a/fillit/examples/bad_ttmn_01 b/fillit/tests/examples/bad_ttmn_01 similarity index 100% rename from fillit/examples/bad_ttmn_01 rename to fillit/tests/examples/bad_ttmn_01 diff --git a/fillit/examples/bad_ttmn_02 b/fillit/tests/examples/bad_ttmn_02 similarity index 100% rename from fillit/examples/bad_ttmn_02 rename to fillit/tests/examples/bad_ttmn_02 diff --git a/fillit/examples/bad_ttmn_03 b/fillit/tests/examples/bad_ttmn_03 similarity index 100% rename from fillit/examples/bad_ttmn_03 rename to fillit/tests/examples/bad_ttmn_03 diff --git a/fillit/examples/bad_ttmn_04 b/fillit/tests/examples/bad_ttmn_04 similarity index 100% rename from fillit/examples/bad_ttmn_04 rename to fillit/tests/examples/bad_ttmn_04 diff --git a/fillit/examples/bad_ttmn_05 b/fillit/tests/examples/bad_ttmn_05 similarity index 100% rename from fillit/examples/bad_ttmn_05 rename to fillit/tests/examples/bad_ttmn_05 diff --git a/fillit/examples/bad_ttmn_06 b/fillit/tests/examples/bad_ttmn_06 similarity index 100% rename from fillit/examples/bad_ttmn_06 rename to fillit/tests/examples/bad_ttmn_06 diff --git a/fillit/examples/bad_ttmn_07 b/fillit/tests/examples/bad_ttmn_07 similarity index 100% rename from fillit/examples/bad_ttmn_07 rename to fillit/tests/examples/bad_ttmn_07 diff --git a/fillit/examples/bad_ttmn_08 b/fillit/tests/examples/bad_ttmn_08 similarity index 100% rename from fillit/examples/bad_ttmn_08 rename to fillit/tests/examples/bad_ttmn_08 diff --git a/fillit/examples/good_ttmn_00 b/fillit/tests/examples/good_ttmn_00 similarity index 100% rename from fillit/examples/good_ttmn_00 rename to fillit/tests/examples/good_ttmn_00 diff --git a/fillit/examples/good_ttmn_01 b/fillit/tests/examples/good_ttmn_01 similarity index 100% rename from fillit/examples/good_ttmn_01 rename to fillit/tests/examples/good_ttmn_01 diff --git a/fillit/examples/good_ttmn_02 b/fillit/tests/examples/good_ttmn_02 similarity index 100% rename from fillit/examples/good_ttmn_02 rename to fillit/tests/examples/good_ttmn_02 diff --git a/fillit/examples/good_ttmn_03 b/fillit/tests/examples/good_ttmn_03 similarity index 100% rename from fillit/examples/good_ttmn_03 rename to fillit/tests/examples/good_ttmn_03 diff --git a/fillit/examples/ko_00 b/fillit/tests/examples/ko_00 similarity index 100% rename from fillit/examples/ko_00 rename to fillit/tests/examples/ko_00 diff --git a/fillit/examples/ko_01 b/fillit/tests/examples/ko_01 similarity index 100% rename from fillit/examples/ko_01 rename to fillit/tests/examples/ko_01 diff --git a/fillit/examples/ok_00 b/fillit/tests/examples/ok_00 similarity index 100% rename from fillit/examples/ok_00 rename to fillit/tests/examples/ok_00 diff --git a/fillit/examples/ok_01 b/fillit/tests/examples/ok_01 similarity index 100% rename from fillit/examples/ok_01 rename to fillit/tests/examples/ok_01 diff --git a/fillit/examples/ok_02 b/fillit/tests/examples/ok_02 similarity index 100% rename from fillit/examples/ok_02 rename to fillit/tests/examples/ok_02 diff --git a/fillit/examples/ok_03 b/fillit/tests/examples/ok_03 similarity index 100% rename from fillit/examples/ok_03 rename to fillit/tests/examples/ok_03 diff --git a/fillit/examples/ok_09_block b/fillit/tests/examples/ok_09_block similarity index 100% rename from fillit/examples/ok_09_block rename to fillit/tests/examples/ok_09_block diff --git a/fillit/examples/ok_11_blocks b/fillit/tests/examples/ok_11_blocks similarity index 100% rename from fillit/examples/ok_11_blocks rename to fillit/tests/examples/ok_11_blocks diff --git a/fillit/examples/ok_13_blocks b/fillit/tests/examples/ok_13_blocks similarity index 100% rename from fillit/examples/ok_13_blocks rename to fillit/tests/examples/ok_13_blocks diff --git a/fillit/examples/ok_25_blocks b/fillit/tests/examples/ok_25_blocks similarity index 100% rename from fillit/examples/ok_25_blocks rename to fillit/tests/examples/ok_25_blocks diff --git a/fillit/examples/ok_26_blocks b/fillit/tests/examples/ok_26_blocks similarity index 100% rename from fillit/examples/ok_26_blocks rename to fillit/tests/examples/ok_26_blocks diff --git a/fillit/tests/fillit_test.sh b/fillit/tests/fillit_test.sh new file mode 100755 index 00000000..e3cddf8d --- /dev/null +++ b/fillit/tests/fillit_test.sh @@ -0,0 +1,2 @@ +./random_tetriminos.py $1 +time ../fillit ttmnfile diff --git a/fillit/tests/random_tetriminos.py b/fillit/tests/random_tetriminos.py new file mode 100755 index 00000000..a72e3759 --- /dev/null +++ b/fillit/tests/random_tetriminos.py @@ -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) diff --git a/fillit/tests/tetriminos/I b/fillit/tests/tetriminos/I new file mode 100644 index 00000000..caa819e1 --- /dev/null +++ b/fillit/tests/tetriminos/I @@ -0,0 +1,4 @@ +#... +#... +#... +#... diff --git a/fillit/tests/tetriminos/I2 b/fillit/tests/tetriminos/I2 new file mode 100644 index 00000000..53ba7c36 --- /dev/null +++ b/fillit/tests/tetriminos/I2 @@ -0,0 +1,4 @@ +#### +.... +.... +.... diff --git a/fillit/tests/tetriminos/J b/fillit/tests/tetriminos/J new file mode 100644 index 00000000..5312f7aa --- /dev/null +++ b/fillit/tests/tetriminos/J @@ -0,0 +1,4 @@ +.#.. +.#.. +##.. +.... diff --git a/fillit/tests/tetriminos/J1 b/fillit/tests/tetriminos/J1 new file mode 100644 index 00000000..ad5b014f --- /dev/null +++ b/fillit/tests/tetriminos/J1 @@ -0,0 +1,4 @@ +###. +..#. +.... +.... diff --git a/fillit/tests/tetriminos/J2 b/fillit/tests/tetriminos/J2 new file mode 100644 index 00000000..62a57892 --- /dev/null +++ b/fillit/tests/tetriminos/J2 @@ -0,0 +1,4 @@ +##.. +#... +#... +.... diff --git a/fillit/tests/tetriminos/J3 b/fillit/tests/tetriminos/J3 new file mode 100644 index 00000000..0e8a3bd9 --- /dev/null +++ b/fillit/tests/tetriminos/J3 @@ -0,0 +1,4 @@ +#... +###. +.... +.... diff --git a/fillit/tests/tetriminos/L b/fillit/tests/tetriminos/L new file mode 100644 index 00000000..501ac2f2 --- /dev/null +++ b/fillit/tests/tetriminos/L @@ -0,0 +1,4 @@ +#... +#... +##.. +.... diff --git a/fillit/tests/tetriminos/L1 b/fillit/tests/tetriminos/L1 new file mode 100644 index 00000000..2f3b939d --- /dev/null +++ b/fillit/tests/tetriminos/L1 @@ -0,0 +1,4 @@ +..#. +###. +.... +.... diff --git a/fillit/tests/tetriminos/L2 b/fillit/tests/tetriminos/L2 new file mode 100644 index 00000000..8eb38d7f --- /dev/null +++ b/fillit/tests/tetriminos/L2 @@ -0,0 +1,4 @@ +##.. +.#.. +.#.. +.... diff --git a/fillit/tests/tetriminos/L3 b/fillit/tests/tetriminos/L3 new file mode 100644 index 00000000..46e8c2cb --- /dev/null +++ b/fillit/tests/tetriminos/L3 @@ -0,0 +1,4 @@ +###. +#... +.... +.... diff --git a/fillit/tests/tetriminos/O b/fillit/tests/tetriminos/O new file mode 100644 index 00000000..6621462e --- /dev/null +++ b/fillit/tests/tetriminos/O @@ -0,0 +1,4 @@ +##.. +##.. +.... +.... diff --git a/fillit/tests/tetriminos/S b/fillit/tests/tetriminos/S new file mode 100644 index 00000000..0d3244d5 --- /dev/null +++ b/fillit/tests/tetriminos/S @@ -0,0 +1,4 @@ +.##. +##.. +.... +.... diff --git a/fillit/tests/tetriminos/S1 b/fillit/tests/tetriminos/S1 new file mode 100644 index 00000000..d0015489 --- /dev/null +++ b/fillit/tests/tetriminos/S1 @@ -0,0 +1,4 @@ +#... +##.. +.#.. +.... diff --git a/fillit/tests/tetriminos/T b/fillit/tests/tetriminos/T new file mode 100644 index 00000000..59b033c7 --- /dev/null +++ b/fillit/tests/tetriminos/T @@ -0,0 +1,4 @@ +###. +.#.. +.... +.... diff --git a/fillit/tests/tetriminos/T1 b/fillit/tests/tetriminos/T1 new file mode 100644 index 00000000..404ff0e9 --- /dev/null +++ b/fillit/tests/tetriminos/T1 @@ -0,0 +1,4 @@ +#... +##.. +#... +.... diff --git a/fillit/tests/tetriminos/T2 b/fillit/tests/tetriminos/T2 new file mode 100644 index 00000000..9453c20b --- /dev/null +++ b/fillit/tests/tetriminos/T2 @@ -0,0 +1,4 @@ +.#.. +###. +.... +.... diff --git a/fillit/tests/tetriminos/T3 b/fillit/tests/tetriminos/T3 new file mode 100644 index 00000000..29df265c --- /dev/null +++ b/fillit/tests/tetriminos/T3 @@ -0,0 +1,4 @@ +.#.. +##.. +.#.. +.... diff --git a/fillit/tests/tetriminos/Z b/fillit/tests/tetriminos/Z new file mode 100644 index 00000000..f355218f --- /dev/null +++ b/fillit/tests/tetriminos/Z @@ -0,0 +1,4 @@ +##.. +.##. +.... +.... diff --git a/fillit/tests/tetriminos/Z1 b/fillit/tests/tetriminos/Z1 new file mode 100644 index 00000000..e7f9087e --- /dev/null +++ b/fillit/tests/tetriminos/Z1 @@ -0,0 +1,4 @@ +.#.. +##.. +#... +.... diff --git a/fillit/tests/ttmnfile b/fillit/tests/ttmnfile new file mode 100644 index 00000000..6a503f47 --- /dev/null +++ b/fillit/tests/ttmnfile @@ -0,0 +1,74 @@ +#... +###. +.... +.... + +#... +#... +##.. +.... + +.#.. +.#.. +##.. +.... + +##.. +.#.. +.#.. +.... + +##.. +##.. +.... +.... + +.##. +##.. +.... +.... + +.#.. +###. +.... +.... + +#... +###. +.... +.... + +..#. +###. +.... +.... + +#... +##.. +.#.. +.... + +###. +#... +.... +.... + +##.. +.#.. +.#.. +.... + +.#.. +.#.. +##.. +.... + +##.. +.##. +.... +.... + +##.. +.##. +.... +.... diff --git a/fillit/ttmnfile b/fillit/ttmnfile new file mode 100644 index 00000000..e69de29b