utility-function-extractor/packages/utility-tools/src/process-input.js
NunoSempere b80199e940 feat: Have mergeSort return a bottleneck comparison
if it can't go on due to not enough comparisons
2022-06-17 13:40:31 -04:00

72 lines
2.2 KiB
JavaScript

// IMPORTS
import * as fs from "fs";
import { mergeSort } from "./mergeSort.js";
import { findDistancesFromAllElementsToAllReferencePoints } from "./findPaths.js";
import { aggregatePaths } from "./aggregatePaths.js";
// DEFS
const inputLinksFilePath = "./input/input-links.json";
const inputListFilePath = "./input/input-list.json";
const outputFilePath = "./output/output.json";
// HELPERS
const findElementPosition = (name, orderedList) => {
let node = orderedList.find((node) => node.name == name);
return node.position;
};
// MAIN
async function main() {
// read file
const inputLinksAsString = fs.readFileSync(inputLinksFilePath);
const inputListAsString = fs.readFileSync(inputListFilePath);
const links = JSON.parse(inputLinksAsString);
const list = JSON.parse(inputListAsString);
// process file
// const sources = links.map((link) => link.source);
// const targets = links.map((link) => link.target);
// const list = [...new Set([...sources, ...targets])];
// Merge sort
let mergeSortOutput = mergeSort({ list, links });
// console.log("Output: ");
if (mergeSortOutput.finishedOrderingList == false) {
console.log("Merge could not proceed");
console.group();
console.log("Elements which need to be compared:");
console.log(mergeSortOutput.uncomparedElements);
console.groupEnd();
} else {
let orderedList = mergeSortOutput.orderedList;
// console.log(orderedList);
console.log("Sorted output: ");
console.group();
console.log(orderedList.map((x) => x.name));
console.groupEnd();
console.log("");
// find Paths
let nodes = orderedList.map((element, i) => ({
...element,
position: i,
}));
const linksWithPosition = links.map((link) => ({
...link,
sourceElementPosition: findElementPosition(link.source, nodes),
targetElementPosition: findElementPosition(link.target, nodes),
}));
let paths = await findDistancesFromAllElementsToAllReferencePoints({
nodes,
links: linksWithPosition,
});
// console.log(JSON.stringify(paths, null, 4));
// Aggregate paths.
let aggregatedPaths = aggregatePaths(paths, nodes);
console.log(aggregatedPaths);
}
}
main();