/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* bruteforce.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: jmikola +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/07/22 12:00:11 by psalame #+# #+# */ /* Updated: 2023/07/23 12:43:04 by psalame ### ########.fr */ /* */ /* ************************************************************************** */ int get_area_size(void); int ft_test_possibility(int **tab, int i); int verif_non_double(int i, int **tab); int verif_col_down(int i, int **tab); int verif_col_up(int i, int **tab); int verif_row_right(int i, int **tab); int verif_row_left(int i, int **tab); int **get_row(void); int **get_col(void); int verif_all_row(int i, int **tab) { int row_left; int row_right; int area_size; area_size = get_area_size(); row_left = verif_row_left(i, tab); row_right = verif_row_right(i, tab); if (((i % area_size) == area_size - 1)) { if (row_left != get_row()[i / area_size][0] || row_right != get_row()[i / area_size][1]) return (0); } else if (row_left > get_row()[i / area_size][0]) return (0); return (1); } int verif_all_col(int i, int **tab) { int col_up; int col_down; int area_size; area_size = get_area_size(); col_up = verif_col_up(i, tab); col_down = verif_col_down(i, tab); if (((i / area_size) == area_size - 1)) { if (col_up != get_col()[i % area_size][0] || col_down != get_col()[i % area_size][1]) return (0); } else if (col_up > get_col()[i % area_size][0]) return (0); return (1); } int verif(int i, int **tab) { if (!verif_non_double(i, tab)) return (0); return (verif_all_row(i, tab) && verif_all_col(i, tab)); } int is_possibility_valid(int **tab, int i) { int area_size; area_size = get_area_size(); if (i == area_size * area_size - 1) return (1); else return (ft_test_possibility(tab, i + 1)); } int ft_test_possibility(int **tab, int i) { int area_size; int height; area_size = get_area_size(); if (tab[i / area_size][i % area_size] == 0) { height = 0; while (++height <= area_size) { tab[i / area_size][i % area_size] = height; if (verif(i, tab)) { if (is_possibility_valid(tab, i)) return (1); } } tab[i / area_size][i % area_size] = 0; return (0); } else { if (!verif(i, tab)) return (0); return (is_possibility_valid(tab, i)); } }