fix merge

This commit is contained in:
Yaroslav Kolomiets 2016-12-20 20:06:57 +02:00
commit 0672fb0538
10 changed files with 390 additions and 123 deletions

5
.gitignore vendored
View file

@ -35,6 +35,11 @@
# Vim temp
*.swp
<<<<<<< HEAD
CMakeLists.txt
.idea/
**/cmake-build-debug/*
=======
# Sublime files
*.sublime*
>>>>>>> github/develop

View file

@ -6,7 +6,7 @@
# By: gtertysh <marvin@42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# Created: 2016/12/14 16:54:48 by gtertysh #+# #+# #
# Updated: 2016/12/15 22:08:42 by ykolomie ### ########.fr #
# Updated: 2016/12/20 20:05:58 by ykolomie ### ########.fr #
# #
# **************************************************************************** #
@ -17,15 +17,18 @@ SRCDIR = ./src/
OBJDIR = ./obj/
SRC_FILES = main.c \
fillit.c \
glue_figure.c \
move_up_left.c \
read_file.c \
string_to_table.c \
to_strct_array.c \
to_letters.c \
build_matrix.c \
dancing_links.c \
test!_check.c \
test!_print_one_string.c \
test!_print_table.c
test!_print_table.c \
check_raw_string.c
OBJ_FILES = $(SRC_FILES:.c=.o)

View file

@ -6,7 +6,7 @@
/* By: gtertysh <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/14 16:42:06 by gtertysh #+# #+# */
/* Updated: 2016/12/14 16:45:34 by gtertysh ### ########.fr */
/* Updated: 2016/12/20 19:18:00 by gtertysh ### ########.fr */
/* */
/* ************************************************************************** */
@ -17,33 +17,44 @@
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <stdint.h>
#include <stdio.h> // warning!
# define BUF_S 8192
# define HOW_MUCH 10000
typedef struct s_tetrominoes
typedef struct s_coord
{
uint16_t line[16];
int offset_y;
int height;
} t_tetrominoes;
int x;
int y;
} t_coord;
typedef struct s_map
typedef struct s_ttrmn
{
uint16_t line[16];
unsigned int size;
t_tetrominoes *figure[26];
unsigned int figure_amount;
} t_map;
char t[17];
int x;
int y;
t_coord c[4];
} t_ttrmn;
// obsolete, rewrite for unit16
typedef struct s_tetrominoes_templates
typedef struct s_col
{
char figure[17];
} t_tetrominoes_templates;
struct s_col *left;
struct s_col *right;
void *up;
void *down;
} t_col;
typedef struct s_node
{
struct s_node *left;
struct s_node *right;
struct s_node *up;
struct s_node *down;
int row;
t_col *column;
} t_node;
void convert_tetramino(char *s, t_map *map, int index);
void map_initialization(char **tetramino_table, t_map *map);
// reads from file
char *read_file(char *path);
@ -64,10 +75,20 @@ void move_up_left(char **table);
void print_one_string(char **glued);
// compare 19 templates with each tetromino in *ttr table
void test_check(char **ttr, t_tetrominoes_templates *tamplates);
void test_check(char **ttr, t_ttrmn *tamplates);
// change hashes ('#') with letters
// obsolete, rewrite for structs array
void to_letters(char **ttr);
// create array of ttr structures
int *to_strct_array(char **ttr, t_ttrmn *templates);
t_col *add_column(t_col *root);
t_node *add_node(t_col *col, int row);
void cover(t_col *to_cover);
void uncover(t_col *to_uncover);
#endif

106
src/build_matrix.c Normal file
View file

@ -0,0 +1,106 @@
#include "fillit.h"
unsigned int ft_sqrt_ceil(unsigned int num)
{
unsigned int i;
i = 1;
while (i * i < num)
i++;
return (i);
}
void put_figure(char **char_matrix, t_ttrmn t, int y, int x)
{
int i;
int j;
int t_x;
int runner;
t_x = x;
i = 0;
runner = 0;
while (i < t.y)
{
x = t_x;
j = 0;
while (j < t.x)
{
char_matrix[y][x] = t.t[runner];
j++;
x++;
runner++;
}
}
}
void print_char_matrix(char **matrix, int size)
{
int y;
y = 0;
while (y < size)
{
printf("%s\n", matrix[y]);
y++;
}
}
int **build_matrix(t_ttrmn **ttr)
{
int **matrix;
char **char_matrix;
int i;
int j;
int amount;
int size;
int k;
int curr_line;
amount = 0;
i = 0;
matrix = malloc(sizeof(int*) * HOW_MUCH);
while (i < HOW_MUCH)
{
j = 0;
matrix[i] = malloc(sizeof(int) * HOW_MUCH);
while (j < HOW_MUCH)
matrix[i][j++] = -1;
i++;
}
while(ttr[amount])
amount++;
size = ft_sqrt_ceil(amount * 4);
if (size < 4)
size = 4;
char_matrix = malloc(sizeof(char *) * size + 1);
i = 0;
while (i < size)
{
char_matrix[i] = malloc(sizeof(char) * size + 1);
char_matrix[i][size] = 0;
i++;
}
char_matrix[size] = 0;
i = 0;
curr_line = 0;
while (i < amount)
{
k = 0;
while (k < size - ttr[i]->y)
{
j = 0;
while (j < size - ttr[i]->x)
{
put_figure(char_matrix, *ttr[i], k, j);
//print_char_matrix(char_matrix, size);
//count_cover(matrix, char_matrix, curr_line++);
//clear_char_matrix(&char_matrix, size);
j++;
}
k++;
}
i++;
}
return (matrix);
}

