src/selectAlgorithm.js
b681b265
 import { find, indexOf, last, map, prop, reduce, sort } from 'rambda';
 import { max } from 'ramda';
 
8c7841d1
 export const selectAlgorithms = (rows, preempt, flowShop) => {
b681b265
   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'];
   }
 
8c7841d1
   if (flowShop) {
     let multi = ['campbel', 'grupt', 'palmer'];
     if (rows.length === 2) {
       multi.push('johnson');
     }
b681b265
 
8c7841d1
     return multi;
b681b265
   }
 
 
8c7841d1
   let multi = ['vahy'];
b681b265
 
   if (preempt) {
     multi.push('mcnaught');
   }
 
   return multi;
8c7841d1
 
   // 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;
b681b265
 };
 
 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);
 };