interview puzzle
sum the number of connected segments of this matrix.
by edwardsharp
CSS
body{
font-family: san-serrif;
}
JavaScript
/* so i failed this interview question; but i'm stubborn, tho.
* :/
* given the matrix below
* find the 1 values that are clustered together:
* either next to (left or right) or above or below.
* then replace those 1 values with how many are clustered.
*/
const matrix = [
[0,1,0,0,0,0,1,1,1,1],
[0,0,1,0,0,0,0,1,0,1],
[0,0,1,0,0,1,0,0,0,1],
[1,0,1,0,1,1,0,0,1,1],
[1,1,0,0,0,0,1,1,0,0],
[0,0,1,1,1,0,0,0,0,1],
]
let clusters = [];
let vertz = {};
function yyC(k, i) {
k = parseInt(k);
i = parseInt(i);
//forward
for (let z = i; z < 10; z++) {
if (matrix[k][z]) {
vertz[`${k}:${z}`] = 1;
} else { break; }
}
//backward
for (let z = i; z > -1; z--) {
if (matrix[k][z]) {
vertz[`${k}:${z}`] = 1;
} else { break; }
}
}
function zC(x,i){
//go up
for (let k = x; k > -1; k--) {
if (matrix[k][i]) {
vertz[`${k}:${i}`] = 1;
yyC(k,i);
} else { break; }
}
//go down
for (let k = x; k < 6; k++) {
if (matrix[k][i]) {
vertz[`${k}:${i}`] = 1;
yyC(k,i);
} else { break; }
}
}
function yC(k, i) {
k = parseInt(k);
i = parseInt(i);
//forward
for (let z = i; z < 10; z++) {
if (matrix[k][z]) {
vertz[`${k}:${z}`] = 1;
zC(k,z);
} else { break; }
}
//backward
for (let z = i; z > -1; z--) {
if (matrix[k][z]) {
vertz[`${k}:${z}`] = 1;
zC(k,z);
} else { break; }
}
}
function xC(x,i){
//go up
for (let k = x; k > -1; k--) {
if (matrix[k][i]) {
vertz[`${k}:${i}`] = 1;
//also go forward/backward.
yC(k, i);
} else { break; }
}
//go down
for (let k = x; k < 6; k++) {
if (matrix[k][i]) {
vertz[`${k}:${i}`] = 1;
//also go forward/backward.
yC(k, i);
} else { break; }
}
}
function nC(x, y) {
x = parseInt(x);
y = parseInt(y);
vertz = {};
//check here & go forward.
for (let i = y; i < 10; i++) {
if (matrix[x][i]) {
vertz[`${x}:${i}`] = 1;
xC(x,i);
...