34
src/check_raw_string.c Normal file
View file

@ -0,0 +1,34 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* check_raw_string.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: gtertysh <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/15 18:32:54 by gtertysh #+# #+# */
/* Updated: 2016/12/15 18:32:58 by gtertysh ### ########.fr */
/* */
/* ************************************************************************** */
int check_raw_string(char *raw_string)
{
int n_count;
n_count = 0;
if (*raw_string == 0 || *raw_string == '\n')
return (1);
while(*raw_string)
{
if (*raw_string == '\n')
n_count++;
if ((n_count + 1) % 4 == 0)
if (*(raw_string + 1) != '\0')
if (*(raw_string + 1) != '\n' && !(*(raw_string + 2) == '.' || *(raw_string + 2) == '#'))
return (1);
raw_string++;
}
if (n_count < 3)
return (1);
return (0);
}

78
src/dancing_links.c Normal file
View file

@ -0,0 +1,78 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* dancing_links.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: gtertysh <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/20 19:21:42 by gtertysh #+# #+# */
/* Updated: 2016/12/20 19:22:04 by gtertysh ### ########.fr */
/* */
/* ************************************************************************** */
#include "fillit.h"
// t_col *add_column(t_col *root)
// {
// t_col *new_col;
// new_col = (t_col*)malloc(sizeof(t_col));
// new_col->down = (void*)new_col;
// new_col->up = (void*)new_col;
// new_col->left = root->left;
// new_col->right = root;
// return (new_col);
// }
// t_node *add_node(t_col *col, int row)
// {
// t_node *new_node;
// new_node = (t_node*)malloc(sizeof(t_node));
// new_node->row = row;
// new_node->up = (t_node*)col->up;
// new_node->down = (t_node*)col;
// col->up->down = new_node;
// col->up = new_node;
// return (new_node);
// }
// void cover(t_col *to_cover)
// {
// void *step_vert;
// t_node *step_horiz;
// to_cover->left->right = to_cover->right;
// to_cover->right->left = to_cover->left;
// step_vert = to_cover->down;
// while (step_vert != (void*)to_cover)
// {
// step_horiz = (t_node*)step_vert->right;
// while (step_horiz != (t_node*)step_vert) {
// step_horiz->down->up = step_horiz->up;
// step_horiz->up->down = step_horiz->down;
// step_horiz = step_horiz->right;
// }
// step_vert = (t_node*)step_vert->down;
// }
// }
// void uncover(t_col *to_uncover)
// {
// void *step_vert;
// t_node *step_horiz;
// step_vert = to_uncover->up;
// while (step_vert != (void*)to_uncover)
// {
// step_horiz = (t_node*)step_vert->left;
// while (step_horiz != (t_node*)step_vert)
// {
// step_horiz->down->up = step_horiz;
// step_horiz->up->down = step_horiz;
// step_horiz = step_horiz->left;
// }
// step_vert = (t_node*)step_vert->up;
// }
// }

View file

