|
|
|
|
@ -45,13 +45,8 @@ function generate_board(rows,cols) {
|
|
|
|
|
|
|
|
|
|
// chercher la plus grande distance possible avant un o ou la fin de la chaine / la valeur d'arrêt
|
|
|
|
|
function get_distance_to_blocking_o(start,stop,str) {
|
|
|
|
|
//console.log("get_distance_to_blocking_o",start,stop,str);
|
|
|
|
|
//start+stop-1, -1 parce que le char est compté dans la la dimension du stop
|
|
|
|
|
var last_char_to_check = (stop < 0 ? str.length : min(start+stop-1,str.length));
|
|
|
|
|
//var tmp_str=set_char_at(start,"|",str);
|
|
|
|
|
//var tmp_str2=set_char_at(last_char_to_check-1,"|",tmp_str);
|
|
|
|
|
//console.log("get_distance_to_blocking_o",start,last_char_to_check,tmp_str2);
|
|
|
|
|
|
|
|
|
|
for(var i_char=start;i_char<last_char_to_check;i_char++) {
|
|
|
|
|
if(str[i_char]=="o") {
|
|
|
|
|
return(i_char-start);
|
|
|
|
|
@ -65,26 +60,21 @@ function get_biggest_square_on_board_at(row,col,the_board,current_max_width=-1)
|
|
|
|
|
// console.log("starting at ",row,col,current_max_width);
|
|
|
|
|
// si il n'y a pas de ligne row, ou pas de colonne col, on renvoie 0
|
|
|
|
|
if(row >= the_board.rows.length || col >= the_board.rows[0].length) {
|
|
|
|
|
// console.log("out of bounds");
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
// si on est sur un o on renvoie 0
|
|
|
|
|
if(the_board.rows[row][col] == "o") {
|
|
|
|
|
// console.log("got an o");
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
// on commence en se disant qu'on peut faire tout le reste du board en partant de notre position
|
|
|
|
|
// on cherche à la position actuelle jusqu'ou on peut aller en longeur et en largeur
|
|
|
|
|
// la longeur max est jusqu'au premier o qu'on trouve
|
|
|
|
|
var max_width = get_distance_to_blocking_o(col,current_max_width,the_board.rows[row]);
|
|
|
|
|
// console.log("max w",max_width);
|
|
|
|
|
// la hauter maximum est jusqu'au premier o qu'on trouve, pas besoin de chercher plus loin que la largeur max
|
|
|
|
|
// console.log("col : ",col," => ",col_to_str(col,the_board));
|
|
|
|
|
var max_height = get_distance_to_blocking_o(row,current_max_width,col_to_str(col,the_board));
|
|
|
|
|
// console.log("max h",max_height);
|
|
|
|
|
// la dimension max est le min des deux.
|
|
|
|
|
current_max_width = min(max_width,max_height);
|
|
|
|
|
// console.log(max_width,",",max_height, "=>",current_max_width);
|
|
|
|
|
// si c'est plus de 1, c'est à dire le plus petit carré possible, alors
|
|
|
|
|
// la dimension max est donc 1 + la dimension max de ce quon peut faire en descendant en diagonale dans le sous carré
|
|
|
|
|
if(current_max_width > 1) {
|
|
|
|
|
@ -100,7 +90,6 @@ function get_biggest_square_for_row(row,the_board) {
|
|
|
|
|
var current_width = 0;
|
|
|
|
|
for(var i_col=0;i_col<the_board.rows[row].length;i_col++) {
|
|
|
|
|
current_width = get_biggest_square_on_board_at(row,i_col,the_board);
|
|
|
|
|
// console.log("at row ",row,", col ",i_col," => ",current_width);
|
|
|
|
|
if(current_width > biggest_for_row.width) {
|
|
|
|
|
biggest_for_row.row = row;
|
|
|
|
|
biggest_for_row.col = i_col;
|
|
|
|
|
@ -113,7 +102,6 @@ function get_biggest_square_for_row(row,the_board) {
|
|
|
|
|
//chercher le plus grand carré pour un tableau
|
|
|
|
|
function get_biggest_square_for_board(the_board) {
|
|
|
|
|
var biggest_in_board_for_now = {width:0};
|
|
|
|
|
//console.log("biggest : ",biggest);
|
|
|
|
|
for(var i_row=0; i_row<the_board.rows.length; i_row++) {
|
|
|
|
|
current_square = get_biggest_square_for_row(i_row,the_board);
|
|
|
|
|
if(current_square.width > biggest_in_board_for_now.width) {
|
|
|
|
|
@ -276,4 +264,6 @@ for(i_board=1;i_board<9;i_board++) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var new_board = generate_board(100,100);
|
|
|
|
|
console.log("generated_board ",new_board,get_biggest_square_for_board(new_board));
|
|
|
|
|
console.log("generated_board ",new_board,get_biggest_square_for_board(new_board));
|
|
|
|
|
|
|
|
|
|
console.log('board2 0,1 ',get_biggest_square_on_board_at(0,1,board2));
|
|
|
|
|
|