lowests_input = findLowests(input)
.lowests
.map(pos => {
let positions = [{y:pos.y, x:pos.x}]
let candidates = positions.slice()
let hs = [input[pos.y][pos.x]]
while(candidates.length > 0){
const current = candidates.shift()
let ns = findNeighboors(current.x, current.y, input)
.filter(candidate => !positions.every(p => p.x != candidate.x && p.y != candidate.y))
.filter(candidate => input[candidate.y][candidate.x] != 9)
.filter(candidate => input[candidate.y][candidate.x] > input[current.y][current.x])
candidates = candidates.concat(ns)
positions = positions.concat(ns)
ns.forEach(p => hs.push([p.y, p.x, input[p.y][p.x]]))
}
positions = [...new Set(positions.map(p => JSON.stringify(p)))].map(p => JSON.parse(p))
return {...pos, positions, hs}
})
.sort((b,a) => a.positions.length - b.positions.length)