154 Commits
Author SHA1 Message Date
Hugo LAMY 5bdc944da9 dernier leaks disparu avec nouvelle fonction dans read_file 2019-06-01 15:13:08 +02:00
Hugo LAMY f29d9d8e60 a la norme et flag e enleve la limite de 26 tetri 2019-06-01 14:49:30 +02:00
Hugo LAMY f79d3812d0 il ne reste qu'un seul leaks 2019-06-01 13:57:39 +02:00
Hugo LAMY 56ca478503 version sans erreurs de valgrind autre que trois leaks 2019-06-01 13:47:21 +02:00
Hugo LAMY 04a4fef38b les sames ne s'impriment pas avec juste le flag p mais seulement le o en plus 2019-05-29 16:36:04 +02:00
Hugo LAMY e7e944f1ac derniere erreur de valgrind resolu mais a tester sur les mauvais tetri 2019-05-29 15:53:08 +02:00
Hugo LAMY 819a14407d derniere erreur de valgrind resolu mais a tester sur les mauvais tetri 2019-05-29 15:51:41 +02:00
Manzovince 2bc1f50b46 README edit 2019-05-29 15:44:36 +02:00
Manzovince 7a07d84d6c README and few little corrections on code readability 2019-05-29 15:42:31 +02:00
Manzovince 0236573b6d all debug comments deleted for norm 2019-05-29 13:57:37 +02:00
Manzovince fb1a41e94f correction of handle_errors.c (1 error still not solved)
Quand on a une nl après le dernier tetrimino du fichier input, on devrait sortir une erreur au lieu de résoudre le fillit
2019-05-29 13:52:41 +02:00
Manzovince 6ca294272f .dSYM deleted 2019-05-29 13:37:34 +02:00
Manzovince bfd23d6211 gitignore edit for libft symlink 2019-05-29 13:37:13 +02:00
Manzovince fa5f2e7f00 new version of fillit.h with details 2019-05-29 13:36:40 +02:00
Manzovince 246906a490 all test files grouped in folder 2019-05-29 13:15:53 +02:00
Manzovince eea8110abd correction on main.c (working for me now) 2019-05-29 13:12:31 +02:00
Manzovince 79a5fb188c correction on fillit.h 2019-05-29 13:10:21 +02:00
Manzovince 59d2be2756 Merge remote-tracking branch 'origin/master' 2019-05-29 11:35:00 +02:00
Hugo LAMY c82ba9bccb presque toutes les erreures de vlgrind resolues, sauf une derniere dans error_proxy 2019-05-28 19:36:21 +02:00
Hugo LAMY ed06e3eb8e corrige deux bad read or write due au depassement de la taille de map, en ajoutant total_num dans la struct 2019-05-28 17:35:34 +02:00
Manzovince 2dfe395a9b Merge remote-tracking branch 'origin/master' 2019-05-28 13:23:15 +02:00
Hugo LAMY 77656ba113 sans l'opion o opti les sames ne s'affichent pas 2019-05-28 13:05:14 +02:00
Hugo LAMY a9e62833bb flags organises 2019-05-27 19:53:27 +02:00
Hugo LAMY 6b9936b0cd en cours de reorganisation des fichiers pour gerer les flags 2019-05-24 18:05:18 +02:00
Hugo LAMY 1a16e305d3 a une ligne pret le programme fonctionne tout le temps aaaarg 2019-05-21 15:31:04 +02:00
Hugo LAMY 1811268725 fillit ultrrrrrrra rapide ! pas encore a la norme 2019-05-20 15:58:45 +02:00
Manzovince 184981a28d Merge remote-tracking branch 'origin/master' 2019-05-20 15:52:43 +02:00
Hugo LAMY c2e87b7303 opti fonctionne super bien et super mal 2019-05-20 15:42:30 +02:00
Manzovince 2dbd5b7320 Auto stash before merge of "master" and "origin/master" + CLEANING 2019-05-20 13:53:01 +02:00
Hugo LAMY 0912e52a7a clean les comments 2019-05-18 15:34:47 +02:00
Hugo LAMY f4b1da414c list s'imprime dans main 2019-05-17 18:43:33 +02:00
Hugo LAMY 94c0e5d57f search_map a la norme 2019-05-17 17:13:31 +02:00
Hugo LAMY e5aea30023 backtracking fonctionne avec list->position directement 2019-05-16 16:51:09 +02:00
Hugo LAMY 6705bf9133 version clean sans modulos et divisions pour find_place 2019-05-15 18:05:37 +02:00
Hugo LAMY 2e53b04a9a optimisation en virant modulos et divisions semble marcher, gagne 10s 2019-05-15 17:47:32 +02:00
Manzovince a639da4ac5 New test opti, strange behavior 2019-05-13 21:48:00 +02:00
Manzovince b9bdc14db7 New samples added + First Try Optimisation 2019-05-13 18:26:39 +02:00
Hugo LAMY af527c6316 fonctionne mais sans optimisation 2019-05-10 20:46:02 +02:00
Hugo LAMY aa8ec6fe66 tentative echouee d'oter les modulo et division dans le fit_in_place 2019-05-10 20:40:16 +02:00
Hugo LAMY 213eff3255 rate pour l'opti qui ralenti mais find_place divisee avec fit_in_place 2019-05-10 17:00:55 +02:00
Hugo LAMY 67cb5dea38 en cours decriture de check_others 2019-05-09 18:04:08 +02:00
Manzovince 8a62783a6b WORKING VERSION FOR 42FileChecker test. All test passed ! 2019-05-09 12:46:59 +02:00
Manzovince 1c6e41e8bf 4 new samples for testing 2019-05-09 12:45:57 +02:00
Hugo LAMY 3977a73682 resolu les deux problemes de add_remove et find_place mais bcp bcp plus lent 2019-05-08 18:45:21 +02:00
Hugo LAMY 2738a5e24b plus de decalage a gauche mais bcp plus lent 2019-05-08 18:43:34 +02:00
Hugo LAMY 1ff7abafd6 rajout d'un if dans add_remove pour resoudre la superposition des ints 2019-05-08 17:55:38 +02:00
Manzovince 4a7ad39626 new samples + map_color modified 2019-05-08 15:42:49 +02:00
Manzovince fe191054c9 New handle_errors and cleaner print_map_with_colors 2019-05-08 08:10:09 +02:00
Hugo LAMY d057ef941b sans les codes de debug 2019-05-06 23:29:04 +02:00
Hugo LAMY 23c9e19ea6 map resolue mais peut-etre pas la meilleur solution 2019-05-06 23:24:24 +02:00
Hugo LAMY 74ef38e23a a priori le find place ne deborde plus a droite 2019-05-06 20:26:27 +02:00
Hugo LAMY 60d1d87b76 add_remove decidement.. semble fonctionner mieux mais avec deux modulo a chaque boucles 2019-05-06 20:04:27 +02:00
Hugo LAMY e784b96efe imprime les lettres en couleur lors du debug 2019-05-06 16:35:16 +02:00
Hugo LAMY b85454473d imprime les lettres pendant la recursive pour debug 2019-05-06 16:28:23 +02:00
Manzovince 6558b77ef2 Edit print_color for every tetri working 2019-05-04 19:16:38 +02:00
Manzovince 7872fac59e edit in fillit.h and print.c for color map feature 2019-05-04 19:10:33 +02:00
Manzovince c1850f3fd6 Adding new ft for printing map with colors, WORKING 2019-05-04 19:09:25 +02:00
Manzovince fdb4c53787 map_hard ADDED 2019-05-03 19:27:22 +02:00
Manzovince 1cf791746c Bonus: Best Error Handler (more details about the error) 2019-05-03 19:13:48 +02:00
Manzovince 8d9b314781 README edit 2019-05-03 18:45:14 +02:00
Manzovince 7d0dab1e1e Auto stash before merge of "master" and "origin/master" 2019-05-03 18:44:51 +02:00
Hugo LAMY 60b970e901 affiche correctement la map avec les lettres mais la map est fausse donc erreur dans backtracking 2019-05-03 16:11:15 +02:00
Hugo LAMY 671585098f fonction print_final_map fonctionne mais backtracking bug.. 2019-05-03 16:06:11 +02:00
Hugo LAMY bd38cd52ed letter ajoute a la struct 2019-05-03 14:25:05 +02:00
Hugo LAMY 192c2ba0ae ca semble fonctionner et c tres rapide 2019-05-02 16:45:28 +02:00
Hugo LAMY 8a49caad94 find place ne depasse plus les bords de droite et du bas 2019-05-02 00:13:11 +02:00
Hugo LAMY 05e265b3b1 la position des tetri dans la recursive est mtn garde en memoire 2019-05-01 23:46:43 +02:00
Hugo LAMY 929e070fb0 nettoyage et mise a la norme de add_remove 2019-05-01 23:22:14 +02:00
Hugo LAMY f035f37607 this time add_remove really fucking works 2019-05-01 23:13:24 +02:00
Hugo LAMY c8570a26f1 add_remove fonctionne vraiment cette fois 2019-05-01 22:50:46 +02:00
Manzovince 37b565f3da Ajout d'une nouvelle méthode pour les tetris et la map 2019-05-01 20:08:13 +02:00
Manzovince 2291152158 new samples 2019-05-01 20:05:44 +02:00
Hugo LAMY 527b621526 merging the clean branch with recursive working badly 2019-05-01 14:25:01 +02:00
Hugo LAMY 0e6e4a3caa merge conflict ave fillit 2019-05-01 14:23:53 +02:00
Hugo LAMY c118eac450 debug de la recursive et add_remove qui foire certains bits 2019-05-01 14:22:18 +02:00
Hugo LAMY 646d611381 add_remove fonctionne 2019-05-01 13:49:19 +02:00
Hugo LAMY c40da94786 add_remove fonctionne pour adding 2019-05-01 12:34:58 +02:00
Hugo LAMY c50f971f50 continue de tenter d'ecrire le add_remove mask 2019-04-30 20:59:01 +02:00
Manzovince 7b26fc7feb adding a print_tetri function in print.c for testing 2019-04-30 19:51:28 +02:00
Manzovince 5dd491ed52 few little edits + show wrong tetri feature 2019-04-30 15:32:47 +02:00
Hugo LAMY 9639bd80e3 correction lien libft et def BUFFSIZE dans fillit.h 2019-04-30 14:25:32 +02:00
Hugo LAMY 4d4ec6d8e0 merge avec nouveau file search_map qui est la recursive et reorganisation du makefile 2019-04-30 14:21:41 +02:00
Hugo LAMY 7e2ef9e878 creer symlink de libft 2019-04-30 14:11:56 +02:00
Hugo LAMY ef78667474 renomme fichiers en prevision de merge 2019-04-30 14:10:37 +02:00
Hugo LAMY 2363e42167 test add_remove qui ne fonctionne pas encore 2019-04-30 14:08:30 +02:00
Hugo LAMY ed1cde6e22 modified test_right in test_big_tetri 2019-04-30 13:32:27 +02:00
Hugo LAMY c7f7ac205c ajout du fichier print qui contient les fonctinos de print de bits 2019-04-30 13:26:10 +02:00
Hugo LAMY 0eef1b4825 libft en symlink 2019-04-30 13:20:36 +02:00
Hugo LAMY 8967fcb464 some changes to search map 2019-04-30 12:50:20 +02:00
Hugo LAMY 817528c943 makefile delete tous les fichiers .o et .swp et du genre 2019-04-28 16:49:17 +02:00
Hugo LAMY 656973ae52 ebut implementation de la recursive 2019-04-28 16:24:09 +02:00
Hugo LAMY 1dd8a9e8c8 find_place renvois la position du tetri dans la map 2019-04-28 02:24:27 +02:00
Hugo LAMY 003d2b3cbb recherche de la position du tetri dans la map fonctionne 2019-04-28 01:09:43 +02:00
Manzovince 4f212d598a main.c print_error modified 2019-04-27 16:43:43 +02:00
Manzovince 12fff81bde README edit 2019-04-27 16:38:28 +02:00
Manzovince faae791431 2 new samples for testing feature on check_tetri_errors 2019-04-27 16:33:46 +02:00
Manzovince 3e20319691 Few edits for readability, cleaning + README edit 2019-04-27 15:16:34 +02:00
Manzovince fa281b58ea TEST OK - WORKING - Nice job Hugo ;) ! 2019-04-27 14:58:30 +02:00
Manzovince 16f98e1a1d .h, main, Makefile and add_to_list edit for Testing 2019-04-27 14:55:50 +02:00
Manzovince fc0530a257 test 2019-04-27 14:41:12 +02:00
Hugo LAMY 48576180a2 structure modifiee avec tailles et parsing fonctionne 2019-04-27 02:05:22 +02:00
Hugo LAMY b5ad1209f4 add_to_list fonctionne pleinement en binaire et creer un vrai tetri reduit et ses dimensions 2019-04-27 02:01:54 +02:00
Hugo LAMY 213cf40eb4 tous les champs de t_fillist remplis 2019-04-25 18:46:52 +02:00
Hugo LAMY c83ac7599d tous les champs de list remplis 2019-04-25 18:45:21 +02:00
Hugo LAMY e1f4ebee2a la recherche du tetri qui rentre dans la map fonctionne avec plusieurs tailles 2019-04-25 16:29:17 +02:00
Hugo LAMY 4007f0d707 la recherche du tetri qui rentre dans la map fonctionne avec toutes les tailles de tetri 2019-04-25 16:25:26 +02:00
Hugo LAMY 51205f5c56 test_big_tetri.c mis a jour ainsi que parse_input avec le add_to_list integre 2019-04-25 15:11:26 +02:00
Hugo LAMY ac29587a10 nettoye parse_input avec add_to_list a l'interieur 2019-04-25 15:00:32 +02:00
Hugo LAMY 23ec23f8bc boucle cherche tetra dans map et trouve quand ca fit 2019-04-25 14:46:46 +02:00
Hugo LAMY 33f74f31fc ajout de test_big_tetri.c et merge conflict 2019-04-25 13:06:34 +02:00
Hugo LAMY c70803b01b ajout de test_big_tetri.c 2019-04-25 13:01:47 +02:00
Hugo LAMY 2364b6322a fonction pour verifier si l'emplacement est libre en cours de construction 2019-04-25 07:06:37 +02:00
Hugo LAMY dabdd7dbef print_map fonctionne avec deux versions 2019-04-25 05:32:29 +02:00
Manzovince 2bac429596 bug resolved + few edits 2019-04-24 21:50:51 +02:00
Hugo LAMY 8da1c5bec6 rangement des fichiers tests et makefile 2019-04-24 15:47:42 +02:00
Hugo LAMY 8d9afa579d reorganise parse_input 2019-04-24 13:53:33 +02:00
Hugo LAMY ef84335727 corrige le fill_list pour virer les zeros de debut de tetraminos 2019-04-24 13:41:42 +02:00
Hugo LAMY c2101d3af9 conflict solved 2019-04-24 12:16:01 +02:00
Hugo LAMY 7bf76e5d41 some changes 2019-04-24 12:15:06 +02:00
Manzovince 39a59058ba Few edit + BUG on bit convertion for tetri starting at top left corner 2019-04-23 21:44:11 +02:00
Manzovince 2c9340c645 Merge remote-tracking branch 'origin/master' 2019-04-23 21:20:19 +02:00
Manzovince 0aa3026f65 Few edits + BUG found on tmp (add_to_list) with some tetriminoes 2019-04-23 21:20:07 +02:00
Manzovince f4492e2735 Few edits + BUG found on add_to_list with some tetriminoes 2019-04-23 21:15:12 +02:00
Manzovince 21c10a5787 editing few files for readability 2019-04-23 16:17:13 +02:00
Manzovince acf5aed90e gitignore, makefile, .h edited 2019-04-23 15:34:21 +02:00
Manzovince 9a463f3358 Merge remote-tracking branch 'origin/master' 2019-04-23 15:25:52 +02:00
Manzovince 952cc5bf22 create_square comments modified 2019-04-23 15:25:40 +02:00
Manzovince d0de4dcb47 comments modified 2019-04-23 15:25:23 +02:00
Manzovince b2d291603c create_square comment modified 2019-04-23 15:21:21 +02:00
Manzovince 6d093e66cc handle_errors function name modified 2019-04-23 15:19:53 +02:00
Manzovince 02159dc587 get_smallest_square edited + initialize map added (WIP) 2019-04-23 15:19:30 +02:00
Manzovince 704a47684d files cleaned (WORKING) 2019-04-22 17:12:36 +02:00
Manzovince 3f6f6f249a little mod (makefile + read_file) 2019-04-22 16:27:46 +02:00
Manzovince b5f8e37699 Auto stash before merge of "master" and "origin/master" 2019-04-22 15:14:20 +02:00
Hugo LAMY 88b126d3f1 super mask 2019-04-22 14:40:39 +02:00
Hugo LAMY 64464522f0 test_big_map sans utiliser un compteur j pour le tableau d'int 2019-04-22 13:08:58 +02:00
Hugo LAMY fc69b0242c fonction test_big_map fonctionne correctement 2019-04-21 13:34:51 +02:00
Hugo LAMY 41f5d6b202 ajout de test_big_map pour faire tourner une grande map sur une petite 2019-04-20 21:01:49 +02:00
Hugo LAMY bcfe54e614 ajout de test pour faire tourner une grande map sur une petite 2019-04-20 21:00:29 +02:00
Manzovince 1422c8e046 bug resolved 2019-04-19 21:26:02 +02:00
Manzovince 61cab1af7f Merge remote-tracking branch 'origin/master' 2019-04-19 21:20:29 +02:00
Hugo LAMY 730964a817 modifie add_to_list pour fonctionner avec du binaire 2019-04-19 15:34:05 +02:00
Manzovince cfa772677c tetri_to_bit not working but better ! 2019-04-18 16:10:35 +02:00
Manzovince 729853cea0 New function convert tetri to bits ! BUT NOT WORKING :( 2019-04-18 13:09:11 +02:00
Manzovince 15bbf591e8 Makefile cleaned (ft instead of *.c) 2019-04-18 13:08:44 +02:00
Manzovince 851622dc93 print_test ft deleted (not used anymore) 2019-04-18 11:47:42 +02:00
Hugo LAMY 041aa6c9b5 merging solve conflict 2019-04-18 10:56:55 +02:00
Hugo LAMY 4462517caf merging to push test bits 2019-04-18 10:55:16 +02:00
Manzovince de86161fcd Comments Updated (no change in the code) 2019-04-16 16:42:19 +02:00
Manzovince 7dfe29b224 Makefile cleaned (comments deleted + all aligned) 2019-04-16 16:39:37 +02:00
Manzovince 67ec57fd3d parse_input little edit (printf() deleted) 2019-04-16 16:26:17 +02:00
Hugo LAMY f592c3cede met le dernier element du char** a null dans add_to_list et parse 2019-04-16 16:09:09 +02:00
Hugo LAMY e9d29e6dc1 code qui parse bien les fichiers et gere les erreurs 2019-04-16 15:55:34 +02:00
Hugo LAMY 301d2ba5fb prepare pour merge 2019-04-16 15:35:16 +02:00
103 changed files with 5831 additions and 568 deletions
Binary file not shown.
+12
View File
@@ -5,3 +5,15 @@ objs/
a\.out\.dSYM/
a\.out
*.swo
*.swp
fillit
test_fillit\.c
libft
\.DS_Store
Binary file not shown.
BIN
View File
Binary file not shown.
+34 -27
View File
@@ -6,43 +6,50 @@
# By: vmanzoni <vmanzoni@student.42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# Created: 2019/03/01 13:24:35 by vmanzoni #+# #+# #
# Updated: 2019/04/16 14:05:39 by hulamy ### ########.fr #
# Updated: 2019/05/29 14:03:03 by vmanzoni ### ########.fr #
# #
# **************************************************************************** #
NAME = fillit
# - - - - - - - - - - - - - - - #
# VARIABLES #
# - - - - - - - - - - - - - - - #
OBJ_DIR = ./
HEADER = ./
NAME = fillit
CC = gcc
SRCS = *.c
OBJS = $(SRCS:.c=.o)
LIB = fillit.h
CFLAGS = -I.
CFLAGS += -Wall -Wextra -Werror
CC = gcc
CFLAGS = -Wall -Werror -Wextra
LDFLAGS = -L./libft/
LDLIBS = -lft
RM = rm -rf
SRCS = $(shell find . -depth 1 -type f -not -name '.*' -not -name 'test*' -name '*.c')
all: $(NAME)
TRASH = $(shell find . -depth 1 -name '*.dSYM')
TRASH += $(shell find . -depth 1 -type f -name '*.o')
TRASH += $(shell find . -depth 1 -type f -name '*.swp')
TRASH += $(shell find . -depth 1 -type f -name '*.swo')
TRASH += $(shell find . -depth 1 -type f -name '*.swn')
$(NAME):
make -C libft/
$(CC) $(CFLAGS) -I$(HEADER) -c $(SRCS)
$(CC) -o $(NAME) $(OBJS) -L libft/ -lft
#$(CC) $(CFLAGS) -I$(HEADER) -c $(addprefix $(SRC_DIR), $(SRCS))
#$(CC) $(OBJS) -o $(NAME)
mkdir $(OBJ_DIR)
mv $(OBJS) $(OBJ_DIR)
# - - - - - - - - - - - - - - - #
# RULES #
# - - - - - - - - - - - - - - - #
all: $(NAME)
$(NAME): $(SRCS)
$(CC) $(CFLAGS) $(LDFLAGS) $(LDLIBS) $(SRCS) -o $(NAME)
debug: $(SRCS)
$(CC) -g $(CFLAGS) $(LDFLAGS) $(LDLIBS) $(SRCS) -o $(NAME)
lib:
make -C ./libft/
clean:
make -C libft/ clean
$(RM) $(OBJ_DIR)
/bin/rm -rf $(TRASH)
fclean: clean
make -C libft/ fclean
$(RM) $(NAME)
fclean: clean
/bin/rm -rf $(NAME)
re: fclean all
.PHONY: all clean fclean re
re: fclean all
+13 -9
View File
@@ -1,20 +1,24 @@
# Fillit
**hulamy** and **vmanzoni**
Team: **hulamy** and **vmanzoni**
Le but de ce projet est d’agencer les Tetriminos entre eux pour former le plus petit carré possible, sachant que ce carré peut présenter des trous quand les pièces données ne s’emboîtent pas parfaitement.
## To do
- [x] Check if we have a file
- [x] Read file
- [x] Check if there are errors in file
- At least 1 tetrimino or less than 26
- [x] Check if every tetrimino is valid
- 4 char * 4 lines
- 4 blocks in 1 tetrimino
- No solo block
- [x] Transform file into tetriminos
- [ ] Backtracking for smallest square
- [ ] Transform tetriminos to letters
- [ ] Print result
- [x] Backtracking for smallest square
- [x] Transform tetriminos to letters
- [x] Print result (Can be done with above step)
- [ ] Free everything (NO LEAKS)
- [ ] Optimisation
## BONUS
- [x] Best error handler (more details on why there is an error.)
- [x] Optimisation (skip when tetri with same shape was already tested on map)
- [x] Add colors to tetri when printing result map
- [x] Flag for debbuging (print every step in backtracking)
- [x] Adding flags (and password for blocking more args on moulinette)
-152
View File
@@ -1,152 +0,0 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* add_to_list.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: hulamy <hulamy@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/04/14 15:20:53 by hulamy #+# #+# */
/* Updated: 2019/04/18 01:33:00 by hulamy ### ########.fr */
/* */
/* ************************************************************************** */
#include "fillit.h"
#include <stdio.h>
/*
** Function that fills the char **tetraminos section of the structure
** with the most little rectangle that fit the tetraminos
*/
char **fill_tetraminos(char **square, int *tab)
{
char **result;
int height;
int length;
int i;
int j;
i = 0;
height = tab[2] - tab[0] + 1;
length = tab[3] - tab[1] + 1;
if (!(result = (char**)malloc(sizeof(*result) * (height + 1))))
return (NULL);
while (i < height)
{
if (!(result[i] = (char*)malloc(sizeof(**result) * (length + 1))))
return (NULL);
result[i][length] = '\0';
i++;
}
i = -1;
while (++i < height && (j = -1))
while (++j < length)
result[i][j] = square[tab[0] + i][tab[1] + j];
return (result);
}
/*
** This function calculate the line and columns where the tetraminos
** start and end, by skipping the empty lines
**
** ! it has a little bug so far, i need to fix it
*/
void find_start_and_end(char **square, int **x)
{
int i;
x[0][0] = -1;
x[0][1] = -1;
x[0][2] = 4;
x[0][3] = 4;
i = 4;
while (x[0][0] < 4 && i == 4 && !(i = 0) && square[++(x[0][0])][0] != '#')
while (i < 4 && square[*(x[0])][i] != '#')
i++;
i = 4;
while (x[0][1] < 4 && i == 4 && !(i = 0) && square[0][++(x[0][1])] != '#')
while (i < 4 && square[i][x[0][1]] != '#')
i++;
i = -1;
while (x[0][2] >= 0 && i == -1 && (i = 3) && square[--(x[0][2])][3] != '#')
while (i >= 0 && square[x[0][2]][i] != '#')
i--;
i = -1;
while (x[0][3] >= 0 && i == -1 && (i = 3) && square[3][--(x[0][3])] != '#')
while (i >= 0 && square[i][x[0][3]] != '#')
i--;
}
/*
** this function first call find_start_and_end to find the coordinates
** of start en end of the most little rectangle that fit the tetraminos
**
** it allows it to fill the structure with the size information
** (for instance :
** "##" ".#" ".#"
** is a tatraminos of 2 by 3)
** then it fills also the area information (2 * 3 = 6)
**
** and finally it calls fill_tetraminos to fill the char **tetraminos
*/
int fill_list(char **square, t_fillist *list)
{
int *tab;
tab = (int*)malloc(sizeof(int) * 4);
find_start_and_end(square, &tab);
list->size[0] = tab[3] - tab[1] + 1;
list->size[1] = tab[2] - tab[0] + 1;
list->area = list->size[0] * list->size[1];
list->tetraminos = fill_tetraminos(square, tab);
return (1);
}
/*
** this function first checks if the structure has been created
** if not, it creates the first element, else it adds an element
** and modifies the initial pointer to link to the new first element
**
** then it calls fill_list to fill the data of the structure
*/
int add_to_list(char **square, t_fillist **list)
{
t_fillist *tmp;
if (!(tmp = (t_fillist*)malloc(sizeof(*tmp))))
return (0);
if (!(*list))
tmp->next = NULL;
else
tmp->next = *list;
*list = tmp;
fill_list(square, *list);
return (1);
}
/*
**int main(int ac, char **av)
**{
** static t_fillist *list = NULL; // avant d'appeller add_to_list il faut declarer un pointeur static vers la structure
** int i;
**
** if (ac > 1)
** {
** add_to_list(++av, &list); // l'appel de la fonction se fait avec un carre valide de 4*4 et l'adresse du pointeur vers la liste
** if (ac == 9)
** add_to_list(av += 4, &list);
** while (list && (i = -1))
** {
** while (++i < list->size[1])
** printf("%s\n", list->tetraminos[i]);
** printf("\n");
** list = list->next;
** }
** }
**
** return (0);
**}
*/
+100
View File
@@ -0,0 +1,100 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* bonus.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: hulamy <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/05/24 14:42:46 by hulamy #+# #+# */
/* Updated: 2019/06/01 14:11:32 by hulamy ### ########.fr */
/* */
/* ************************************************************************** */
#include "fillit.h"
/*
** Test optimisation for not testing wrong maps when tetri are identical
*/
int check_tetri_memory(t_fillist *list, int pos)
{
t_fillist *tetri;
unsigned int mask;
tetri = list;
mask = 1 << ((pos % 32) - 1);
if (tetri->same)
{
if (!(tetri->same->memory[pos / 32] & mask))
return (tetri->same->memory[pos / 32] |= mask);
}
else
{
if (!(tetri->memory[pos / 32] & mask))
return (tetri->memory[pos / 32] |= mask);
}
return (0);
}
/*
** Test optimisation for not testing wrong maps when tetri are identical
*/
int compare_tetri(t_fillist *tetri_a, t_fillist *tetri_b)
{
if (tetri_a->tetribit != tetri_b->tetribit)
return (0);
if (tetri_a->width != tetri_b->width)
return (0);
if (tetri_a->height != tetri_b->height)
return (0);
return (1);
}
/*
** Function that free the list->memory each time it's malloc
*/
t_fillist *clean_list_memory(t_fillist *list, t_fillist *tmp)
{
while (tmp)
{
if (tmp->memory)
free(tmp->memory);
tmp = tmp->next;
}
return (list);
}
/*
** Test optimisation for not testing wrong maps when tetri are identical
*/
int check_same_tetri(t_fillist *list, int num)
{
t_fillist *curr_tetri;
t_fillist *next_tetri;
int i;
curr_tetri = clean_list_memory(list, list);
while (curr_tetri != NULL)
{
i = 0;
if (!(curr_tetri->memory =
(unsigned int *)malloc(sizeof(*curr_tetri->memory) * num)))
return (0);
while (i < num)
curr_tetri->memory[i++] = 0;
next_tetri = curr_tetri->next;
while (next_tetri != NULL)
{
if (compare_tetri(curr_tetri, next_tetri))
if (next_tetri->same == NULL)
next_tetri->same = curr_tetri;
next_tetri = next_tetri->next;
}
curr_tetri->total_num = num;
curr_tetri = curr_tetri->next;
}
return (0);
}
+78
View File
@@ -0,0 +1,78 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* f_bonus_print.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: hulamy <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/05/27 13:46:29 by hulamy #+# #+# */
/* Updated: 2019/06/01 15:00:01 by hulamy ### ########.fr */
/* */
/* ************************************************************************** */
#include "fillit.h"
/*
** function that print the given tetris if flag p is present
*/
t_fillist *print_tetri(t_fillist *list)
{
unsigned int print;
t_fillist *tmp;
tmp = list;
if (list->dope[2])
{
while (tmp)
{
check_same_tetri(list, 1);
print = tmp->tetribit;
print <<= 16;
print_sized_map(&print, tmp->width, tmp->height, tmp->letter);
if (tmp->same && list->dope[1])
{
print = tmp->same->tetribit;
print <<= 16;
ft_putstr("same --> ");
ft_put_tetri_color(tmp->same->letter);
ft_putchar('\n');
}
ft_putchar('\n');
tmp = tmp->next;
}
}
return (list);
}
/*
** function that print the map in binary if flag p is present
** it returns anyway the size of the map for main to print it
*/
int print_binary_map(unsigned int *map, int size, int *dope)
{
size--;
if (dope[2])
{
ft_putendl("result in binary :");
print_sized_map(map, size, size, '#');
ft_putchar('\n');
}
free(map);
return (size);
}
/*
** function that print the flags usage
*/
int print_flags_usage(void)
{
ft_putendl("flags usage :");
ft_putendl("d : debug print (print the map during the backtracking)");
ft_putendl("o : optimisation ultra fast but with some errors still");
ft_putendl("p : print the tetri and the map in different formats");
ft_putendl("e : error msgs more precise AND no error for too much tetri\n");
return (0);
}
+136
View File
@@ -0,0 +1,136 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* f_handle_errors.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: vmanzoni <vmanzoni@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/03/01 13:29:05 by vmanzoni #+# #+# */
/* Updated: 2019/06/01 14:49:01 by hulamy ### ########.fr */
/* */
/* ************************************************************************** */
#include "fillit.h"
/*
** Function that display error message *s on fd and exit program
*/
void print_error(char *str)
{
write(1, str, ft_strlen(str));
exit(0);
}
/*
** Function that display error message *s on fd with more informations
*/
void print_error_extended(int error, int *dope)
{
if (!dope[3])
print_error("error\n");
if (error == 1)
print_error("error: File contains char other than '.','#' and '\\n'\n");
if (error == 2)
print_error("error: File contains two tetriminos not"
"separated by a '\\n'\n");
if (error == 3)
print_error("error: File contains more than 2 '\\n' in a row\n");
if (error == 4)
print_error("error: File contains less than 1 tetrimino\n");
if (error == 5)
print_error("error: File contains more than 26 tetriminos\n");
if (error == 6)
print_error("error: Tetrimino has more or less than 4 #\n");
if (error == 7)
print_error("error: Tetrimino # are not all connected\n");
print_error("error\n");
}
/*
** Function to see if there if an error if the file
** - less than 4 lines
** - more than 104 (26 tetri) + 25 (\n) = 129 lines
** - two \n in a row
*/
void check_file_errors(char *file, int *dope)
{
int i;
int line_nbr;
i = 0;
line_nbr = 0;
while (file[i])
{
if (file[i] != '.' && file[i] != '#' && file[i] != '\n')
print_error_extended(1, dope);
else if (file[i] == '\n')
line_nbr++;
if (file[i] == '\n' && line_nbr % 5 == 0 && file[i - 1] != '\n')
print_error_extended(2, dope);
if (file[i] == '\n' && file[i + 1] != '\0' && \
file[i + 2] != '.' && file[i + 2] != '#')
print_error_extended(3, dope);
i++;
}
if (line_nbr < 4)
print_error_extended(4, dope);
if (!dope[3] && line_nbr > 129)
print_error_extended(5, dope);
}
/*
** Function that check if tetrimino square contains:
** - 4 x #
** - 12 x .
*/
int check_tetri_errors(char *tetri)
{
int i;
int htg;
int dot;
i = 0;
htg = 0;
dot = 0;
while (tetri[i])
{
if (tetri[i] == '#')
htg++;
else if (tetri[i] == '.')
dot++;
i++;
}
if (htg != 4 || dot != 12 || check_tetri_errors_proxy(tetri))
return (6 + check_tetri_errors_proxy(tetri));
return (0);
}
/*
** Function that check if 4 # (tetrimino parts) are linked
*/
int check_tetri_errors_proxy(char *tetri)
{
int i;
int j;
i = 0;
j = 0;
while (tetri[i])
{
if (i < 19 && tetri[i] == '#' && tetri[i + 1] == '#')
j++;
if (i > 0 && tetri[i] == '#' && tetri[i - 1] == '#')
j++;
if (i < 15 && tetri[i] == '#' && tetri[i + 5] == '#')
j++;
if (i > 4 && tetri[i] == '#' && tetri[i - 5] == '#')
j++;
i++;
}
return ((j < 6) ? 1 : 0);
}
+155
View File
@@ -0,0 +1,155 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* parse_input.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: vmanzoni <vmanzoni@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/04/15 14:48:14 by vmanzoni #+# #+# */
/* Updated: 2019/06/01 13:32:38 by hulamy ### ########.fr */
/* */
/* ************************************************************************** */
#include "fillit.h"
/*
** function that transform a tab of . and # into a binary tab of int
*/
unsigned short tab_to_bin(char line[])
{
unsigned short tmp;
int i;
i = 0;
tmp = 0;
while (line[i])
{
tmp <<= 1;
if (line[i] == '\n')
i++;
if (line[i++] == '#')
tmp |= 1;
}
return (tmp);
}
/*
** Function that take a tetrimino of 4*4
** and reduce it to its right size, in binary
*/
unsigned short reduce_tetri(unsigned short tetri, int width)
{
unsigned int mask;
unsigned int tmp;
mask = ~0u << (32 - width) >> 16;
tmp = (mask & tetri);
tmp |= ((mask & tetri << 4) >> width);
tmp |= ((mask & tetri << 8) >> (2 * width));
tmp |= ((mask & tetri << 12) >> (3 * width));
return (tmp);
}
/*
** Function that transforme a tetriminos char* into a short of 16 bites
** and then fills it and its reversed into the list
**
** 1) transforme la ligne de . et # en un short de 0 et 1
** 2) cree un mask avec des 1 sur la colonne de droite (#...#...#...#...)
** 3) utilise le mask pour trouver la largeur que prend le tetriminos
** 4) deplace le tetriminos tout en haut a gauche
** (i - list->width = le nombre de colonne vide a gauche)
** 5) trouve la hauteur du tetri
** 6) fabrique la ligne pour le tetriminos de la bonne largeur
**
** list->test is used to debug the backtracking, allowing to print the
** map each time without the previous tries
*/
void fill_list(char line[], t_fillist *list)
{
unsigned int mask;
int i;
list->tetribit = tab_to_bin(line);
list->memory = 0;
mask = (1 << 15) | (1 << 11) | (1 << 7) | (1 << 3);
i = 0;
while (!(mask & list->tetribit) && i++ < 4)
mask >>= 1;
list->width = i;
while (mask & list->tetribit && ++i < 4)
mask >>= 1;
list->width = i - list->width;
list->tetribit <<= (i - list->width);
while (!(list->tetribit & (~0u << 12)))
list->tetribit <<= 4;
i = 0;
while (i < 4 && list->tetribit & (~0u << 28 >> (i * 4 + 16)))
i++;
list->height = i;
list->tetribit = reduce_tetri(list->tetribit, list->width);
list->same = NULL;
list->test = 0;
}
/*
** Function that creates the linked list and add a new structure
** linked each time needed
*/
int add_to_list(char *line, t_fillist **lst, char letter, int *dope)
{
t_fillist *tmp;
t_fillist *test;
if (!(tmp = (t_fillist*)malloc(sizeof(*tmp))))
return (0);
tmp->next = NULL;
test = *lst;
if (!test)
*lst = tmp;
else
{
while (test->next)
test = test->next;
test->next = tmp;
}
fill_list(line, tmp);
tmp->letter = letter;
tmp->dope = dope;
tmp->start = *lst;
return (1);
}
/*
** Function that parse a file and put each tetrimino in a linked list
*/
int parse_input(char *input, t_fillist **list, int *dope)
{
char tetri[20];
int i;
int j;
int letter;
int size;
i = 0;
letter = 'A';
while (input[i])
{
j = 0;
while (j < 19)
tetri[j++] = input[i++];
tetri[19] = '\0';
if (check_tetri_errors(tetri))
print_error_extended(check_tetri_errors(tetri), dope);
add_to_list(tetri, list, letter++, dope);
while (input[i] && input[i] != '.' && input[i] != '#')
i++;
}
size = search_map(*list);
return (size);
}
+121
View File
@@ -0,0 +1,121 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* print.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: hulamy <hulamy@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/04/30 13:24:28 by hulamy #+# #+# */
/* Updated: 2019/06/01 13:56:50 by hulamy ### ########.fr */
/* */
/* ************************************************************************** */
#include "fillit.h"
/*
** function that print a map of height and width
** usefull to print tetris
*/
void print_sized_map(unsigned int *tab, int width, int height, char letter)
{
int i;
unsigned int mask;
i = 0;
mask = 0;
while (i++ < width)
mask = (mask >> 1) | ((mask | 1) << 31);
i = 0;
while (i < width * height)
{
if (i && !(i % width))
ft_putchar('\n');
if (tab[i / 32] & (1 << (31 - i % 32)))
ft_put_tetri_color(letter);
else
ft_putchar('.');
ft_putchar(' ');
i++;
}
write(1, "\n", 1);
}
/*
** Print the final map with the letters
** if flag value is 0 -> print moulinette version
** if flag value is 0 -> print in color
*/
char *init_print_map(t_fillist *list, int size)
{
char *map;
int i;
int j;
map = (char *)malloc(sizeof(*map) * (size * size + 1));
map[size * size] = '\0';
i = -1;
while (++i < size * size)
map[i] = '.';
while (list)
{
j = 0;
i = -1;
while (++i < list->width * list->height)
{
if (i && i % list->width == 0)
j += size - list->width;
if (1 << (15 - i) & list->tetribit && list->test == 1)
map[list->position + i + j - 1] = list->letter;
}
list = list->next;
}
return (map);
}
/*
** Function that print the map with color if flag = 1
** or for moulinette if flag = 0;
*/
void print_letter_map(t_fillist *list, int size, int flag)
{
int i;
char *map;
map = init_print_map(list, size);
i = -1;
while (++i < size * size)
{
if (i && i % size == 0)
ft_putchar('\n');
if (flag == 0)
ft_putchar(map[i]);
else
{
ft_put_tetri_color(map[i]);
ft_putchar(' ');
}
}
ft_putchar('\n');
free(map);
}
/*
** Function that print the map
*/
void print_final_map(t_fillist *list, int size)
{
if (list->dope[2])
{
ft_putendl("result for humans :");
print_letter_map(list, size, 1);
ft_putchar('\n');
ft_putendl("result for moulinette :");
}
print_letter_map(list, size, 0);
if (list->dope[2])
ft_putchar('\n');
}
+51
View File
@@ -0,0 +1,51 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* print_map_with_colors.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: vmanzoni <vmanzoni@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/05/03 20:27:22 by vmanzoni #+# #+# */
/* Updated: 2019/06/01 14:27:30 by hulamy ### ########.fr */
/* */
/* ************************************************************************** */
#include "fillit.h"
void ft_putchar_color(char c, char color)
{
if (color == 'R')
write(1, RED, 5);
else if (color == 'B')
write(1, BLU, 5);
else if (color == 'G')
write(1, GRN, 5);
else if (color == 'Y')
write(1, YEL, 5);
else if (color == 'M')
write(1, MAG, 5);
else if (color == 'C')
write(1, CYN, 5);
else if (color == 'W' || !c)
write(1, RESET, 5);
ft_putchar(c);
write(1, RESET, 5);
}
void ft_put_tetri_color(char c)
{
if (c == 'A' || c == 'G' || c == 'M' || c == 'S' || c == 'Y')
ft_putchar_color(c, 'R');
else if (c == 'B' || c == 'H' || c == 'N' || c == 'T' || c == 'Z')
ft_putchar_color(c, 'B');
else if (c == 'C' || c == 'I' || c == 'O' || c == 'U')
ft_putchar_color(c, 'G');
else if (c == 'D' || c == 'J' || c == 'P' || c == 'V')
ft_putchar_color(c, 'Y');
else if (c == 'E' || c == 'K' || c == 'Q' || c == 'W')
ft_putchar_color(c, 'M');
else if (c == 'F' || c == 'L' || c == 'R' || c == 'X')
ft_putchar_color(c, 'C');
else
ft_putchar(c);
}
+22 -13
View File
@@ -6,7 +6,7 @@
/* By: vmanzoni <vmanzoni@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/04/13 12:09:46 by vmanzoni #+# #+# */
/* Updated: 2019/04/15 14:48:36 by vmanzoni ### ########.fr */
/* Updated: 2019/06/01 15:12:03 by hulamy ### ########.fr */
/* */
/* ************************************************************************** */
@@ -18,24 +18,33 @@
char *read_file(char *file)
{
char buf[BUFF_SIZE];
int fd;
int rv;
int i;
char *result;
char buf[BUFF_SIZE];
int fd;
int rv;
int i;
char *result;
if (((fd = open(file, O_RDONLY)) < 0) \
|| ((rv = read(fd, &buf, BUFF_SIZE)) < 0) \
|| !(result = malloc(sizeof(char) * rv)))
|| !(result = malloc(sizeof(char) * rv)))
return (NULL);
buf[rv] = '\0';
i = 0;
while (buf[i])
{
buf[rv - 1] = '\0';
i = -1;
while (buf[++i])
result[i] = buf[i];
i++;
}
result[i] = '\0';
close(fd);
return (result);
}
/*
** Function that init num and size for search_map
*/
void init_num_and_size(int num, int *size, t_fillist *tmp)
{
while ((tmp = tmp->next))
num++;
while (*size * *size < num * 4)
(*size)++;
}
+167
View File
@@ -0,0 +1,167 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* f_search_map.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: hulamy <hulamy@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/04/27 20:47:22 by hulamy #+# #+# */
/* Updated: 2019/06/01 15:12:08 by hulamy ### ########.fr */
/* */
/* ************************************************************************** */
#include "fillit.h"
/*
** function that look if a tretri fit in a place
*/
unsigned int fit_in_place(unsigned int *map, t_fillist *lst, int sze, int i)
{
unsigned int tmp;
unsigned int mask;
unsigned int tetri;
int n;
int r;
n = lst->num;
r = lst->rank;
i = lst->height;
tetri = lst->tetribit << 16 >> lst->width;
tmp = 0;
mask = ~0u << (32 - lst->width);
while (i--)
{
if (tmp & tetri)
return (0);
if (r >= 32 && ++n)
r -= 32;
tmp = (mask & (map[n] << r));
if (n + 1 < lst->total_num)
tmp |= (mask & (map[n + 1] >> (32 - r)));
tetri <<= lst->width;
r += sze;
}
return (!(tmp & tetri));
}
/*
** function that look for the first place in the map for a tetri
*/
int find_place(unsigned int *map, t_fillist *list, int size)
{
int limit;
int pos;
pos = list->position;
list->place = pos % size;
list->rank = pos % 32;
list->num = pos / 32;
limit = (size - list->height + 1) * size;
while (pos < limit)
{
if (list->rank >= 32 && ++list->num)
list->rank -= 32;
if (list->place > size - list->width)
{
list->place = -1;
pos += list->width - 2;
list->rank += list->width - 2;
}
else if (fit_in_place(map, list, size, 0))
return ((list->position = pos + 1));
pos++;
list->place++;
list->rank++;
}
return (0);
}
/*
** function that add or remove a tetri on the map
*/
void add_remove(unsigned int *map, t_fillist *list, int size)
{
unsigned int msk;
unsigned short tetri;
int i;
int j;
tetri = list->tetribit;
msk = ~0u << (32 - list->width);
i = (list->height - 1) * list->width;
j = (list->height - 1) * size + list->position;
while (j >= list->position)
{
map[(j - 1) / 32] ^= (msk & tetri << (16 + i)) >> (j - 1);
if ((j - 1) / 32 + 1 < list->total_num)
map[(j - 1) / 32 + 1] ^= (msk & tetri << (16 + i)) << (32 - j) << 1;
j -= size;
i -= list->width;
}
}
/*
** Function that recursively try to fill the map with the tetris
*/
int fill_map(unsigned int *map, t_fillist *list, int size)
{
if (!list)
return (1);
list->position = 0;
while (find_place(map, list, size))
{
add_remove(map, list, size);
list->test = 1;
if (list->dope[0])
{
print_letter_map(list->start, size, 1);
ft_putchar('\n');
}
if (list->dope[1])
if (check_tetri_memory(list, list->position))
if (fill_map(map, list->next, size))
return (1);
if (!list->dope[1])
if (fill_map(map, list->next, size))
return (1);
add_remove(map, list, size);
list->test = 0;
}
return (0);
}
/*
** Function that send to "fill_map" a map of a certain size
** and increment its size untill it's solved
*/
int search_map(t_fillist *list)
{
t_fillist *tmp;
unsigned int *map;
int size;
int num;
int i;
size = 2;
tmp = print_tetri(list);
init_num_and_size(1, &size, tmp);
i = 0;
while (!i)
{
num = (size * size) / 32 + 1;
if (!(map = (unsigned int *)malloc(sizeof(*map) * num)))
return (0);
check_same_tetri(list, num);
while (num--)
map[num] = 0;
i = fill_map(map, list, size++);
if (!i)
free(map);
}
return (print_binary_map(map, size, list->dope));
}
BIN
View File
Binary file not shown.
+20
View File
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleIdentifier</key>
<string>com.apple.xcode.dsym.fillit</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>dSYM</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
</dict>
</plist>
+115 -24
View File
@@ -6,47 +6,138 @@
/* By: vmanzoni <vmanzoni@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/03/01 13:34:46 by vmanzoni #+# #+# */
/* Updated: 2019/04/15 20:53:57 by vmanzoni ### ########.fr */
/* Updated: 2019/06/01 15:12:00 by hulamy ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef FILLIT_H
# define FILLIT_H
#include <stdlib.h>
#include <unistd.h> // for system call write
#include <fcntl.h> // for system call open
#include <string.h> // for memmove and strlen
#include <stdio.h> // for debug printf
#include <stdbool.h> // to use bool type
# include <stdlib.h>
# include <unistd.h>
# include <fcntl.h>
# include <stdbool.h>
# include "libft/includes/libft.h"
/*
** DEFINE
*/
# define BUFF_SIZE 1024
# define RED "\x1B[31m"
# define GRN "\x1B[32m"
# define YEL "\x1B[33m"
# define BLU "\x1B[34m"
# define MAG "\x1B[35m"
# define CYN "\x1B[36m"
# define RESET "\x1B[0m"
/*
** STRUCTURE
** tetribit : tetri ecrit en binaire dans un short de 16 bits
** width : largeur du tetri
** height : hauteur du tetri
** position : memorise la position d tetri bit a bit
** place : position sur l'axe des abscisses de la map (position % size)
** rank : position de 1 a 32 dans l'int du tableau d'int (position % 32)
** num : memorise dans quel int du tableau on se trouve (position / 32)
** test :
** letter : letter of the tetrimino for printing final map
** dope : flags for details, optimisation, printing and error
** memory : positions already tested by a tetrimino in bitwise
** same : pointer to previous identical tetrimino
** next : pointer to next tetrimino
** start : pointer to first tetrimino of input file
*/
typedef struct s_fillist
typedef struct s_fillist
{
int id;
char **tetraminos;
int position[2];
int size[2];
int area;
unsigned short tetribit;
int width;
int height;
int position;
int place;
int rank;
int num;
int total_num;
int test;
char letter;
int *dope;
unsigned int *memory;
struct s_fillist *same;
struct s_fillist *next;
} t_fillist;
struct s_fillist *start;
} t_fillist;
/*
** FUNCTIONS
** bonus_opti.c
*/
int check_tetri_memory(t_fillist *list, int pos);
int compare_tetri(t_fillist *tetri_a, t_fillist *tetri_b);
t_fillist *clean_list_memory(t_fillist *list, t_fillist *tmp);
int check_same_tetri(t_fillist *list, int num);
void print_test(char *test); //DELETE BEFORE EVALUATION
char *read_file(char *file);
void print_error(char *s);
void parse_input(char *input);
int check_file_errors(char *file);
int check_tetri_errors(char *tetri);
int check_tetri_errors2(char *tetri);
int add_to_list(char **square, t_fillist **list);
/*
** bonus_print.c
*/
t_fillist *print_tetri(t_fillist *list);
int print_binary_map(unsigned int *map, int size, int *dope);
int print_flags_usage(void);
/*
** main.c
*/
int *create_dope(char *av, int mdp);
int is_mdp(int ac, char **av);
void clean_list(t_fillist *list, t_fillist *tmp);
int main(int argc, char **argv);
/*
** read_file.c
*/
char *read_file(char *file);
void init_num_and_size(int num, int *size, t_fillist *tmp);
/*
** handle_errors.c
*/
void print_error(char *s);
void print_error_extended(int error, int *dope);
void check_file_errors(char *file, int *dope);
int check_tetri_errors(char *tetri);
int check_tetri_errors_proxy(char *tetri);
/*
** parse_input.c
*/
unsigned short tab_to_bin(char line[]);
unsigned short reduce_tetri(unsigned short tetri, int width);
void fill_list(char line[], t_fillist *list);
int add_to_list(char *sqr, t_fillist **lst, char lett, int *dope);
int parse_input(char *input, t_fillist **list, int *dope);
/*
** search_map.c
*/
unsigned int fit_in_place(unsigned int *map, t_fillist *lst, int siz, int i);
int find_place(unsigned int *map, t_fillist *list, int size);
void add_remove(unsigned int *map, t_fillist *list, int size);
int fill_map(unsigned int *map, t_fillist *list, int size);
int search_map(t_fillist *list);
/*
** print.c
*/
void print_sized_map(unsigned int *tab, int wdth, int hgt, char ltr);
char *init_print_map(t_fillist *list, int size);
void print_letter_map(t_fillist *list, int size, int flag);
void print_final_map(t_fillist *list, int size);
/*
** print_map_with_colors.c
*/
void ft_putchar_color(char c, char color);
void ft_put_tetri_color(char c);
#endif
-20
View File
@@ -1,20 +0,0 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* get_smallest_square.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: vmanzoni <vmanzoni@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/04/12 22:29:45 by vmanzoni #+# #+# */
/* Updated: 2019/04/14 21:37:19 by vmanzoni ### ########.fr */
/* */
/* ************************************************************************** */
#include "fillit.h"
/*
char *get_smallest_square()
{
}
*/
-103
View File
@@ -1,103 +0,0 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* handle_errors.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: vmanzoni <vmanzoni@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/03/01 13:29:05 by vmanzoni #+# #+# */
/* Updated: 2019/04/15 14:41:19 by vmanzoni ### ########.fr */
/* */
/* ************************************************************************** */
#include "fillit.h"
/*
** Function that display error message *s on fd and exit program
*/
void print_error(char *s)
{
write(2, s, strlen(s));
exit(1);
}
/*
** Function to see if there if an error if the file
** - less than 4 lines
** - more than 104 (26 tetri) + 25 (\n) = 129 lines
** - two \n in a row
*/
int check_file_errors(char *file)
{
int i;
int line_nbr;
i = 0;
line_nbr = 0;
while (file[i])
{
if (file[i] != '.' && file[i] != '#' && file[i] != '\n')
return (1);
if (file[i] == '\n')
line_nbr++;
if (file[i] == '\n' && file[i+1] != '\0' && \
file[i+2] != '.' && file[i+2] != '#')
return (1);
i++;
}
if (line_nbr < 4 || line_nbr > 129)
return (1);
return (0);
}
/*
** Function that check if tetrimino square contains:
** - 4 '#'
** - 12 '.'
*/
int check_tetri_errors(char *tetri)
{
int i;
int htg;
int dot;
i = 0;
htg = 0;
dot = 0;
while (tetri[i])
{
if (tetri[i] == '#')
htg++;
else if (tetri[i] == '.')
dot++;
i++;
}
if (htg != 4 || dot != 12 || check_tetri_errors2(tetri))
return (1);
return (0);
}
/*
** Function that check if tetrimino parts are linked
*/
int check_tetri_errors2(char *tetri)
{
int i;
i = 0;
while (tetri[i])
{
if (tetri[i] == '.' || tetri[i] == '\n')
i++;
else if (tetri[i] == '#' && (tetri[i + 1] == '#' || tetri[i - 1] == '#'
|| tetri[i + 5] == '#' || tetri[i - 5] == '#'))
i++;
else
return (1);
}
return (0);
}
Submodule libft deleted from dad20d5d96
+95 -18
View File
@@ -6,32 +6,109 @@
/* By: vmanzoni <vmanzoni@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/02/12 13:20:48 by vmanzoni #+# #+# */
/* Updated: 2019/04/15 20:54:24 by vmanzoni ### ########.fr */
/* Updated: 2019/06/01 14:40:58 by hulamy ### ########.fr */
/* */
/* ************************************************************************** */
#include "fillit.h"
int main(int argc, char **argv)
{
char *input;
/*
** Function that put the flags for bonus into a tab of int
**
** d : debug print (print the map during the backtracking)
** o : optimisation ultra fast but with some errors still
** p : print extended (print the tetri and the map in different formats)
** e : error extended (message more precise AND no error if too much tetri)
*/
if (argc == 2)
int *create_dope(char *av, int mdp)
{
char *comp;
int *dope;
int i;
int j;
comp = "dope";
if (!(dope = (int*)malloc(sizeof(*dope) * 4)))
return (NULL);
i = 0;
while (i < 4)
dope[i++] = 0;
if (!mdp)
return (dope);
i = -1;
while (++i < 4 && (j = -1))
while (av[++j])
if (comp[i] == av[j])
dope[i] = 1;
return (dope);
}
/*
** Function that check if the password is good to unlock the flags
*/
int is_mdp(int ac, char **av)
{
char *mdp;
int i;
if (ac < 3 || ac > 4)
return (0);
mdp = "trompette";
i = 0;
while (av[2][i] && mdp[i] && mdp[i] == av[2][i])
i++;
if (av[2][i] || mdp[i])
return (0);
if (ac == 3)
return (print_flags_usage());
return (1);
}
/*
** Function that free the list
*/
void clean_list(t_fillist *list, t_fillist *tmp)
{
tmp = list;
while (list)
{
if (!(input = read_file(argv[1])))
print_error("Error: Could not read file.\n");
if (check_file_errors(input))
print_error("Error: Invalid file.\n");
parse_input(input);
/*
Transform input to tetriminos
Backtracking for smallest square
Transform tetriminos with letters
Print result
*/
//print_test(input);
list = tmp->next;
free(tmp->memory);
free(tmp);
tmp = list;
}
}
/*
** Main function
*/
int main(int ac, char **av)
{
t_fillist *list;
char *input;
int *dope;
int size;
int mdp;
list = NULL;
mdp = is_mdp(ac, av);
dope = create_dope(av[3], mdp);
if (ac == 2 || mdp)
{
if (!(input = read_file(av[1])))
print_error(dope[3] ? "error: Could not read file.\n" : "error\n");
check_file_errors(input, dope);
size = parse_input(input, &list, dope);
print_final_map(list, size);
free(input);
clean_list(list, list);
}
else
print_error("Usage: Please submit a file.\n");
print_error("usage: Please submit a file.\n> ./fillit file.fillit\n");
free(dope);
return (0);
}
-77
View File
@@ -1,77 +0,0 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* parse_input.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: vmanzoni <vmanzoni@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/04/15 14:48:14 by vmanzoni #+# #+# */
/* Updated: 2019/04/16 15:28:11 by hulamy ### ########.fr */
/* */
/* ************************************************************************** */
#include "fillit.h"
/*
** Function that parse a file and put each tetrimino in a linked list
*/
char **create_square(char *tetri)
{
char **square;
int i;
int k;
i = 0;
if (!(square = (char**)malloc(sizeof(*square) * 4)))
return (NULL);
while (*tetri && (k = -1))
{
if (!(square[i] = (char*)malloc(sizeof(**square) * (4 + 1))))
return (NULL);
square[i][4] = '\0';
while (++k < 4)
square[i][k] = *(tetri++);
while (*tetri == '\n')
tetri++;
// printf("%s\n", square[i]);
i++;
}
return (square);
}
void parse_input(char *input)
{
static t_fillist *list = NULL;
char tetri[20];
int i;
int j;
char **test;
i = 0;
while (input[i])
{
j = 0;
while (j < 19)
tetri[j++] = input[i++];
tetri[19] = '\0';
//printf("PRINT:\n%s\n", tetri);
if (check_tetri_errors(tetri))
print_error("Error: Tetrimino not valid.");
test = create_square(tetri);
add_to_list(test, &list);
while (input[i] == '\n')
i++;
}
/*
** ce qui suit sert juste a afficher le contenu de tous les tetraminos de la liste chainee
** pour debug, a effacer au rendu
*/
while (list && (i = -1))
{
while (++i < list->size[1])
printf("%s\n", list->tetraminos[i]);
printf("\n");
list = list->next;
}
}
-25
View File
@@ -1,25 +0,0 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* print_fillit.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: vmanzoni <vmanzoni@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/03/01 13:35:48 by vmanzoni #+# #+# */
/* Updated: 2019/04/15 00:11:22 by hulamy ### ########.fr */
/* */
/* ************************************************************************** */
#include "fillit.h"
/*
void ft_print_fillit()
{
}
*/
void print_test(char *test)
{
write(1, test, strlen(test));
}
+79
View File
@@ -0,0 +1,79 @@
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
+4
View File
@@ -0,0 +1,4 @@
####
####
####
####
View File
+4 -4
View File
@@ -1,4 +1,4 @@
...#
...#
...#
...#
#...
#...
#...
#...
+2 -2
View File
@@ -1,4 +1,4 @@
###.
.#..
....
....
....
####
+4
View File
@@ -0,0 +1,4 @@
#...
.#..
#...
#...
+129
View File
@@ -0,0 +1,129 @@
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
+9
View File
@@ -0,0 +1,9 @@
...#
...#
...#
...#
....
##..
.##.
....
+14
View File
@@ -0,0 +1,14 @@
...#
...#
...#
...#
....
##..
.##.
....
....
###.
.#..
....
+14
View File
@@ -0,0 +1,14 @@
....
##..
.##.
....
...#
...#
...#
...#
....
###.
..#.
....
+19
View File
@@ -0,0 +1,19 @@
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
+19
View File
@@ -0,0 +1,19 @@
...#
...#
...#
...#
...#
...#
...#
...#
...#
...#
...#
...#
...#
...#
...#
...#
+19
View File
@@ -0,0 +1,19 @@
....
##..
.##.
....
...#
...#
...#
...#
....
###.
..#.
....
....
.##.
.##.
....
+24
View File
@@ -0,0 +1,24 @@
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
+44
View File
@@ -0,0 +1,44 @@
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
##..
##..
....
....
+89
View File
@@ -0,0 +1,89 @@
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+84
View File
@@ -0,0 +1,84 @@
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+84
View File
@@ -0,0 +1,84 @@
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+84
View File
@@ -0,0 +1,84 @@
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+84
View File
@@ -0,0 +1,84 @@
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+84
View File
@@ -0,0 +1,84 @@
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+84
View File
@@ -0,0 +1,84 @@
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+84
View File
@@ -0,0 +1,84 @@
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+84
View File
@@ -0,0 +1,84 @@
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
#...
##..
.#..
....
....
###.
#...
....
+84
View File
@@ -0,0 +1,84 @@
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
....
###.
#...
....
+79
View File
@@ -0,0 +1,79 @@
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
+79
View File
@@ -0,0 +1,79 @@
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
+74
View File
@@ -0,0 +1,74 @@
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
+69
View File
@@ -0,0 +1,69 @@
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
+64
View File
@@ -0,0 +1,64 @@
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
+59
View File
@@ -0,0 +1,59 @@
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
@@ -0,0 +1,54 @@
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
@@ -0,0 +1,49 @@
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
@@ -0,0 +1,44 @@
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+79
View File
@@ -0,0 +1,79 @@
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+79
View File
@@ -0,0 +1,79 @@
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+79
View File
@@ -0,0 +1,79 @@
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+79
View File
@@ -0,0 +1,79 @@
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+79
View File
@@ -0,0 +1,79 @@
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+79
View File
@@ -0,0 +1,79 @@
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+79
View File
@@ -0,0 +1,79 @@
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
#...
##..
.#..
....
....
###.
#...
....
+79
View File
@@ -0,0 +1,79 @@
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
....
###.
#...
....
+79
View File
@@ -0,0 +1,79 @@
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
+79
View File
@@ -0,0 +1,79 @@
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+74
View File
@@ -0,0 +1,74 @@
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+69
View File
@@ -0,0 +1,69 @@
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+64
View File
@@ -0,0 +1,64 @@
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+59
View File
@@ -0,0 +1,59 @@
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+54
View File
@@ -0,0 +1,54 @@
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+49
View File
@@ -0,0 +1,49 @@
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+44
View File
@@ -0,0 +1,44 @@
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
@@ -0,0 +1,39 @@
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+79
View File
@@ -0,0 +1,79 @@
#...
##..
.#..
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+79
View File
@@ -0,0 +1,79 @@
#...
##..
.#..
....
....
###.
#...
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+79
View File
@@ -0,0 +1,79 @@
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+79
View File
@@ -0,0 +1,79 @@
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+79
View File
@@ -0,0 +1,79 @@
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+79
View File
@@ -0,0 +1,79 @@
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+79
View File
@@ -0,0 +1,79 @@
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+84
View File
@@ -0,0 +1,84 @@
...#
...#
...#
...#
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+84
View File
@@ -0,0 +1,84 @@
...#
...#
...#
...#
#...
##..
.#..
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+84
View File
@@ -0,0 +1,84 @@
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+84
View File
@@ -0,0 +1,84 @@
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+84
View File
@@ -0,0 +1,84 @@
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+84
View File
@@ -0,0 +1,84 @@
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
#...
##..
.#..
....
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+84
View File
@@ -0,0 +1,84 @@
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
....
###.
#...
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+84
View File
@@ -0,0 +1,84 @@
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
####
....
....
....
.##.
##..
....
....
##..
.##.
....
....
...#
...#
...#
...#
#...
##..
.#..
....
....
###.
#...
....
+1 -1
View File
@@ -111,4 +111,4 @@
....
....
####
....iskjdslkfsljklfdjk
....i
+8
View File
@@ -0,0 +1,8 @@
####
....
....
....
####
....
....
....
+9
View File
@@ -0,0 +1,9 @@
.#..
.##.
..#.
....
.#..
.#..
..#.
..#.
+49
View File
@@ -0,0 +1,49 @@
...#
...#
..##
....
#...
###.
....
....
.#..
.#..
##..
....
...#
...#
..##
....
...#
...#
..##
....
#...
###.
....
....
.#..
.#..
##..
....
...#
...#
..##
....
#...
###.
....
....
.#..
.#..
##..
....
+99
View File
@@ -0,0 +1,99 @@
...#
...#
..##
....
#...
###.
....
....
.#..
.#..
##..
....
...#
...#
..##
....
...#
...#
..##
....
#...
###.
....
....
.#..
.#..
##..
....
...#
...#
..##
....
...#
...#
..##
....
#...
###.
....
....
.#..
.#..
##..
....
...#
...#
..##
....
...#
...#
..##
....
#...
###.
....
....
.#..
.#..
##..
....
...#
...#
..##
....
...#
...#
..##
....
#...
###.
....
....
.#..
.#..
##..
....
...#
...#
..##
....
+14
View File
@@ -0,0 +1,14 @@
...#
.###
....
....
....
#...
##..
.#..
##..
.##.
....
....
+19
View File
@@ -0,0 +1,19 @@
....
....
#...
###.
..#.
..#.
.##.
....
.#..
.#..
.#..
.#..
##..
##..
....
....
+4
View File
@@ -0,0 +1,4 @@
#...
###.
....
....
+19
View File
@@ -0,0 +1,19 @@
..#.
..#.
..##
....
....
.##.
.##.
....
..#.
..#.
..##
....
..#.
..#.
..##
....

Some files were not shown because too many files have changed in this diff Show More