Browse code

Bugs fixing

Cinan Rakosnik authored on 23/04/2018 at 22:02:56
Showing 25 changed files
... ...
@@ -7,27 +7,19 @@ import { filter, flatten, identity, map, pluck, range, times } from 'rambda';
7 7
 import uuid from 'uuid/v4';
8 8
 import { selectAlgorithms, fastestResult, najneomeskanejsiResult } from './selectAlgorithm';
9 9
 
10
-// const algoData = [
11
-//   [
12
-//     { startTime: 1, endTime: 3, processor: 1, name: 'UI dizajnér' },
13
-//     { startTime: 4, endTime: 6, processor: 1, name: 'UX dizajnér' },
14
-//     { startTime: 6, endTime: 10, processor: 1, name: 'UI dizajnér' },
15
-//   ]
16
-// ];
17
-//
18
-// const data = normalizeData(algoData);
19
-
20 10
 class App extends PureComponent {
21 11
   state = { ganttData: null };
22 12
 
23
-  onFormSubmit = ({ preempt, rows }) => {
24
-    const algorithmNames = selectAlgorithms(rows, preempt);
13
+  onFormSubmit = ({ preempt, flowShop, rows }) => {
14
+    const algorithmNames = selectAlgorithms(rows, preempt, flowShop == '1');
25 15
 
26 16
     if (!algorithmNames) {
27 17
       alert('Pre zvolenú konfiguráciu sa nenašiel vhodný algoritmus');
28 18
       return;
29 19
     }
30 20
 
21
+    console.log(algorithmNames);
22
+
31 23
     const results = map(algorithmName => {
32 24
       const algorithm = algorithms[algorithmName];
33 25
 
... ...
@@ -36,7 +28,12 @@ class App extends PureComponent {
36 36
       if (algorithmName === 'johnson' || algorithmName === 'palmer' || algorithmName === 'grupt' || algorithmName === 'campbel') {
37 37
         jobTimes = times(i => ({
38 38
           jobId: uuid(),
39
-          operations: map(j => ({ t: rows[j].jobs[i].t }), range(0, rows.length))
39
+          operations: map(j =>
40
+            rows[j].jobs[i] ? {
41
+              t: rows[j].jobs[i].t,
42
+              name: rows[j].jobs[i].name
43
+            } : undefined, range(0, rows.length)
44
+          )
40 45
         }), rows[0].jobs.length);
41 46
       } else if (algorithmName === 'mcnaught' || algorithmName === 'vahy') {
42 47
         jobTimes = flatten(pluck('jobs', rows));
... ...
@@ -61,6 +58,7 @@ class App extends PureComponent {
61 61
       // console.log(rows[1].jobs);
62 62
 
63 63
       const result = algorithm(jobTimes, rows.length);
64
+      console.log(result);
64 65
       return result;
65 66
     }, algorithmNames);
66 67
 
... ...
@@ -78,7 +76,7 @@ class App extends PureComponent {
78 78
 
79 79
     const ganttData = normalizeData(validResults[fastestIndex]);
80 80
 
81
-    console.log(validResults[fastestIndex]);
81
+    // console.log(validResults[fastestIndex]);
82 82
 
83 83
     this.setState({
84 84
       ganttData
... ...
@@ -92,7 +90,6 @@ class App extends PureComponent {
92 92
       <div style={{ padding: 20 }}>
93 93
         <Form onSubmit={this.onFormSubmit} />
94 94
         {ganttData && <Gantt data={ganttData}/>}
95
-        {/*<Gantt data={data} />*/}
96 95
       </div>
97 96
     );
98 97
   }
... ...
@@ -1,12 +1,11 @@
1 1
 import {
2
-  addIndex,
3 2
   find,
4 3
   map,
5 4
   propEq,
6 5
   reduce,
7 6
   range,
8 7
   times,
9
-  last
8
+  last, filter, identity
10 9
 } from 'rambda';
11 10
 import type { JobId } from '../../types';
12 11
 import { createSchedule as johnson, updateCTime } from '../johnson';
... ...
@@ -14,33 +13,30 @@ import { max } from 'ramda';
14 14
 
15 15
 type JobOperations = {
16 16
   jobId: JobId,
17
-  operations: Array<{ t: number }>
17
+  operations: Array<{ t: number, name: string }>
18 18
 };
19 19
 
20 20
 type JobOperationsWithC = {
21 21
   jobId: JobId,
22
-  operations: Array<{ t: number, c: number }>
22
+  operations: Array<{ t: number, c: number, name: string }>
23 23
 };
24 24
 
25
-export const fillCorrupted = (jobsOperations: JobOperations[]) => {
26
-  const maxOperationsCount = reduce((acc, { operations }) => max(operations.length, acc), 0, jobsOperations);
27
-
28
-  return map(
25
+export const fillCorrupted = (jobsOperations: JobOperations[], processorsCount) =>
26
+  map(
29 27
     ({ operations, ...rest }) => {
30 28
       const fixedOperations = [...operations];
31
-      fixedOperations.length = maxOperationsCount;
29
+      fixedOperations.length = processorsCount;
32 30
 
33 31
       return {
34 32
         ...rest,
35
-        operations: fixedOperations.fill({ t: 0 }, operations.length, maxOperationsCount)
33
+        operations: map(o => o || { t: 0 }, fixedOperations)
36 34
       };
37 35
     },
38 36
     jobsOperations
39
-  )
40
-};
37
+  );
41 38
 
42 39
 export const createSchedule = (jobsOperations: JobOperations[], processorsCount: number): JobOperationsWithC[] => {
43
-  jobsOperations = fillCorrupted(jobsOperations);
40
+  jobsOperations = fillCorrupted(jobsOperations, processorsCount);
44 41
 
45 42
   const allSchedules = map(k => {
46 43
     const jobsOperationsForK = map((jobsOperation: JobOperations) => {
... ...
@@ -57,8 +53,7 @@ export const createSchedule = (jobsOperations: JobOperations[], processorsCount:
57 57
 
58 58
     const jobsOperationsOrderTemplate = johnson(jobsOperationsForK);
59 59
 
60
-    const mapWithIndex = addIndex(map);
61
-    const jobsOperationsReordered = mapWithIndex((jobOperationTemplate, i) => {
60
+    const jobsOperationsReordered = map(jobOperationTemplate => {
62 61
       const { operations } = find(propEq('jobId', jobOperationTemplate.jobId), jobsOperations);
63 62
       return {
64 63
         jobId: jobOperationTemplate.jobId,
... ...
@@ -89,6 +84,7 @@ export default (jobsOperations: JobOperations[], processorsCount: number) => {
89 89
       processor: i + 1,
90 90
       startTime: jobTime.operations[i].c - jobTime.operations[i].t,
91 91
       endTime: jobTime.operations[i].c,
92
+      name: jobTime.operations[i].name
92 93
     }), schedule)
93 94
   , processorsCount);
94 95
 };
95 96
\ No newline at end of file
... ...
@@ -27,14 +27,14 @@ test('create schedule', () => {
27 27
 
28 28
 test('create gantt', () => {
29 29
   const jobsWithOperations = [
30
-    { jobId: 1, operations: [ { t: 12 }, { t: 8 }, { t: 11 } ] },
31
-    { jobId: 2, operations: [ { t: 6 }, { t: 13 }, { t: 19 } ] },
32
-    { jobId: 3, operations: [ { t: 15 }, { t: 10 }, { t: 18 } ] },
33
-    { jobId: 4, operations: [ { t: 16 }, { t: 7 }, { t: 21 } ] },
34
-    { jobId: 5, operations: [ { t: 4 }, { t: 4 }, { t: 20 } ] },
35
-    { jobId: 6, operations: [ { t: 3 }, { t: 12 }, { t: 13 } ] },
36
-    { jobId: 7, operations: [ { t: 17 }, { t: 6 }, { t: 8 } ] },
37
-    { jobId: 8, operations: [ { t: 10 }, { t: 2 }, { t: 25 } ] },
30
+    { jobId: 1, operations: [ { t: 12, name: 'a' }, { t: 8, name: 'b' }, { t: 11, name: 'c' } ] },
31
+    { jobId: 2, operations: [ { t: 6, name: 'a' }, { t: 13, name: 'b' }, { t: 19, name: 'c' } ] },
32
+    { jobId: 3, operations: [ { t: 15, name: 'a' }, { t: 10, name: 'b' }, { t: 18, name: 'c' } ] },
33
+    { jobId: 4, operations: [ { t: 16, name: 'a' }, { t: 7, name: 'b' }, { t: 21, name: 'c' } ] },
34
+    { jobId: 5, operations: [ { t: 4, name: 'a' }, { t: 4, name: 'b' }, { t: 20, name: 'c' } ] },
35
+    { jobId: 6, operations: [ { t: 3, name: 'a' }, { t: 12, name: 'b' }, { t: 13, name: 'c' } ] },
36
+    { jobId: 7, operations: [ { t: 17, name: 'a' }, { t: 6, name: 'b' }, { t: 8 , name: 'c'} ] },
37
+    { jobId: 8, operations: [ { t: 10, name: 'a' }, { t: 2, name: 'b' }, { t: 25, name: 'c' } ] },
38 38
   ];
39 39
 
40 40
   const template = createGantt(jobsWithOperations, 3);
... ...
@@ -44,30 +44,30 @@ test('create gantt', () => {
44 44
   expect(template[1].length).toBe(8);
45 45
   expect(template[2].length).toBe(8);
46 46
 
47
-  expect(template[0][0]).toEqual({ processor: 1, startTime: 0, endTime: 4 });
48
-  expect(template[0][1]).toEqual({ processor: 1, startTime: 4, endTime: 14 });
49
-  expect(template[0][2]).toEqual({ processor: 1, startTime: 14, endTime: 17 });
50
-  expect(template[0][3]).toEqual({ processor: 1, startTime: 17, endTime: 23 });
51
-  expect(template[0][4]).toEqual({ processor: 1, startTime: 23, endTime: 39 });
52
-  expect(template[0][5]).toEqual({ processor: 1, startTime: 39, endTime: 54 });
53
-  expect(template[0][6]).toEqual({ processor: 1, startTime: 54, endTime: 66 });
54
-  expect(template[0][7]).toEqual({ processor: 1, startTime: 66, endTime: 83 });
47
+  expect(template[0][0]).toEqual({ processor: 1, startTime: 0, endTime: 4, name: 'a' });
48
+  expect(template[0][1]).toEqual({ processor: 1, startTime: 4, endTime: 14, name: 'a' });
49
+  expect(template[0][2]).toEqual({ processor: 1, startTime: 14, endTime: 17, name: 'a' });
50
+  expect(template[0][3]).toEqual({ processor: 1, startTime: 17, endTime: 23, name: 'a' });
51
+  expect(template[0][4]).toEqual({ processor: 1, startTime: 23, endTime: 39, name: 'a' });
52
+  expect(template[0][5]).toEqual({ processor: 1, startTime: 39, endTime: 54, name: 'a' });
53
+  expect(template[0][6]).toEqual({ processor: 1, startTime: 54, endTime: 66, name: 'a' });
54
+  expect(template[0][7]).toEqual({ processor: 1, startTime: 66, endTime: 83, name: 'a' });
55 55
 
56
-  expect(template[1][0]).toEqual({ processor: 2, startTime: 4, endTime: 8 });
57
-  expect(template[1][1]).toEqual({ processor: 2, startTime: 14, endTime: 16 });
58
-  expect(template[1][2]).toEqual({ processor: 2, startTime: 17, endTime: 29 });
59
-  expect(template[1][3]).toEqual({ processor: 2, startTime: 29, endTime: 42 });
60
-  expect(template[1][4]).toEqual({ processor: 2, startTime: 42, endTime: 49 });
61
-  expect(template[1][5]).toEqual({ processor: 2, startTime: 54, endTime: 64 });
62
-  expect(template[1][6]).toEqual({ processor: 2, startTime: 66, endTime: 74 });
63
-  expect(template[1][7]).toEqual({ processor: 2, startTime: 83, endTime: 89 });
56
+  expect(template[1][0]).toEqual({ processor: 2, startTime: 4, endTime: 8, name: 'b' });
57
+  expect(template[1][1]).toEqual({ processor: 2, startTime: 14, endTime: 16, name: 'b' });
58
+  expect(template[1][2]).toEqual({ processor: 2, startTime: 17, endTime: 29, name: 'b' });
59
+  expect(template[1][3]).toEqual({ processor: 2, startTime: 29, endTime: 42, name: 'b' });
60
+  expect(template[1][4]).toEqual({ processor: 2, startTime: 42, endTime: 49, name: 'b' });
61
+  expect(template[1][5]).toEqual({ processor: 2, startTime: 54, endTime: 64, name: 'b' });
62
+  expect(template[1][6]).toEqual({ processor: 2, startTime: 66, endTime: 74, name: 'b' });
63
+  expect(template[1][7]).toEqual({ processor: 2, startTime: 83, endTime: 89, name: 'b' });
64 64
 
65
-  expect(template[2][0]).toEqual({ processor: 3, startTime: 8, endTime: 28 });
66
-  expect(template[2][1]).toEqual({ processor: 3, startTime: 28, endTime: 53 });
67
-  expect(template[2][2]).toEqual({ processor: 3, startTime: 53, endTime: 66 });
68
-  expect(template[2][3]).toEqual({ processor: 3, startTime: 66, endTime: 85 });
69
-  expect(template[2][4]).toEqual({ processor: 3, startTime: 85, endTime: 106 });
70
-  expect(template[2][5]).toEqual({ processor: 3, startTime: 106, endTime: 124 });
71
-  expect(template[2][6]).toEqual({ processor: 3, startTime: 124, endTime: 135 });
72
-  expect(template[2][7]).toEqual({ processor: 3, startTime: 135, endTime: 143 });
65
+  expect(template[2][0]).toEqual({ processor: 3, startTime: 8, endTime: 28, name: 'c' });
66
+  expect(template[2][1]).toEqual({ processor: 3, startTime: 28, endTime: 53, name: 'c' });
67
+  expect(template[2][2]).toEqual({ processor: 3, startTime: 53, endTime: 66, name: 'c' });
68
+  expect(template[2][3]).toEqual({ processor: 3, startTime: 66, endTime: 85, name: 'c' });
69
+  expect(template[2][4]).toEqual({ processor: 3, startTime: 85, endTime: 106, name: 'c' });
70
+  expect(template[2][5]).toEqual({ processor: 3, startTime: 106, endTime: 124, name: 'c' });
71
+  expect(template[2][6]).toEqual({ processor: 3, startTime: 124, endTime: 135, name: 'c' });
72
+  expect(template[2][7]).toEqual({ processor: 3, startTime: 135, endTime: 143, name: 'c' });
73 73
 });
74 74
\ No newline at end of file
... ...
@@ -6,16 +6,16 @@ import { fillCorrupted } from '../campbel';
6 6
 
7 7
 type JobOperations = {
8 8
   jobId: JobId,
9
-  operations: Array<{ t: number }>
9
+  operations: Array<{ t: number, name: string }>
10 10
 };
11 11
 
12 12
 type JobOperationsWithC = {
13 13
   jobId: JobId,
14
-  operations: Array<{ t: number, c: number }>
14
+  operations: Array<{ t: number, c: number, name: string }>
15 15
 };
16 16
 
17 17
 export const createSchedule = (jobsOperations: JobOperations[], processorsCount: number): JobOperationsWithC[] => {
18
-  jobsOperations = fillCorrupted(jobsOperations);
18
+  jobsOperations = fillCorrupted(jobsOperations, processorsCount);
19 19
 
20 20
   const jobsOperationsWithKoefs = map((jobsOperation: JobOperations) => {
21 21
     const ej = jobsOperation.operations[0].t < jobsOperation.operations[processorsCount - 1].t
... ...
@@ -51,6 +51,7 @@ export default (jobsOperations: JobOperations[], processorsCount: number) => {
51 51
       processor: i + 1,
52 52
       startTime: jobTime.operations[i].c - jobTime.operations[i].t,
53 53
       endTime: jobTime.operations[i].c,
54
+      name: jobTime.operations[i].name
54 55
     }), schedule)
55 56
   , processorsCount);
56 57
 };
57 58
\ No newline at end of file
... ...
@@ -27,14 +27,14 @@ test('create schedule', () => {
27 27
 
28 28
 test('create gantt', () => {
29 29
   const jobsWithOperations = [
30
-    { jobId: 1, operations: [ { t: 12 }, { t: 8 }, { t: 11 } ] },
31
-    { jobId: 2, operations: [ { t: 6 }, { t: 13 }, { t: 19 } ] },
32
-    { jobId: 3, operations: [ { t: 15 }, { t: 10 }, { t: 18 } ] },
33
-    { jobId: 4, operations: [ { t: 16 }, { t: 7 }, { t: 21 } ] },
34
-    { jobId: 5, operations: [ { t: 4 }, { t: 4 }, { t: 20 } ] },
35
-    { jobId: 6, operations: [ { t: 3 }, { t: 12 }, { t: 13 } ] },
36
-    { jobId: 7, operations: [ { t: 17 }, { t: 6 }, { t: 8 } ] },
37
-    { jobId: 8, operations: [ { t: 10 }, { t: 2 }, { t: 25 } ] },
30
+    { jobId: 1, operations: [ { t: 12, name: 'a' }, { t: 8 , name: 'b'}, { t: 11, name: 'c' } ] },
31
+    { jobId: 2, operations: [ { t: 6, name: 'a' }, { t: 13, name: 'b' }, { t: 19, name: 'c' } ] },
32
+    { jobId: 3, operations: [ { t: 15, name: 'a' }, { t: 10, name: 'b' }, { t: 18, name: 'c' } ] },
33
+    { jobId: 4, operations: [ { t: 16, name: 'a' }, { t: 7 , name: 'b'}, { t: 21, name: 'c' } ] },
34
+    { jobId: 5, operations: [ { t: 4, name: 'a' }, { t: 4 , name: 'b'}, { t: 20, name: 'c' } ] },
35
+    { jobId: 6, operations: [ { t: 3, name: 'a' }, { t: 12, name: 'b' }, { t: 13, name: 'c' } ] },
36
+    { jobId: 7, operations: [ { t: 17, name: 'a' }, { t: 6 , name: 'b'}, { t: 8, name: 'c' } ] },
37
+    { jobId: 8, operations: [ { t: 10, name: 'a' }, { t: 2 , name: 'b'}, { t: 25, name: 'c' } ] },
38 38
   ];
39 39
 
40 40
   const template = createGantt(jobsWithOperations, 3);
... ...
@@ -44,30 +44,30 @@ test('create gantt', () => {
44 44
   expect(template[1].length).toBe(8);
45 45
   expect(template[2].length).toBe(8);
46 46
 
47
-  expect(template[0][0]).toEqual({ processor: 1, startTime: 0, endTime: 4 });
48
-  expect(template[0][1]).toEqual({ processor: 1, startTime: 4, endTime: 14 });
49
-  expect(template[0][2]).toEqual({ processor: 1, startTime: 14, endTime: 17 });
50
-  expect(template[0][3]).toEqual({ processor: 1, startTime: 17, endTime: 23 });
51
-  expect(template[0][4]).toEqual({ processor: 1, startTime: 23, endTime: 39 });
52
-  expect(template[0][5]).toEqual({ processor: 1, startTime: 39, endTime: 54 });
53
-  expect(template[0][6]).toEqual({ processor: 1, startTime: 54, endTime: 66 });
54
-  expect(template[0][7]).toEqual({ processor: 1, startTime: 66, endTime: 83 });
47
+  expect(template[0][0]).toEqual({ processor: 1, startTime: 0, endTime: 4, name: 'a' });
48
+  expect(template[0][1]).toEqual({ processor: 1, startTime: 4, endTime: 14, name: 'a' });
49
+  expect(template[0][2]).toEqual({ processor: 1, startTime: 14, endTime: 17, name: 'a' });
50
+  expect(template[0][3]).toEqual({ processor: 1, startTime: 17, endTime: 23, name: 'a' });
51
+  expect(template[0][4]).toEqual({ processor: 1, startTime: 23, endTime: 39, name: 'a' });
52
+  expect(template[0][5]).toEqual({ processor: 1, startTime: 39, endTime: 54, name: 'a' });
53
+  expect(template[0][6]).toEqual({ processor: 1, startTime: 54, endTime: 66, name: 'a' });
54
+  expect(template[0][7]).toEqual({ processor: 1, startTime: 66, endTime: 83, name: 'a' });
55 55
 
56
-  expect(template[1][0]).toEqual({ processor: 2, startTime: 4, endTime: 8 });
57
-  expect(template[1][1]).toEqual({ processor: 2, startTime: 14, endTime: 16 });
58
-  expect(template[1][2]).toEqual({ processor: 2, startTime: 17, endTime: 29 });
59
-  expect(template[1][3]).toEqual({ processor: 2, startTime: 29, endTime: 42 });
60
-  expect(template[1][4]).toEqual({ processor: 2, startTime: 42, endTime: 49 });
61
-  expect(template[1][5]).toEqual({ processor: 2, startTime: 54, endTime: 64 });
62
-  expect(template[1][6]).toEqual({ processor: 2, startTime: 66, endTime: 74 });
63
-  expect(template[1][7]).toEqual({ processor: 2, startTime: 83, endTime: 89 });
56
+  expect(template[1][0]).toEqual({ processor: 2, startTime: 4, endTime: 8, name: 'b' });
57
+  expect(template[1][1]).toEqual({ processor: 2, startTime: 14, endTime: 16, name: 'b' });
58
+  expect(template[1][2]).toEqual({ processor: 2, startTime: 17, endTime: 29, name: 'b' });
59
+  expect(template[1][3]).toEqual({ processor: 2, startTime: 29, endTime: 42, name: 'b' });
60
+  expect(template[1][4]).toEqual({ processor: 2, startTime: 42, endTime: 49, name: 'b' });
61
+  expect(template[1][5]).toEqual({ processor: 2, startTime: 54, endTime: 64, name: 'b' });
62
+  expect(template[1][6]).toEqual({ processor: 2, startTime: 66, endTime: 74, name: 'b' });
63
+  expect(template[1][7]).toEqual({ processor: 2, startTime: 83, endTime: 89, name: 'b' });
64 64
 
65
-  expect(template[2][0]).toEqual({ processor: 3, startTime: 8, endTime: 28 });
66
-  expect(template[2][1]).toEqual({ processor: 3, startTime: 28, endTime: 53 });
67
-  expect(template[2][2]).toEqual({ processor: 3, startTime: 53, endTime: 66 });
68
-  expect(template[2][3]).toEqual({ processor: 3, startTime: 66, endTime: 85 });
69
-  expect(template[2][4]).toEqual({ processor: 3, startTime: 85, endTime: 106 });
70
-  expect(template[2][5]).toEqual({ processor: 3, startTime: 106, endTime: 124 });
71
-  expect(template[2][6]).toEqual({ processor: 3, startTime: 124, endTime: 135 });
72
-  expect(template[2][7]).toEqual({ processor: 3, startTime: 135, endTime: 143 });
65
+  expect(template[2][0]).toEqual({ processor: 3, startTime: 8, endTime: 28, name: 'c' });
66
+  expect(template[2][1]).toEqual({ processor: 3, startTime: 28, endTime: 53, name: 'c' });
67
+  expect(template[2][2]).toEqual({ processor: 3, startTime: 53, endTime: 66, name: 'c' });
68
+  expect(template[2][3]).toEqual({ processor: 3, startTime: 66, endTime: 85, name: 'c' });
69
+  expect(template[2][4]).toEqual({ processor: 3, startTime: 85, endTime: 106, name: 'c' });
70
+  expect(template[2][5]).toEqual({ processor: 3, startTime: 106, endTime: 124, name: 'c' });
71
+  expect(template[2][6]).toEqual({ processor: 3, startTime: 124, endTime: 135, name: 'c' });
72
+  expect(template[2][7]).toEqual({ processor: 3, startTime: 135, endTime: 143, name: 'c' });
73 73
 });
74 74
\ No newline at end of file
... ...
@@ -8,12 +8,12 @@ import { fillCorrupted } from '../campbel';
8 8
 
9 9
 type JobOperations = {
10 10
   jobId: JobId,
11
-  operations: [{ t: number }, { t: number }]
11
+  operations: [{ t: number, name: string }, { t: number, name: string }]
12 12
 };
13 13
 
14 14
 type JobOperationsWithC = {
15 15
   jobId: JobId,
16
-  operations: [{ t: number, c: number }, { t: number, c: number }]
16
+  operations: [{ t: number, c: number, name: string }, { t: number, c: number, name: string }]
17 17
 };
18 18
 
19 19
 const findMinT = (operations) =>
... ...
@@ -73,7 +73,7 @@ export const updateCTime = (jobsOperations: JobOperations[], processorCount: num
73 73
 };
74 74
 
75 75
 export const createSchedule = (jobsOperations: JobOperations[]): JobOperationsWithC[] => {
76
-  jobsOperations = fillCorrupted(jobsOperations);
76
+  jobsOperations = fillCorrupted(jobsOperations, 2);
77 77
 
78 78
   let I = jobsOperations;
79 79
   let L = [[], []];
... ...
@@ -102,6 +102,7 @@ export default (jobsOperations: JobOperations[]) => {
102 102
       processor: i + 1,
103 103
       startTime: jobTime.operations[i].c - jobTime.operations[i].t,
104 104
       endTime: jobTime.operations[i].c,
105
+      name: jobTime.operations[i].name
105 106
     }), schedule)
106 107
   , 2);
107 108
 };
108 109
\ No newline at end of file
... ...
@@ -31,16 +31,16 @@ test('create schedule', () => {
31 31
 
32 32
 test('create gantt', () => {
33 33
   const jobsWithOperations = [
34
-    { jobId: 1, operations: [ { t: 15 }, { t: 11 } ] },
35
-    { jobId: 2, operations: [ { t: 20 }, { t: 15 } ] },
36
-    { jobId: 3, operations: [ { t: 35 }, { t: 5 } ] },
37
-    { jobId: 4, operations: [ { t: 10 }, { t: 31 } ] },
38
-    { jobId: 5, operations: [ { t: 18 }, { t: 16 } ] },
39
-    { jobId: 6, operations: [ { t: 17 }, { t: 26 } ] },
40
-    { jobId: 7, operations: [ { t: 9 }, { t: 32 } ] },
41
-    { jobId: 8, operations: [ { t: 44 }, { t: 6 } ] },
42
-    { jobId: 9, operations: [ { t: 29 }, { t: 18 } ] },
43
-    { jobId: 10, operations: [ { t: 21 }, { t: 22 } ] },
34
+    { jobId: 1, operations: [ { t: 15, name: 'a' }, { t: 11, name: 'b'  } ] },
35
+    { jobId: 2, operations: [ { t: 20, name: 'a' }, { t: 15, name: 'b'  } ] },
36
+    { jobId: 3, operations: [ { t: 35, name: 'a' }, { t: 5 , name: 'b' } ] },
37
+    { jobId: 4, operations: [ { t: 10, name: 'a' }, { t: 31, name: 'b'  } ] },
38
+    { jobId: 5, operations: [ { t: 18, name: 'a' }, { t: 16, name: 'b'  } ] },
39
+    { jobId: 6, operations: [ { t: 17, name: 'a' }, { t: 26, name: 'b'  } ] },
40
+    { jobId: 7, operations: [ { t: 9, name: 'a' }, { t: 32, name: 'b'  } ] },
41
+    { jobId: 8, operations: [ { t: 44, name: 'a' }, { t: 6 , name: 'b' } ] },
42
+    { jobId: 9, operations: [ { t: 29, name: 'a' }, { t: 18, name: 'b'  } ] },
43
+    { jobId: 10, operations: [ { t: 21, name: 'a' }, { t: 22, name: 'b'  } ] },
44 44
   ];
45 45
 
46 46
   const template = createGantt(jobsWithOperations);
... ...
@@ -49,25 +49,25 @@ test('create gantt', () => {
49 49
   expect(template[0].length).toBe(10);
50 50
   expect(template[1].length).toBe(10);
51 51
 
52
-  expect(template[0][0]).toEqual({ processor: 1, startTime: 0, endTime: 9 });
53
-  expect(template[0][1]).toEqual({ processor: 1, startTime: 9, endTime: 19 });
54
-  expect(template[0][2]).toEqual({ processor: 1, startTime: 19, endTime: 36 });
55
-  expect(template[0][3]).toEqual({ processor: 1, startTime: 36, endTime: 57 });
56
-  expect(template[0][4]).toEqual({ processor: 1, startTime: 57, endTime: 86 });
57
-  expect(template[0][5]).toEqual({ processor: 1, startTime: 86, endTime: 104 });
58
-  expect(template[0][6]).toEqual({ processor: 1, startTime: 104, endTime: 124 });
59
-  expect(template[0][7]).toEqual({ processor: 1, startTime: 124, endTime: 139 });
60
-  expect(template[0][8]).toEqual({ processor: 1, startTime: 139, endTime: 183 });
61
-  expect(template[0][9]).toEqual({ processor: 1, startTime: 183, endTime: 218 });
52
+  expect(template[0][0]).toEqual({ processor: 1, startTime: 0, endTime: 9, name: 'a' });
53
+  expect(template[0][1]).toEqual({ processor: 1, startTime: 9, endTime: 19, name: 'a' });
54
+  expect(template[0][2]).toEqual({ processor: 1, startTime: 19, endTime: 36, name: 'a' });
55
+  expect(template[0][3]).toEqual({ processor: 1, startTime: 36, endTime: 57, name: 'a' });
56
+  expect(template[0][4]).toEqual({ processor: 1, startTime: 57, endTime: 86, name: 'a' });
57
+  expect(template[0][5]).toEqual({ processor: 1, startTime: 86, endTime: 104, name: 'a' });
58
+  expect(template[0][6]).toEqual({ processor: 1, startTime: 104, endTime: 124, name: 'a' });
59
+  expect(template[0][7]).toEqual({ processor: 1, startTime: 124, endTime: 139, name: 'a' });
60
+  expect(template[0][8]).toEqual({ processor: 1, startTime: 139, endTime: 183, name: 'a' });
61
+  expect(template[0][9]).toEqual({ processor: 1, startTime: 183, endTime: 218, name: 'a' });
62 62
 
63
-  expect(template[1][0]).toEqual({ processor: 2, startTime: 9, endTime: 41 });
64
-  expect(template[1][1]).toEqual({ processor: 2, startTime: 41, endTime: 72 });
65
-  expect(template[1][2]).toEqual({ processor: 2, startTime: 72, endTime: 98 });
66
-  expect(template[1][3]).toEqual({ processor: 2, startTime: 98, endTime: 120 });
67
-  expect(template[1][4]).toEqual({ processor: 2, startTime: 120, endTime: 138 });
68
-  expect(template[1][5]).toEqual({ processor: 2, startTime: 138, endTime: 154 });
69
-  expect(template[1][6]).toEqual({ processor: 2, startTime: 154, endTime: 169 });
70
-  expect(template[1][7]).toEqual({ processor: 2, startTime: 169, endTime: 180 });
71
-  expect(template[1][8]).toEqual({ processor: 2, startTime: 183, endTime: 189 });
72
-  expect(template[1][9]).toEqual({ processor: 2, startTime: 218, endTime: 223 });
63
+  expect(template[1][0]).toEqual({ processor: 2, startTime: 9, endTime: 41, name: 'b' });
64
+  expect(template[1][1]).toEqual({ processor: 2, startTime: 41, endTime: 72, name: 'b' });
65
+  expect(template[1][2]).toEqual({ processor: 2, startTime: 72, endTime: 98, name: 'b' });
66
+  expect(template[1][3]).toEqual({ processor: 2, startTime: 98, endTime: 120, name: 'b' });
67
+  expect(template[1][4]).toEqual({ processor: 2, startTime: 120, endTime: 138, name: 'b' });
68
+  expect(template[1][5]).toEqual({ processor: 2, startTime: 138, endTime: 154, name: 'b' });
69
+  expect(template[1][6]).toEqual({ processor: 2, startTime: 154, endTime: 169, name: 'b' });
70
+  expect(template[1][7]).toEqual({ processor: 2, startTime: 169, endTime: 180, name: 'b' });
71
+  expect(template[1][8]).toEqual({ processor: 2, startTime: 183, endTime: 189, name: 'b' });
72
+  expect(template[1][9]).toEqual({ processor: 2, startTime: 218, endTime: 223, name: 'b' });
73 73
 });
74 74
\ No newline at end of file
... ...
@@ -7,6 +7,7 @@ import { max, remove } from 'ramda';
7 7
 
8 8
 type JobTime = {
9 9
   jobId: JobId,
10
+  name: string,
10 11
   t: number,
11 12
   d: number,
12 13
   w: number,
... ...
@@ -80,7 +81,8 @@ export default (jobs: JobTime[]) => {
80 80
     processor: 1,
81 81
     startTime: jobTime.c - jobTime.t,
82 82
     endTime: jobTime.c,
83
-    delayed: max(0, jobTime.c - jobTime.d)
83
+    delayed: max(0, jobTime.c - jobTime.d),
84
+    name: jobTime.name
84 85
   }), schedule);
85 86
 
86 87
   return [normalizedSchedule];
... ...
@@ -33,32 +33,32 @@ test('create schedule', () => {
33 33
 
34 34
 test('create gantt', () => {
35 35
   const jobs = [
36
-    { jobId: 1, t: 8, d: 11, anc: [], w: 1 },
37
-    { jobId: 2, t: 5, d: 9, anc: [], w: 1 },
38
-    { jobId: 3, t: 6, d: 10, anc: [], w: 3 },
39
-    { jobId: 4, t: 5, d: 14, anc: [1], w: 2 },
40
-    { jobId: 5, t: 9, d: 19, anc: [1], w: 1 },
41
-    { jobId: 6, t: 3, d: 14, anc: [2, 3, 4], w: 1 },
42
-    { jobId: 7, t: 9, d: 36, anc: [2, 3, 4], w: 2 },
43
-    { jobId: 8, t: 5, d: 39, anc: [2, 3, 4], w: 2 },
44
-    { jobId: 9, t: 8, d: 31, anc: [5, 6], w: 1 },
45
-    { jobId: 10, t: 5, d: 59, anc: [7], w: 2 },
46
-    { jobId: 11, t: 5, d: 61, anc: [8], w: 3 },
36
+    { jobId: 1, t: 8, d: 11, anc: [], w: 1, name: 'a' },
37
+    { jobId: 2, t: 5, d: 9, anc: [], w: 1, name: 'b' },
38
+    { jobId: 3, t: 6, d: 10, anc: [], w: 3, name: 'c' },
39
+    { jobId: 4, t: 5, d: 14, anc: [1], w: 2, name: 'd' },
40
+    { jobId: 5, t: 9, d: 19, anc: [1], w: 1, name: 'e' },
41
+    { jobId: 6, t: 3, d: 14, anc: [2, 3, 4], w: 1, name: 'f' },
42
+    { jobId: 7, t: 9, d: 36, anc: [2, 3, 4], w: 2, name: 'g' },
43
+    { jobId: 8, t: 5, d: 39, anc: [2, 3, 4], w: 2, name: 'h' },
44
+    { jobId: 9, t: 8, d: 31, anc: [5, 6], w: 1, name: 'i' },
45
+    { jobId: 10, t: 5, d: 59, anc: [7], w: 2, name: 'j' },
46
+    { jobId: 11, t: 5, d: 61, anc: [8], w: 3, name: 'k' },
47 47
   ];
48 48
 
49 49
   const template = createGantt(jobs);
50 50
 
51 51
   expect(template.length).toBe(1);
52 52
   expect(template[0].length).toBe(11);
53
-  expect(template[0][0]).toEqual({ processor: 1, startTime: 0, endTime: 6, delayed: 0 });
54
-  expect(template[0][1]).toEqual({ processor: 1, startTime: 6, endTime: 14, delayed: 3 });
55
-  expect(template[0][2]).toEqual({ processor: 1, startTime: 14, endTime: 19, delayed: 5 });
56
-  expect(template[0][3]).toEqual({ processor: 1, startTime: 19, endTime: 24, delayed: 15 });
57
-  expect(template[0][4]).toEqual({ processor: 1, startTime: 24, endTime: 27, delayed: 13 });
58
-  expect(template[0][5]).toEqual({ processor: 1, startTime: 27, endTime: 36, delayed: 17 });
59
-  expect(template[0][6]).toEqual({ processor: 1, startTime: 36, endTime: 45, delayed: 9 });
60
-  expect(template[0][7]).toEqual({ processor: 1, startTime: 45, endTime: 50, delayed: 11 });
61
-  expect(template[0][8]).toEqual({ processor: 1, startTime: 50, endTime: 58, delayed: 27 });
62
-  expect(template[0][9]).toEqual({ processor: 1, startTime: 58, endTime: 63, delayed: 2 });
63
-  expect(template[0][10]).toEqual({ processor: 1, startTime: 63, endTime: 68, delayed: 9 });
53
+  expect(template[0][0]).toEqual({ processor: 1, startTime: 0, endTime: 6, delayed: 0, name: 'c' });
54
+  expect(template[0][1]).toEqual({ processor: 1, startTime: 6, endTime: 14, delayed: 3, name: 'a' });
55
+  expect(template[0][2]).toEqual({ processor: 1, startTime: 14, endTime: 19, delayed: 5, name: 'd' });
56
+  expect(template[0][3]).toEqual({ processor: 1, startTime: 19, endTime: 24, delayed: 15, name: 'b' });
57
+  expect(template[0][4]).toEqual({ processor: 1, startTime: 24, endTime: 27, delayed: 13, name: 'f' });
58
+  expect(template[0][5]).toEqual({ processor: 1, startTime: 27, endTime: 36, delayed: 17, name: 'e' });
59
+  expect(template[0][6]).toEqual({ processor: 1, startTime: 36, endTime: 45, delayed: 9, name: 'g' });
60
+  expect(template[0][7]).toEqual({ processor: 1, startTime: 45, endTime: 50, delayed: 11, name: 'h' });
61
+  expect(template[0][8]).toEqual({ processor: 1, startTime: 50, endTime: 58, delayed: 27, name: 'i' });
62
+  expect(template[0][9]).toEqual({ processor: 1, startTime: 58, endTime: 63, delayed: 2, name: 'k' });
63
+  expect(template[0][10]).toEqual({ processor: 1, startTime: 63, endTime: 68, delayed: 9, name: 'j' });
64 64
 });
65 65
\ No newline at end of file
... ...
@@ -4,7 +4,8 @@ import { groupBy, max } from 'ramda';
4 4
 
5 5
 type JobTime = {
6 6
   jobId: JobId,
7
-  t: number
7
+  t: number,
8
+  name: string
8 9
 };
9 10
 
10 11
 type JobTimeAssigned = JobTime | {
... ...
@@ -74,6 +75,7 @@ export default (jobs: JobTime[], processorCount: number) => {
74 74
   return map(map((job: JobTimeAssignedWithC) => ({
75 75
     processor: job.processor,
76 76
     startTime: job.c - job.t,
77
-    endTime: job.c
77
+    endTime: job.c,
78
+    name: job.name
78 79
   })), grouped);
79 80
 };
80 81
\ No newline at end of file
... ...
@@ -23,11 +23,11 @@ test('create schedule', () => {
23 23
 
24 24
 test('create gantt', () => {
25 25
   const jobs = [
26
-    { jobId: 1, t: 3 },
27
-    { jobId: 2, t: 9 },
28
-    { jobId: 3, t: 5 },
29
-    { jobId: 4, t: 7 },
30
-    { jobId: 5, t: 6 },
26
+    { jobId: 1, t: 3, name: 'a' },
27
+    { jobId: 2, t: 9, name: 'b' },
28
+    { jobId: 3, t: 5, name: 'c' },
29
+    { jobId: 4, t: 7, name: 'd' },
30
+    { jobId: 5, t: 6, name: 'e' },
31 31
   ];
32 32
 
33 33
   const template = createGantt(jobs, 3);
... ...
@@ -36,11 +36,11 @@ test('create gantt', () => {
36 36
   expect(template[0].length).toBe(2);
37 37
   expect(template[1].length).toBe(3);
38 38
   expect(template[2].length).toBe(2);
39
-  expect(template[0][0]).toEqual({ processor: 1, startTime: 0, endTime: 3 });
40
-  expect(template[0][1]).toEqual({ processor: 1, startTime: 3, endTime: 10 });
41
-  expect(template[1][0]).toEqual({ processor: 2, startTime: 0, endTime: 2 });
42
-  expect(template[1][1]).toEqual({ processor: 2, startTime: 2, endTime: 7 });
43
-  expect(template[1][2]).toEqual({ processor: 2, startTime: 7, endTime: 10 });
44
-  expect(template[2][0]).toEqual({ processor: 3, startTime: 0, endTime: 4 });
45
-  expect(template[2][1]).toEqual({ processor: 3, startTime: 4, endTime: 10 });
39
+  expect(template[0][0]).toEqual({ processor: 1, startTime: 0, endTime: 3 , name: 'a'});
40
+  expect(template[0][1]).toEqual({ processor: 1, startTime: 3, endTime: 10, name: 'b' });
41
+  expect(template[1][0]).toEqual({ processor: 2, startTime: 0, endTime: 2 , name: 'b'});
42
+  expect(template[1][1]).toEqual({ processor: 2, startTime: 2, endTime: 7 , name: 'c'});
43
+  expect(template[1][2]).toEqual({ processor: 2, startTime: 7, endTime: 10, name: 'd' });
44
+  expect(template[2][0]).toEqual({ processor: 3, startTime: 0, endTime: 4 , name: 'd'});
45
+  expect(template[2][1]).toEqual({ processor: 3, startTime: 4, endTime: 10, name: 'e' });
46 46
 });
47 47
\ No newline at end of file
... ...
@@ -6,6 +6,7 @@ type JobTime = {
6 6
   jobId: JobId,
7 7
   t: number,
8 8
   d: number,
9
+  name: string
9 10
 };
10 11
 
11 12
 const findLateJob = (jobTimes: JobTime[]) =>
... ...
@@ -68,7 +69,8 @@ export default (jobs: JobTime[]) => {
68 68
     processor: 1,
69 69
     startTime: jobTime.c - jobTime.t,
70 70
     endTime: jobTime.c,
71
-    delayed: max(0, jobTime.c - jobTime.d)
71
+    delayed: max(0, jobTime.c - jobTime.d),
72
+    name: jobTime.name
72 73
   }), schedule);
73 74
 
74 75
   return [normalizedSchedule];
... ...
@@ -29,28 +29,28 @@ test('create schedule', () => {
29 29
 
30 30
 test('create gantt', () => {
31 31
   const jobs = [
32
-    { jobId: 1, t: 6, d: 10 },
33
-    { jobId: 2, t: 8, d: 25 },
34
-    { jobId: 3, t: 4, d: 20 },
35
-    { jobId: 4, t: 6, d: 18 },
36
-    { jobId: 5, t: 7, d: 20 },
37
-    { jobId: 6, t: 4, d: 40 },
38
-    { jobId: 7, t: 3, d: 35 },
39
-    { jobId: 8, t: 6, d: 42 },
40
-    { jobId: 9, t: 5, d: 25 },
32
+    { jobId: 1, t: 6, d: 10, name: 'a' },
33
+    { jobId: 2, t: 8, d: 25, name: 'b' },
34
+    { jobId: 3, t: 4, d: 20, name: 'c' },
35
+    { jobId: 4, t: 6, d: 18, name: 'd' },
36
+    { jobId: 5, t: 7, d: 20, name: 'e' },
37
+    { jobId: 6, t: 4, d: 40, name: 'f' },
38
+    { jobId: 7, t: 3, d: 35, name: 'g' },
39
+    { jobId: 8, t: 6, d: 42, name: 'h' },
40
+    { jobId: 9, t: 5, d: 25, name: 'i' },
41 41
   ];
42 42
 
43 43
   const template = createGantt(jobs);
44 44
 
45 45
   expect(template.length).toBe(1);
46 46
   expect(template[0].length).toBe(9);
47
-  expect(template[0][0]).toEqual({ processor: 1, startTime: 0, endTime: 6, delayed: 0 });
48
-  expect(template[0][1]).toEqual({ processor: 1, startTime: 6, endTime: 12, delayed: 0 });
49
-  expect(template[0][2]).toEqual({ processor: 1, startTime: 12, endTime: 16, delayed: 0 });
50
-  expect(template[0][3]).toEqual({ processor: 1, startTime: 16, endTime: 21, delayed: 0 });
51
-  expect(template[0][4]).toEqual({ processor: 1, startTime: 21, endTime: 24, delayed: 0 });
52
-  expect(template[0][5]).toEqual({ processor: 1, startTime: 24, endTime: 28, delayed: 0 });
53
-  expect(template[0][6]).toEqual({ processor: 1, startTime: 28, endTime: 34, delayed: 0 });
54
-  expect(template[0][7]).toEqual({ processor: 1, startTime: 34, endTime: 41, delayed: 21 });
55
-  expect(template[0][8]).toEqual({ processor: 1, startTime: 41, endTime: 49, delayed: 24 });
47
+  expect(template[0][0]).toEqual({ processor: 1, startTime: 0, endTime: 6, delayed: 0, name: 'a' });
48
+  expect(template[0][1]).toEqual({ processor: 1, startTime: 6, endTime: 12, delayed: 0, name: 'd' });
49
+  expect(template[0][2]).toEqual({ processor: 1, startTime: 12, endTime: 16, delayed: 0, name: 'c' });
50
+  expect(template[0][3]).toEqual({ processor: 1, startTime: 16, endTime: 21, delayed: 0, name: 'i' });
51
+  expect(template[0][4]).toEqual({ processor: 1, startTime: 21, endTime: 24, delayed: 0, name: 'g' });
52
+  expect(template[0][5]).toEqual({ processor: 1, startTime: 24, endTime: 28, delayed: 0, name: 'f' });
53
+  expect(template[0][6]).toEqual({ processor: 1, startTime: 28, endTime: 34, delayed: 0, name: 'h' });
54
+  expect(template[0][7]).toEqual({ processor: 1, startTime: 34, endTime: 41, delayed: 21, name: 'e' });
55
+  expect(template[0][8]).toEqual({ processor: 1, startTime: 41, endTime: 49, delayed: 24, name: 'b' });
56 56
 });
57 57
\ No newline at end of file
... ...
@@ -7,16 +7,16 @@ import { fillCorrupted } from '../campbel';
7 7
 
8 8
 type JobOperations = {
9 9
   jobId: JobId,
10
-  operations: Array<{ t: number }>
10
+  operations: Array<{ t: number, name: string }>
11 11
 };
12 12
 
13 13
 type JobOperationsWithC = {
14 14
   jobId: JobId,
15
-  operations: Array<{ t: number, c: number }>
15
+  operations: Array<{ t: number, c: number, name: string }>
16 16
 };
17 17
 
18 18
 export const createSchedule = (jobsOperations: JobOperations[], processorsCount: number): JobOperationsWithC[] => {
19
-  jobsOperations = fillCorrupted(jobsOperations);
19
+  jobsOperations = fillCorrupted(jobsOperations, processorsCount);
20 20
 
21 21
   const jobsOperationsWithKoefs = map(jobsOperation => {
22 22
     const koef = reduce(
... ...
@@ -48,6 +48,7 @@ export default (jobsOperations: JobOperations[], processorsCount: number) => {
48 48
       processor: i + 1,
49 49
       startTime: jobTime.operations[i].c - jobTime.operations[i].t,
50 50
       endTime: jobTime.operations[i].c,
51
+      name: jobTime.operations[i].name
51 52
     }), schedule)
52 53
   , processorsCount);
53 54
 };
54 55
\ No newline at end of file
... ...
@@ -27,14 +27,14 @@ test('create schedule', () => {
27 27
 
28 28
 test('create gantt', () => {
29 29
   const jobsWithOperations = [
30
-    { jobId: 1, operations: [ { t: 12 }, { t: 8 }, { t: 11 } ] },
31
-    { jobId: 2, operations: [ { t: 6 }, { t: 13 }, { t: 19 } ] },
32
-    { jobId: 3, operations: [ { t: 15 }, { t: 10 }, { t: 18 } ] },
33
-    { jobId: 4, operations: [ { t: 16 }, { t: 7 }, { t: 21 } ] },
34
-    { jobId: 5, operations: [ { t: 4 }, { t: 4 }, { t: 20 } ] },
35
-    { jobId: 6, operations: [ { t: 3 }, { t: 12 }, { t: 13 } ] },
36
-    { jobId: 7, operations: [ { t: 17 }, { t: 6 }, { t: 8 } ] },
37
-    { jobId: 8, operations: [ { t: 10 }, { t: 2 }, { t: 25 } ] },
30
+    { jobId: 1, operations: [ { t: 12, name: 'a' }, { t: 8 , name: 'b' }, { t: 11, name: 'c' } ] },
31
+    { jobId: 2, operations: [ { t: 6, name: 'a' }, { t: 13, name: 'b'  }, { t: 19, name: 'c' } ] },
32
+    { jobId: 3, operations: [ { t: 15, name: 'a' }, { t: 10, name: 'b'  }, { t: 18, name: 'c' } ] },
33
+    { jobId: 4, operations: [ { t: 16, name: 'a' }, { t: 7 , name: 'b' }, { t: 21, name: 'c' } ] },
34
+    { jobId: 5, operations: [ { t: 4, name: 'a' }, { t: 4 , name: 'b' }, { t: 20, name: 'c' } ] },
35
+    { jobId: 6, operations: [ { t: 3, name: 'a' }, { t: 12, name: 'b'  }, { t: 13, name: 'c' } ] },
36
+    { jobId: 7, operations: [ { t: 17, name: 'a' }, { t: 6 , name: 'b' }, { t: 8, name: 'c' } ] },
37
+    { jobId: 8, operations: [ { t: 10, name: 'a' }, { t: 2 , name: 'b' }, { t: 25, name: 'c' } ] },
38 38
   ];
39 39
 
40 40
   const template = createGantt(jobsWithOperations, 3);
... ...
@@ -44,30 +44,30 @@ test('create gantt', () => {
44 44
   expect(template[1].length).toBe(8);
45 45
   expect(template[2].length).toBe(8);
46 46
 
47
-  expect(template[0][0]).toEqual({ processor: 1, startTime: 0, endTime: 16 });
48
-  expect(template[0][1]).toEqual({ processor: 1, startTime: 16, endTime: 26 });
49
-  expect(template[0][2]).toEqual({ processor: 1, startTime: 26, endTime: 41 });
50
-  expect(template[0][3]).toEqual({ processor: 1, startTime: 41, endTime: 47 });
51
-  expect(template[0][4]).toEqual({ processor: 1, startTime: 47, endTime: 64 });
52
-  expect(template[0][5]).toEqual({ processor: 1, startTime: 64, endTime: 68 });
53
-  expect(template[0][6]).toEqual({ processor: 1, startTime: 68, endTime: 80 });
54
-  expect(template[0][7]).toEqual({ processor: 1, startTime: 80, endTime: 83 });
47
+  expect(template[0][0]).toEqual({ processor: 1, startTime: 0, endTime: 16, name: 'a' });
48
+  expect(template[0][1]).toEqual({ processor: 1, startTime: 16, endTime: 26, name: 'a' });
49
+  expect(template[0][2]).toEqual({ processor: 1, startTime: 26, endTime: 41, name: 'a' });
50
+  expect(template[0][3]).toEqual({ processor: 1, startTime: 41, endTime: 47, name: 'a' });
51
+  expect(template[0][4]).toEqual({ processor: 1, startTime: 47, endTime: 64, name: 'a' });
52
+  expect(template[0][5]).toEqual({ processor: 1, startTime: 64, endTime: 68, name: 'a' });
53
+  expect(template[0][6]).toEqual({ processor: 1, startTime: 68, endTime: 80, name: 'a' });
54
+  expect(template[0][7]).toEqual({ processor: 1, startTime: 80, endTime: 83, name: 'a' });
55 55
 
56
-  expect(template[1][0]).toEqual({ processor: 2, startTime: 16, endTime: 23 });
57
-  expect(template[1][1]).toEqual({ processor: 2, startTime: 26, endTime: 28 });
58
-  expect(template[1][2]).toEqual({ processor: 2, startTime: 41, endTime: 51 });
59
-  expect(template[1][3]).toEqual({ processor: 2, startTime: 51, endTime: 64 });
60
-  expect(template[1][4]).toEqual({ processor: 2, startTime: 64, endTime: 70 });
61
-  expect(template[1][5]).toEqual({ processor: 2, startTime: 70, endTime: 74 });
62
-  expect(template[1][6]).toEqual({ processor: 2, startTime: 80, endTime: 88 });
63
-  expect(template[1][7]).toEqual({ processor: 2, startTime: 88, endTime: 100 });
56
+  expect(template[1][0]).toEqual({ processor: 2, startTime: 16, endTime: 23, name: 'b' });
57
+  expect(template[1][1]).toEqual({ processor: 2, startTime: 26, endTime: 28, name: 'b' });
58
+  expect(template[1][2]).toEqual({ processor: 2, startTime: 41, endTime: 51, name: 'b' });
59
+  expect(template[1][3]).toEqual({ processor: 2, startTime: 51, endTime: 64, name: 'b' });
60
+  expect(template[1][4]).toEqual({ processor: 2, startTime: 64, endTime: 70, name: 'b' });
61
+  expect(template[1][5]).toEqual({ processor: 2, startTime: 70, endTime: 74, name: 'b' });
62
+  expect(template[1][6]).toEqual({ processor: 2, startTime: 80, endTime: 88, name: 'b' });
63
+  expect(template[1][7]).toEqual({ processor: 2, startTime: 88, endTime: 100, name: 'b' });
64 64
 
65
-  expect(template[2][0]).toEqual({ processor: 3, startTime: 23, endTime: 44 });
66
-  expect(template[2][1]).toEqual({ processor: 3, startTime: 44, endTime: 69 });
67
-  expect(template[2][2]).toEqual({ processor: 3, startTime: 69, endTime: 87 });
68
-  expect(template[2][3]).toEqual({ processor: 3, startTime: 87, endTime: 106 });
69
-  expect(template[2][4]).toEqual({ processor: 3, startTime: 106, endTime: 114 });
70
-  expect(template[2][5]).toEqual({ processor: 3, startTime: 114, endTime: 134 });
71
-  expect(template[2][6]).toEqual({ processor: 3, startTime: 134, endTime: 145 });
72
-  expect(template[2][7]).toEqual({ processor: 3, startTime: 145, endTime: 158 });
65
+  expect(template[2][0]).toEqual({ processor: 3, startTime: 23, endTime: 44, name: 'c' });
66
+  expect(template[2][1]).toEqual({ processor: 3, startTime: 44, endTime: 69, name: 'c' });
67
+  expect(template[2][2]).toEqual({ processor: 3, startTime: 69, endTime: 87, name: 'c' });
68
+  expect(template[2][3]).toEqual({ processor: 3, startTime: 87, endTime: 106, name: 'c' });
69
+  expect(template[2][4]).toEqual({ processor: 3, startTime: 106, endTime: 114, name: 'c' });
70
+  expect(template[2][5]).toEqual({ processor: 3, startTime: 114, endTime: 134, name: 'c' });
71
+  expect(template[2][6]).toEqual({ processor: 3, startTime: 134, endTime: 145, name: 'c' });
72
+  expect(template[2][7]).toEqual({ processor: 3, startTime: 145, endTime: 158, name: 'c' });
73 73
 });
74 74
\ No newline at end of file
... ...
@@ -9,6 +9,7 @@ type JobTime = {
9 9
   jobId: JobId,
10 10
   t: number,
11 11
   d: number,
12
+  name: string
12 13
 };
13 14
 
14 15
 const findMaxTJob = (jobTimes: JobTime[]) =>
... ...
@@ -65,7 +66,8 @@ export default (jobs: JobTime[]) => {
65 65
     processor: 1,
66 66
     startTime: jobTime.c - jobTime.t,
67 67
     endTime: jobTime.c,
68
-    delayed: max(0, jobTime.c - jobTime.d)
68
+    delayed: max(0, jobTime.c - jobTime.d),
69
+    name: jobTime.name
69 70
   }), schedule);
70 71
 
71 72
   return [normalizedSchedule];
... ...
@@ -33,32 +33,32 @@ test('create schedule', () => {
33 33
 
34 34
 test('create gantt', () => {
35 35
   const jobs = [
36
-    { jobId: 1, t: 4, d: 10 },
37
-    { jobId: 2, t: 6, d: 25 },
38
-    { jobId: 3, t: 4, d: 20 },
39
-    { jobId: 4, t: 6, d: 18 },
40
-    { jobId: 5, t: 7, d: 40 },
41
-    { jobId: 6, t: 4, d: 50 },
42
-    { jobId: 7, t: 3, d: 35 },
43
-    { jobId: 8, t: 2, d: 52 },
44
-    { jobId: 9, t: 6, d: 46 },
45
-    { jobId: 10, t: 7, d: 28 },
46
-    { jobId: 11, t: 1, d: 50 },
36
+    { jobId: 1, t: 4, d: 10, name: 'a' },
37
+    { jobId: 2, t: 6, d: 25, name: 'b' },
38
+    { jobId: 3, t: 4, d: 20, name: 'c' },
39
+    { jobId: 4, t: 6, d: 18, name: 'd' },
40
+    { jobId: 5, t: 7, d: 40, name: 'e' },
41
+    { jobId: 6, t: 4, d: 50, name: 'f' },
42
+    { jobId: 7, t: 3, d: 35, name: 'g' },
43
+    { jobId: 8, t: 2, d: 52, name: 'h' },
44
+    { jobId: 9, t: 6, d: 46, name: 'i' },
45
+    { jobId: 10, t: 7, d: 28, name: 'j' },
46
+    { jobId: 11, t: 1, d: 50, name: 'k' },
47 47
   ];
48 48
 
49 49
   const template = createGantt(jobs);
50 50
 
51 51
   expect(template.length).toBe(1);
52 52
   expect(template[0].length).toBe(11);
53
-  expect(template[0][0]).toEqual({ processor: 1, startTime: 0, endTime: 1, delayed: 0 });
54
-  expect(template[0][1]).toEqual({ processor: 1, startTime: 1, endTime: 5, delayed: 0 });
55
-  expect(template[0][2]).toEqual({ processor: 1, startTime: 5, endTime: 9, delayed: 0 });
56
-  expect(template[0][3]).toEqual({ processor: 1, startTime: 9, endTime: 15, delayed: 0 });
57
-  expect(template[0][4]).toEqual({ processor: 1, startTime: 15, endTime: 21, delayed: 0 });
58
-  expect(template[0][5]).toEqual({ processor: 1, startTime: 21, endTime: 28, delayed: 0 });
59
-  expect(template[0][6]).toEqual({ processor: 1, startTime: 28, endTime: 30, delayed: 0 });
60
-  expect(template[0][7]).toEqual({ processor: 1, startTime: 30, endTime: 33, delayed: 0 });
61
-  expect(template[0][8]).toEqual({ processor: 1, startTime: 33, endTime: 40, delayed: 0 });
62
-  expect(template[0][9]).toEqual({ processor: 1, startTime: 40, endTime: 46, delayed: 0 });
63
-  expect(template[0][10]).toEqual({ processor: 1, startTime: 46, endTime: 50, delayed: 0 });
53
+  expect(template[0][0]).toEqual({ processor: 1, startTime: 0, endTime: 1, delayed: 0, name: 'k' });
54
+  expect(template[0][1]).toEqual({ processor: 1, startTime: 1, endTime: 5, delayed: 0, name: 'c' });
55
+  expect(template[0][2]).toEqual({ processor: 1, startTime: 5, endTime: 9, delayed: 0, name: 'a' });
56
+  expect(template[0][3]).toEqual({ processor: 1, startTime: 9, endTime: 15, delayed: 0, name: 'd' });
57
+  expect(template[0][4]).toEqual({ processor: 1, startTime: 15, endTime: 21, delayed: 0, name: 'b' });
58
+  expect(template[0][5]).toEqual({ processor: 1, startTime: 21, endTime: 28, delayed: 0, name: 'j' });
59
+  expect(template[0][6]).toEqual({ processor: 1, startTime: 28, endTime: 30, delayed: 0, name: 'h' });
60
+  expect(template[0][7]).toEqual({ processor: 1, startTime: 30, endTime: 33, delayed: 0, name: 'g' });
61
+  expect(template[0][8]).toEqual({ processor: 1, startTime: 33, endTime: 40, delayed: 0, name: 'e' });
62
+  expect(template[0][9]).toEqual({ processor: 1, startTime: 40, endTime: 46, delayed: 0, name: 'i' });
63
+  expect(template[0][10]).toEqual({ processor: 1, startTime: 46, endTime: 50, delayed: 0, name: 'f' });
64 64
 });
65 65
\ No newline at end of file
... ...
@@ -17,6 +17,7 @@ import { updateCTime } from '../mcnaught';
17 17
 type JobTime = {
18 18
   jobId: JobId,
19 19
   t: number,
20
+  name: string,
20 21
   anc: JobId[]
21 22
 };
22 23
 
... ...
@@ -124,6 +125,7 @@ export default (jobTimes: JobTime[], processorsCount: number) => {
124 124
   return map(map(job => ({
125 125
     processor: job.processor,
126 126
     startTime: job.c - job.t,
127
-    endTime: job.c
127
+    endTime: job.c,
128
+    name: job.name
128 129
   })), grouped);
129 130
 };
130 131
\ No newline at end of file
... ...
@@ -48,13 +48,13 @@ test('create schedule 2', () => {
48 48
 
49 49
 test('create gantt', () => {
50 50
   const jobsWithOperations = [
51
-    { jobId: 1, t: 4, anc: [] },
52
-    { jobId: 2, t: 6, anc: [1] },
53
-    { jobId: 3, t: 7, anc: [1] },
54
-    { jobId: 4, t: 6, anc: [1] },
55
-    { jobId: 5, t: 4, anc: [2, 3] },
56
-    { jobId: 6, t: 7, anc: [4, 5] },
57
-    { jobId: 7, t: 2, anc: [2, 4, 6] },
51
+    { jobId: 1, t: 4, anc: [], name: 'a' },
52
+    { jobId: 2, t: 6, anc: [1], name: 'b' },
53
+    { jobId: 3, t: 7, anc: [1], name: 'c' },
54
+    { jobId: 4, t: 6, anc: [1], name: 'd' },
55
+    { jobId: 5, t: 4, anc: [2, 3], name: 'e' },
56
+    { jobId: 6, t: 7, anc: [4, 5], name: 'f' },
57
+    { jobId: 7, t: 2, anc: [2, 4, 6], name: 'g' },
58 58
   ];
59 59
 
60 60
   const template = createGantt(jobsWithOperations, 3);
... ...
@@ -64,13 +64,13 @@ test('create gantt', () => {
64 64
   expect(template[1].length).toBe(2);
65 65
   expect(template[2].length).toBe(3);
66 66
 
67
-  expect(template[0][0]).toEqual({ processor: 1, startTime: 0, endTime: 4 });
68
-  expect(template[0][1]).toEqual({ processor: 1, startTime: 4, endTime: 10 });
67
+  expect(template[0][0]).toEqual({ processor: 1, startTime: 0, endTime: 4, name: 'a' });
68
+  expect(template[0][1]).toEqual({ processor: 1, startTime: 4, endTime: 10, name: 'b' });
69 69
 
70
-  expect(template[1][0]).toEqual({ processor: 2, startTime: 0, endTime: 7 });
71
-  expect(template[1][1]).toEqual({ processor: 2, startTime: 7, endTime: 13 });
70
+  expect(template[1][0]).toEqual({ processor: 2, startTime: 0, endTime: 7, name: 'c' });
71
+  expect(template[1][1]).toEqual({ processor: 2, startTime: 7, endTime: 13, name: 'd' });
72 72
 
73
-  expect(template[2][0]).toEqual({ processor: 3, startTime: 0, endTime: 4 });
74
-  expect(template[2][1]).toEqual({ processor: 3, startTime: 4, endTime: 11 });
75
-  expect(template[2][2]).toEqual({ processor: 3, startTime: 11, endTime: 13 });
73
+  expect(template[2][0]).toEqual({ processor: 3, startTime: 0, endTime: 4, name: 'e' });
74
+  expect(template[2][1]).toEqual({ processor: 3, startTime: 4, endTime: 11, name: 'f' });
75
+  expect(template[2][2]).toEqual({ processor: 3, startTime: 11, endTime: 13, name: 'g' });
76 76
 });
77 77
\ No newline at end of file
... ...
@@ -42,6 +42,7 @@ class Form extends React.PureComponent {
42 42
       // }
43 43
     ],
44 44
     preempt: false,
45
+    flowShop: '0'
45 46
   };
46 47
 
47 48
   onSubmit = (values) => {
... ...
@@ -74,9 +75,9 @@ class Form extends React.PureComponent {
74 74
 
75 75
   render() {
76 76
     return (
77
-      <Formik initialValues={this.state} onSubmit={this.onSubmit} render={({ setFieldValue, values: { rows, allJobs } }) => (
77
+      <Formik initialValues={this.state} onSubmit={this.onSubmit} render={({ setFieldValue, values: { rows, allJobs, flowShop } }) => (
78 78
         <FormikForm>
79
-          <h1>1/3 Vytvorenie pracovníkov</h1>
79
+          <h1>1/3 Vytvorenie úloh</h1>
80 80
           <Box flexWrap="wrap" flexDirection="row">
81 81
             {allJobs.map((_, key) => (
82 82
               <Box key={key} width={300} flexDirection="row" marginBottom={10}>
... ...
@@ -87,7 +88,7 @@ class Form extends React.PureComponent {
87 87
           </Box>
88 88
 
89 89
           <Box width={300} flexDirection="row" marginBottom={10}>
90
-            <Box as="input" placeholder="Nový pracovník" onKeyDown={this.addTemplateWorker(setFieldValue, allJobs)} nativeRef={c => this.new = c} marginRight={5} flex={1} />
90
+            <Box as="input" placeholder="Nová úloha" onKeyDown={this.addTemplateWorker(setFieldValue, allJobs)} nativeRef={c => this.new = c} marginRight={5} flex={1} />
91 91
             <Box cursor="pointer" onClick={this.addTemplateWorker(setFieldValue, allJobs)} color="green" fontSize="1rem">+</Box>
92 92
           </Box>
93 93
 
... ...
@@ -98,7 +99,7 @@ class Form extends React.PureComponent {
98 98
               {rows.length ?
99 99
                 <Box flexDirection="row" marginBottom={10}>
100 100
                   <Box flexBasis="20%" flexShrink={0}><strong>Pracovníci</strong></Box>
101
-                  <Box flexBasis="63%" flexShrink={0}><strong>Úlohy</strong></Box>
101
+                  <Box flexBasis="63%" flexShrink={0}><strong>Priradené úlohy</strong></Box>
102 102
                 </Box> : null
103 103
               }
104 104
 
... ...
@@ -121,8 +122,24 @@ class Form extends React.PureComponent {
121 121
 
122 122
               {rows.length ?
123 123
                 <div>
124
+                  <Box flexDirection="row" justifyContent="center" marginBottom={10}>
125
+                    <Box as="label" justifyContent="center" flexDirection="row" marginRight={5}>
126
+                      <Field type="radio" name="flowShop" value="1" checked={flowShop == '1'} disabled={rows.length === 1} />
127
+                      <Box as="em" color="gray" textAlign="center" fontSize="0.9em">
128
+                        Flow shop
129
+                      </Box>
130
+                    </Box>
131
+
132
+                    <Box as="label" justifyContent="center" flexDirection="row">
133
+                      <Field type="radio" name="flowShop" value="0" checked={flowShop == '0'} disabled={rows.length === 1} />
134
+                      <Box as="em" color="gray" textAlign="center" fontSize="0.9em">
135
+                        Pracovníci zvládnu každú úlohu
136
+                      </Box>
137
+                    </Box>
138
+                  </Box>
139
+
124 140
                   <Box as="label" justifyContent="center" flexDirection="row">
125
-                    <Field type="checkbox" name="preempt"/>
141
+                    <Field type="checkbox" name="preempt" disabled={flowShop == '1' || rows.length === 1}/>
126 142
                     <Box as="em" color="gray" textAlign="center" fontSize="0.9em">
127 143
                       Úlohy pracovníkov možno prerušiť
128 144
                     </Box>
... ...
@@ -174,7 +191,7 @@ const SortableJob = SortableElement(
174 174
 
175 175
     render() {
176 176
       const { prefix, job, existingJobs: _existingJobs } = this.props;
177
-      const { formik: { values: { rows, allJobs } } } = this.context;
177
+      const { formik: { values: { rows, allJobs, flowShop } } } = this.context;
178 178
 
179 179
       const existingJobs = map(
180 180
         value => {
... ...
@@ -200,9 +217,11 @@ const SortableJob = SortableElement(
200 200
           paddingBottom={10}
201 201
           className="sortable-inactive"
202 202
         >
203
-          <Box marginRight={10} fontSize="1.5rem" width={20}>
204
-            <DragHandle/>
205
-          </Box>
203
+          {flowShop == '1' ?
204
+            <Box marginRight={10} fontSize="1.5rem" width={20}>
205
+              <DragHandle/>
206
+            </Box>
207
+           : null}
206 208
 
207 209
           <Box flex={1} padding={1}>
208 210
             <Box width={200} marginBottom={10} flexDirection="row">
... ...
@@ -11,11 +11,20 @@ class Gannt extends React.PureComponent {
11 11
     super(props);
12 12
 
13 13
     this.state = {
14
-      startTime: minTime(props.data),
14
+      startTime: 0,
15 15
       endTime: maxTime(props.data)
16 16
     };
17 17
   }
18 18
 
19
+  componentWillReceiveProps({ data }) {
20
+    if (data !== this.props.data) {
21
+      this.setState({
22
+        startTime: 0,
23
+        endTime: maxTime(data)
24
+      })
25
+    }
26
+  }
27
+
19 28
   render() {
20 29
     const { data, measureRef, contentRect: { bounds: dimensions } } = this.props;
21 30
     const { startTime } = this.state;
... ...
@@ -52,7 +61,7 @@ class Gannt extends React.PureComponent {
52 52
     const ticksCountX = scopeMinTime + scopeMaxTime;
53 53
 
54 54
     const width = Math.max(theme.gantt.maxWidth, dimensions.width);
55
-    const height = 100 + 1.75 * theme.gantt.job.height * processors.length;
55
+    const height = Math.max(250 + 1.75 * theme.gantt.job.height * processors.length);
56 56
 
57 57
     const horizontalGuideLines = map(
58 58
       i => theme.gantt.margin.top + i * 1.75 * theme.gantt.job.height - i * 10,
... ...
@@ -96,7 +105,7 @@ class Gannt extends React.PureComponent {
96 96
             height={theme.gantt.brush.height}
97 97
             stroke={theme.gantt.brush.stroke}
98 98
             onChange={({ startIndex, endIndex }) =>
99
-              this.setState({ startTime: startIndex + 1, endTime: endIndex + 1 })
99
+              this.setState({ startTime: startIndex, endTime: endIndex + 1 })
100 100
             }
101 101
           />
102 102
           {scopeData.map((processorData, i) => (
... ...
@@ -1,6 +1,7 @@
1 1
 import React from 'react';
2 2
 import { Rectangle } from 'recharts';
3 3
 import theme from '../theme';
4
+import { last } from 'rambda';
4 5
 
5 6
 export default class Job extends React.PureComponent {
6 7
   render() {
... ...
@@ -12,7 +13,8 @@ export default class Job extends React.PureComponent {
12 12
         formerStartTime,
13 13
         formerEndTime,
14 14
         startTime,
15
-        endTime
15
+        endTime,
16
+        delayed
16 17
       },
17 18
       xAxis: {
18 19
         niceTicks,
... ...
@@ -31,9 +33,12 @@ export default class Job extends React.PureComponent {
31 31
       - (typeof formerStartTime === 'undefined' ? startTime : formerStartTime)
32 32
     );
33 33
 
34
-    const width = (axisWidth / (niceTicks.length - 1)) * duration;
34
+    // const width = (axisWidth / (niceTicks.length - 1)) * duration;
35
+    const width = (axisWidth / ((last(niceTicks) - niceTicks[0]) || 1)) * duration;
35 36
     const height = theme.gantt.job.height;
36 37
 
38
+    // console.log(this.props.payload, axisWidth, niceTicks, duration);
39
+
37 40
     return (
38 41
       <JobBox
39 42
         x={x + 5}
... ...
@@ -42,6 +47,7 @@ export default class Job extends React.PureComponent {
42 42
         height={height}
43 43
         duration={formerDuration}
44 44
         name={name}
45
+        isDelayed={delayed}
45 46
       />
46 47
     );
47 48
   }
... ...
@@ -50,9 +56,11 @@ export default class Job extends React.PureComponent {
50 50
 class JobBox extends React.PureComponent {
51 51
   render() {
52 52
     const { x, y, width, height } = this.props;
53
-    let { duration, name } = this.props;
53
+    let { duration, name, isDelayed } = this.props;
54
+
55
+    const { stroke, textColor } = theme.gantt.job;
54 56
 
55
-    const { fill, stroke, textColor } = theme.gantt.job;
57
+    const fill = isDelayed ? theme.gantt.job.fillError : theme.gantt.job.fill;
56 58
 
57 59
     return (
58 60
       <React.Fragment>
... ...
@@ -27,8 +27,15 @@ export const maxTime = data => {
27 27
   return reduce(max, -Infinity, processorsMaxTime);
28 28
 };
29 29
 
30
-export const normalizeData = data =>
31
-  map(processorData => {
30
+export const normalizeData = data => {
31
+  forEach(processorData => {
32
+    processorData.push({
33
+      startTime: last(processorData).endTime,
34
+      processor: last(processorData).processor
35
+    });
36
+  }, data);
37
+
38
+  return map(processorData => {
32 39
     // if startTime would be days (thousands of seconds), set step to day
33 40
     const step = 1; // >= 1
34 41
 
... ...
@@ -54,11 +61,6 @@ export const normalizeData = data =>
54 54
 
55 55
     const filledData = Object.values(dataObj);
56 56
 
57
-    filledData.push({
58
-      startTime: last(processorData).endTime,
59
-      endTime: last(processorData).endTime + step,
60
-      processor: last(processorData).processor
61
-    });
62
-
63 57
     return filledData;
64
-  }, data);
65 58
\ No newline at end of file
59
+  }, data);
60
+};
66 61
\ No newline at end of file
... ...
@@ -1,7 +1,7 @@
1 1
 import { find, indexOf, last, map, prop, reduce, sort } from 'rambda';
2 2
 import { max } from 'ramda';
3 3
 
4
-export const selectAlgorithms = (rows, preempt) => {
4
+export const selectAlgorithms = (rows, preempt, flowShop) => {
5 5
   const processorsCount = rows.length;
6 6
 
7 7
   if (!processorsCount) return null;
... ...
@@ -21,25 +21,45 @@ export const selectAlgorithms = (rows, preempt) => {
21 21
     return ['moore'];
22 22
   }
23 23
 
24
-  const existAnc = find(
25
-    ({ jobs }) => !!find(({ anc }) => Array.isArray(anc) && anc.length, jobs),
26
-    rows);
24
+  if (flowShop) {
25
+    let multi = ['campbel', 'grupt', 'palmer'];
26
+    if (rows.length === 2) {
27
+      multi.push('johnson');
28
+    }
27 29
 
28
-  if (existAnc) {
29
-    return ['vahy'];
30
+    return multi;
30 31
   }
31 32
 
32
-  let multi = ['campbel', 'grupt', 'palmer'];
33 33
 
34
-  if (processorsCount === 2) {
35
-    multi.push('johnson');
36
-  }
34
+  let multi = ['vahy'];
37 35
 
38 36
   if (preempt) {
39 37
     multi.push('mcnaught');
40 38
   }
41 39
 
42 40
   return multi;
41
+
42
+  // const existAnc = find(
43
+  //   ({ jobs }) => !!find(({ anc }) => Array.isArray(anc) && anc.length, jobs),
44
+  //   rows);
45
+  //
46
+  // if (existAnc) {
47
+  //   return ['vahy'];
48
+  // }
49
+  //
50
+  // return ['mcnaught'];
51
+  //
52
+  // let multi = ['campbel', 'grupt', 'palmer'];
53
+  //
54
+  // if (processorsCount === 2) {
55
+  //   multi.push('johnson');
56
+  // }
57
+  //
58
+  // if (preempt) {
59
+  //   multi.push('mcnaught');
60
+  // }
61
+  //
62
+  // return multi;
43 63
 };
44 64
 
45 65
 export const najneomeskanejsiResult = (algoResults: []) => {
... ...
@@ -12,6 +12,7 @@ export default {
12 12
     job: {
13 13
       height: 50,
14 14
       fill: '#3A4168',
15
+      fillError: '#98798F',
15 16
       stroke: '#1B1B3A',
16 17
       textColor: '#e8e9f2'
17 18
     },