import { find, indexOf, last, map, prop, reduce, sort } from 'rambda'; import { max } from 'ramda'; export const selectAlgorithms = (rows, preempt, flowShop) => { const processorsCount = rows.length; if (!processorsCount) return null; if (processorsCount === 1) { const existD = !!find(prop('d'), rows[0].jobs); const existAnc = !!find(({ anc }) => Array.isArray(anc) && anc.length, rows[0].jobs); if (existAnc) { return ['lawler']; } if (existD) { return ['moore', 'smith']; } return ['moore']; } if (flowShop) { let multi = ['campbel', 'grupt', 'palmer']; if (rows.length === 2) { multi.push('johnson'); } return multi; } let multi = ['vahy']; if (preempt) { multi.push('mcnaught'); } return multi; // const existAnc = find( // ({ jobs }) => !!find(({ anc }) => Array.isArray(anc) && anc.length, jobs), // rows); // // if (existAnc) { // return ['vahy']; // } // // return ['mcnaught']; // // let multi = ['campbel', 'grupt', 'palmer']; // // if (processorsCount === 2) { // multi.push('johnson'); // } // // if (preempt) { // multi.push('mcnaught'); // } // // return multi; }; export const najneomeskanejsiResult = (algoResults: []) => { if (!algoResults.length) return -1; const delaysSum = reduce((acc, processorJobs) => { const delays = reduce((acc, { delayed }) => acc + delayed, 0, processorJobs); return acc + delays; }, 0); const delaysTimes = map(delaysSum, algoResults); const sortedDelaysTimes = sort((a, b) => a - b, delaysTimes); return indexOf(sortedDelaysTimes[0], delaysTimes); }; export const fastestResult = (algoResults: []) => { if (!algoResults.length) return -1; const slowestProcessorEndTime = reduce((endTime, processorJobs) => { const lastEndTime = last(processorJobs).endTime; return max(lastEndTime, endTime); }, 0); const endTimes = map(slowestProcessorEndTime, algoResults); const sortedEndTimes = sort((a, b) => a - b, endTimes); return indexOf(sortedEndTimes[0], endTimes); };