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
.gitignore vendored
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.

Binary file not shown.

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

View File

@@ -1,20 +1,24 @@
# Fillit
**hulamy** and **vmanzoni**
Team: **hulamy** and **vmanzoni**
Le but de ce projet est dagencer 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 semboî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)

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
f_bonus_opti.c Normal file
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
f_bonus_print.c Normal file
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
f_handle_errors.c Normal file
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
f_parse_input.c Normal file
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
f_print.c Normal file
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
f_print_map_with_colors.c Normal file
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);
}

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
f_search_map.c Normal file
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
fillit

Binary file not shown.

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>

139
fillit.h
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

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()
{
}
*/

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

1
libft

Submodule libft deleted from dad20d5d96

113
main.c
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);
}

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

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
samples/16square Normal file
View File

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

4
samples/1full Normal file
View File

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

View File

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

View File

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

4
samples/1tetri_wrong Normal file
View File

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

129
samples/26square Normal file
View File

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

9
samples/2tetri Normal file
View File

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

14
samples/3tetri Normal file
View File

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

14
samples/3tetribis Normal file
View File

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

19
samples/4square Normal file
View File

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

19
samples/4tetri Normal file
View File

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

19
samples/4tetribis Normal file
View File

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

24
samples/5square Normal file
View File

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

44
samples/9square Normal file
View File

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

89
samples/debug/jdugoudr Normal file
View File

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

84
samples/debug/jdugoudr1 Normal file
View File

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

84
samples/debug/jdugoudr10 Normal file
View File

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

84
samples/debug/jdugoudr11 Normal file
View File

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

84
samples/debug/jdugoudr12 Normal file
View File

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

84
samples/debug/jdugoudr13 Normal file
View File

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

84
samples/debug/jdugoudr14 Normal file
View File

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

84
samples/debug/jdugoudr15 Normal file
View File

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

84
samples/debug/jdugoudr16 Normal file
View File

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

84
samples/debug/jdugoudr17 Normal file
View File

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

79
samples/debug/jdugoudr18 Normal file
View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

79
samples/debug/jdugoudr1_2 Normal file
View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

79
samples/debug/jdugoudr1_3 Normal file
View File

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

79
samples/debug/jdugoudr1_4 Normal file
View File

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

79
samples/debug/jdugoudr1_5 Normal file
View File

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

79
samples/debug/jdugoudr1_6 Normal file
View File

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

79
samples/debug/jdugoudr1_7 Normal file
View File

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

79
samples/debug/jdugoudr1_8 Normal file
View File

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

79
samples/debug/jdugoudr1_9 Normal file
View File

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

84
samples/debug/jdugoudr2 Normal file
View File

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

84
samples/debug/jdugoudr3 Normal file
View File

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

84
samples/debug/jdugoudr4 Normal file
View File

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

84
samples/debug/jdugoudr5 Normal file
View File

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

84
samples/debug/jdugoudr6 Normal file
View File

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

84
samples/debug/jdugoudr7 Normal file
View File

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

84
samples/debug/jdugoudr8 Normal file
View File

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

84
samples/debug/jdugoudr9 Normal file
View File

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

View File

@@ -111,4 +111,4 @@
....
....
####
....iskjdslkfsljklfdjk
....i

8
samples/error1 Normal file
View File

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

9
samples/error2 Normal file
View File

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

49
samples/map_hard Normal file
View File

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

99
samples/map_slack Normal file
View File

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

14
samples/opti_test Normal file
View File

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

19
samples/test_a Normal file
View File

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

4
samples/test_bug Normal file
View File

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

19
samples/test_opti Normal file
View File

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

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