código en javascript:
orangesRotting(grid) {
const directions = [[1, 0], [-1, 0], [0, 1], [0, -1]];
const rottenOranges = [];
let freshOranges = 0;
let minutesPassed = 0;
// Count fresh oranges and add rotten oranges to the queue
for (let i = 0; i < grid.length; i++) {
for (let j = 0; j < grid[0].length; j++) {
if (grid[i][j] === 1) {
freshOranges++;
}
if (grid[i][j] === 2) {
rottenOranges.push([i, j]);
}
}
}
if (freshOranges === 0) {
return 0; // No fresh oranges to rot
}
// BFS process to rot adjacent fresh oranges
while (rottenOranges.length > 0) {
const size = rottenOranges.length;
let newRotting = false;
for (let i = 0; i < size; i++) {
const [x, y] = rottenOranges.shift();
for (const [dx, dy] of directions) {
const nx = x + dx;
const ny = y + dy;
if (nx >= 0 && nx < grid.length && ny >= 0 && ny < grid[0].length && grid[nx][ny] === 1) {
grid[nx][ny] = 2;
freshOranges--;
rottenOranges.push([nx, ny]);
newRotting = true;
}
}
}
if (newRotting) {
minutesPassed++;
}
}
return freshOranges > 0 ? -1 : minutesPassed;
}
}