function walk ([x, y], grid, polygon = []) {
const neighbors = getValidNeighbors(x, y)
neighbors.forEach( ([nx, ny]) => {
if (!grid[ny][nx]) {
return
}
grid[ny][nx] = 0
polygon.push([nx, ny])
walk([nx, ny], grid, polygon)
})
return [ [x, y], ...polygon ]
}