var buildMatrix = function(k, rowConditions, colConditions) { functioncreateOrder(conditions) { let theMap = newMap() for (let i = 1; i <= k; i++) { theMap.set(i, 0) } for (let [start, end] of conditions) { theMap.set(end, theMap.get(end) + 1) }
let queue = [] let order = [] for (let [key, value] of theMap) { if (value === 0) { queue.push(key) } }
while (queue.length > 0) { let n = queue.shift() order.push(n) for (let [start, end] of conditions) { if (start === n) { theMap.set(end, theMap.get(end) - 1) if (theMap.get(end) === 0) queue.push(end) } } }
return order }
let rowOrder = createOrder(rowConditions) let colOrder = createOrder(colConditions)
// If cycle if (rowOrder.length !== k || colOrder.length !== k) return []
let res = newArray(k).fill(0) for (let i = 0; i < k; i++) { res[i] = newArray(k).fill(0) res[i][colOrder.indexOf(rowOrder[i])] = rowOrder[i] }