intersections = xs => {
const clone1 = xs[0].slice(0).map(d => `${d.x},${d.y}`).sort()
const clone2 = xs[1].slice(0).map(d => `${d.x},${d.y}`).sort()
let dedupe1 = []
for(let i = 0; i < clone1.length-1; i++) {
if(clone1[i]!=clone1[i+1]) dedupe1.push(clone1[i])
}
let dedupe2 = []
for(let i = 0; i < clone2.length-1; i++) {
if(clone2[i]!=clone2[i+1]) dedupe2.push(clone2[i])
}
return dedupe1.concat(dedupe2)
.sort()
.reduce((acc, cur, idx, src) => idx > src.length-1 ? acc : src[idx]==src[idx+1] ? acc.concat(cur) : acc, [])
.map(d => { const str = d.split(","); return ({x: str[0], y: str[1]})})
.filter(d => !(d.x == 0 && d.y ==0))
}