/**
* @param {number[][]} workers
* @param {number[][]} bikes
* @return {number[]}
*/
/**
* @param {number[][]} workers
* @param {number[][]} bikes
* @return {number[]}
*/
const manDistance = (p1, p2) => {
return Math.abs(p1[0] - p2[0]) + Math.abs(p1[1] - p2[1])
}
var assignBikes = function (workers, bikes) {
const buckets = [],
bikesUsed = [],
res = []
workers.forEach((worker, i) => {
bikes.forEach((bike, j) => {
const dist = manDistance(worker, bike)
if (!buckets[dist]) buckets[dist] = []
buckets[dist].push([i, j])
})
})
const bucketLen = buckets.length
for (let i = 0; i < bucketLen; i++) {
const dist = buckets[i]
if (dist === undefined) continue
for (let j = 0; j < dist.length; j++) {
const w = dist[j][0],
b = dist[j][1]
if (bikesUsed[b] === true || res[w] !== undefined) continue
res[w] = b
bikesUsed[b] = true
}
}
return res
}
const workers = [
[0, 0],
[1, 1],
[2, 0],
],
bikes = [
[1, 0],
[2, 2],
]
//Test cases
console.log(assignBikes(workers, bikes))