@ -6,109 +6,91 @@
/* By: gtertysh <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/10 16:07:25 by gtertysh #+# #+# */
/* Updated: 2016/12/14 16:45:31 by gtertysh ### ########.fr */
/* Updated: 2016/12/20 20:05:29 by ykolomie ### ########.fr */
/* */
/* ************************************************************************** */
#include "../inc/fillit.h"
// bad global variable
t_tetrominoes_templates templates[19] =
t_ttrmn g_templates[19] =
{
{ "#..."
"#..."
"#..."
"#..." },
{
"#...#...#...#...", 1, 4, .c[0] = {0, 0}, .c[1] = {1, 0},
.c[2] = {2, 0}, .c[3] = {3, 0}
},
{ "####"
"...."
"...."
"...." },
{ .t = "####............",
.x = 4,
.y = 1},
{ "#..."
"#..."
"##.."
"...." },
{ .t = "#...#...##......",
.x = 2,
.y = 3},
{ "..#."
"###."
"...."
"...." },
{ .t = "..#.###.........",
.x = 3,
.y = 2},
{ "##.."
".#.."
".#.."
"...." },
{ .t = "##...#...#......",
.x = 2,
.y = 3},
{ "###."
"#..."
"...."
"...." },
{ .t = "###.#...........",
.x = 3,
.y = 2},
{ ".#.."
".#.."
"##.."
"...." },
{ .t = ".#...#..##......",
.x = 2,
.y = 3},
{ "###."
"..#."
"...."
"...." },
{ .t = "###...#.........",
.x = 3,
.y = 2},
{ "##.."
"#..."
"#..."
"...." },
{ .t = "##..#...#.......",
.x = 2,
.y = 3},
{ "#..."
"###."
"...."
"...." },
{ .t = "#...###.........",
.x = 3,
.y = 2},
{ "###."
".#.."
"...."
"...." },
{ .t = "###..#..........",
.x = 3,
.y = 2},
{ "#..."
"##.."
"#..."
"...." },
{ .t = "#...##..#.......",
.x = 2,
.y = 3},
{ ".#.."
"###."
"...."
"...." },
{ .t = ".#..###.........",
.x = 3,
.y = 2},
{ ".#.."
"##.."
".#.."
"...." },
{ .t = ".#..##...#......",
.x = 2,
.y = 3},
{ "##.."
"##.."
"...."
"...." },
{ .t = "##..##..........",
.x = 2,
.y = 2},
{ "##.."
".##."
"...."
"...." },
{ .t = "##...##.........",
.x = 3,
.y = 2},
{ ".#.."
"##.."
"#..."
"...." },
{ .t = ".#..##..#.......",
.x = 2,
.y = 3},
{ ".##."
"##.."
"...."
"...." },
{ .t = ".##.##..........",
.x = 3,
.y = 2},
{ "#..."
"##.."
".#.."
"...." }
{ .t = "#...##...#......",
.x = 2,
.y = 3}
};
int main(int argc, char **argv)
@ -117,9 +99,7 @@ int main(int argc, char **argv)
char **table;
char **ttr;
int i;
t_map map;
t_map copy;
unsigned int size_map;
int *types;
i = 0;
if (argc != 2)
@ -131,22 +111,29 @@ int main(int argc, char **argv)
{
ft_putstr("error\n");
return (1);
}
} //printf("string:\n\n\n%s\n", string);
table = to_table(&string);
ttr = glue_figure(table);
move_up_left(ttr);
print_one_string(ttr);
//printf("print_table:\n\n\n");
//print_table(table);
map_initialization(ttr, &map);
size_map = map.size;
copy = map;
while (!map.ok)
{
map = copy;
map.size = size_map++;
map = algorithm(map, 0);
}
ttr = glue_figure(table);
//printf("glued figures:\n\n\n");
//print_one_string(ttr);
move_up_left(ttr);
//printf("move to up left:\n\n\n");
//print_one_string(ttr);
//printf("test check:\n\n");
//test_check(ttr, templates);
types = to_strct_array(ttr, g_templates);
//printf("%s\n %d, %d", strct_ttr[0]->t, strct_ttr[0]->x, strct_ttr[0]->y);
//to_letters(ttr);
//printf("to latters:\n\n");
//print_one_string(ttr);
return (0);
}

View file

@ -6,7 +6,7 @@
/* By: gtertysh <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/14 17:26:13 by gtertysh #+# #+# */
/* Updated: 2016/12/14 18:47:16 by gtertysh ### ########.fr */
/* Updated: 2016/12/20 19:02:34 by gtertysh ### ########.fr */
/* */
/* ************************************************************************** */
@ -14,7 +14,7 @@
// Test func. Compare figures from file
// with templates
void test_check(char **ttr, t_tetrominoes_templates *tamplates)
void test_check(char **ttr, t_ttrmn *tamplates)
{
int i;
int j;
@ -28,8 +28,8 @@ void test_check(char **ttr, t_tetrominoes_templates *tamplates)
printf("\n\ninput:\n");
printf("%s\n", ttr[i]);
printf("\n\ntemplate:\n");
printf("%s\n", tamplates[j].figure);
if ((ft_memcmp(ttr[i], tamplates[j].figure, 17) == 0))
printf("%s\n", tamplates[j].t);
if ((ft_memcmp(ttr[i], tamplates[j].t, 17) == 0))
printf(" match!\n");
j++;
}

33
src/to_strct_array.c Normal file
View file

@ -0,0 +1,33 @@
#include "fillit.h"
t_ttrmn **to_strct_array(char **ttr, t_ttrmn *templates)
{
t_ttrmn **ret;
int amount;
int i;
int j;
int k;
amount = 0;
i = 0;
k = 0;
while (ttr[amount])
amount++;
ret = malloc(sizeof(ret) * (amount + 1));
while (k < amount)
ret[k++] = malloc(sizeof(t_ttrmn));
ret[k] = 0;
while (i < amount)
{
j = 0;
while(ft_strcmp(templates[j].t, ttr[i]) != 0)
j++;
//printf("%d\n", j);
ft_strcpy(ret[i]->t, ttr[i]);
ret[i]->x = templates[j].x;
ret[i]->y = templates[j].y;
i++;
}
return (ret);
}