-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdateWisePartitions.java
More file actions
107 lines (98 loc) · 3.78 KB
/
dateWisePartitions.java
File metadata and controls
107 lines (98 loc) · 3.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import java.text.ParseException;
import java.util.*;
public class dateWisePartitions extends dateObj {
dateWisePartitions(String a, String b, int stock) throws ParseException {
super(a, b, stock);
}
class separateDates {
Date a;
int index;
boolean isStart;
int stock;
separateDates(Date a, int index, boolean isStart, int stock) {
this.a = a;
this.index = index;
this.isStart = isStart;
this.stock = stock;
}
}
class res {
Date a, b;
int stock;
List<Integer> indices;
res(Date a, Date b, int stock, Set<Integer> indices) {
this.a = a;
this.b = b;
this.stock = stock;
// this.indices = indices;
this.indices = new ArrayList<Integer>();
for (int x : indices) {
this.indices.add(x);
}
}
}
void separator(List<dateObj> dates) {
List<separateDates> sep = new ArrayList<separateDates>();
for (int index = 0; index < dates.size(); index++) {
separateDates temp = new separateDates(dates.get(index).a, index, true, dates.get(index).stock);
sep.add(temp);
temp = new separateDates(dates.get(index).b, index, false, dates.get(index).stock);
sep.add(temp);
}
// // Checking purposes
// for (int index = 0; index < sep.size(); index++) {
// System.out.println("a = " + sdf.format(sep.get(index).a) + " isStart = " + sep.get(index).isStart + " index = " + sep.get(index).index);
// }
sep.sort((o1, o2) -> {
if (o1.a.after(o2.a))
return 1;
else if (o1.a.equals(o2.a) && o1.isStart == true)
return 1;
else
return -1;
});
// // Checking purposes
// System.out.println("After sorting\n");
// for (int index = 0; index < sep.size(); index++) {
// System.out.println("a = " + sdf.format(sep.get(index).a) + " isStart = " + sep.get(index).isStart + " index = " + sep.get(index).index);
// }
Date prev = null;
int sum = 0;
List<res> result = new ArrayList<res>();
Set<Integer> s = new HashSet<Integer>();
for (int i = 0; i < sep.size(); i++) {
if (prev == null) {
prev = sep.get(i).a;
s.add(sep.get(i).index);
sum = sep.get(i).stock;
} else {
if (prev.equals(sep.get(i).a) == false) {
result.add(new res(prev, sep.get(i).a, sum, s));
prev = sep.get(i).a;
}
if (sep.get(i).isStart == true) {
sum += sep.get(i).stock;
s.add(sep.get(i).index);
} else {
sum -= sep.get(i).stock;
s.remove(sep.get(i).index);
}
}
}
for(int i = 0; i < result.size(); i++)
{
System.out.print("From " + sdf.format(result.get(i).a) + " to " + sdf.format(result.get(i).b) + ", Stock = "+ result.get(i).stock + ", indices = ");
for (int x : result.get(i).indices) System.out.print(x + " ");
System.out.println();
}
}
public static void main(String args[]) throws ParseException {
List<dateObj> dates = new ArrayList<dateObj>();
dates.add(new dateObj("2022/01/01", "2022/01/03", 5));
dates.add(new dateObj("2022/01/01", "2022/01/05", 10));
dates.add(new dateObj("2022/01/03", "2022/01/05", 7));
dates.add(new dateObj("2022/01/02", "2022/01/04", 6));
dateWisePartitions ob = new dateWisePartitions("3000/01/01", "3000/01/05", 0);
ob.separator(dates);
}
}