Untitled
unknown
javascript
2 years ago
1.5 kB
16
Indexable
function countWordsInMatrix(matrix, words) {
const numRows = matrix.length;
const numCols = matrix[0].length;
function generatePaths(word) {
const paths = [];
for (let i = 0; i <= word.length; i++) {
const part1 = word.substring(0, i);
const part2 = word.substring(i).split('').reverse().join('');
paths.push(part1 + part2, part2 + part1);
}
return paths;
}
function isWordInMatrix(word) {
for (let row = 0; row < numRows; row++) {
for (let col = 0; col < numCols; col++) {
directionLoop: for (const [dx, dy] of [[0, 1], [1, 0]]) {
for (let reverse = 0; reverse < 2; reverse++) {
let x = row, y = col;
for (let i = 0; i < word.length; i++) {
if (x < 0 || x >= numRows || y < 0 || y >= numCols || matrix[x][y] !== word[i]) {
continue directionLoop;
}
x += dx;
y += dy;
if (reverse === 1 && i === Math.floor(word.length / 2) - 1) {
[x, y] = [row + dy * (word.length - 1), col + dx * (word.length - 1)];
[dx, dy] = [dy, dx];
}
}
return true;
}
}
}
}
return false;
}
let count = 0;
words.forEach(word => {
const paths = generatePaths(word);
for (const path of paths) {
if (isWordInMatrix(path)) {
count++;
break;
}
}
});
return count;
}Editor is loading...
Leave a Comment