Skip to content

Commit 8a2a2ff

Browse files
authored
Update Main.java
1 parent c7d1955 commit 8a2a2ff

File tree

1 file changed

+1
-162
lines changed

1 file changed

+1
-162
lines changed
Lines changed: 1 addition & 162 deletions
Original file line numberDiff line numberDiff line change
@@ -1,162 +1 @@
1-
package com.example;
2-
3-
import java.time.LocalDate;
4-
import java.time.format.DateTimeFormatter;
5-
import java.time.format.DateTimeParseException;
6-
import java.util.ArrayList;
7-
import java.util.Comparator;
8-
import java.util.List;
9-
10-
public class Main {
11-
public static void main(String[] args) {
12-
// hjälp
13-
if (args.length > 0 && args[0].equals("--help")) {
14-
skrivUtHjalp();
15-
return;
16-
}
17-
18-
String zone = "SE3";
19-
LocalDate date = LocalDate.now();
20-
LocalDate startDate = date.plusDays(1);
21-
boolean sorted = false;
22-
int chargingHours = 0;
23-
24-
for (int i = 0; i < args.length; i++) {
25-
switch (args[i]) {
26-
case "--date":
27-
if (i + 1 < args.length) {
28-
String dateArg = args[i + 1].toLowerCase();
29-
if (dateArg.equals("imorgon")) {
30-
startDate = LocalDate.now();
31-
} else if (dateArg.equals("idag")) {
32-
startDate = LocalDate.now();
33-
} else {
34-
try {
35-
startDate = LocalDate.parse(dateArg);
36-
} catch (DateTimeParseException e) {
37-
System.out.println("Fel: Ogiltigt datumformat. Använd YYYY-MM-DD.");
38-
return;
39-
}
40-
}
41-
i++;
42-
}
43-
break;
44-
case "--sorted":
45-
sorted = true;
46-
break;
47-
case "--charging":
48-
if (i + 1 < args.length) {
49-
String val = args[i + 1].replace("h", "");
50-
try {
51-
chargingHours = Integer.parseInt(val);
52-
} catch (NumberFormatException e) {
53-
System.out.println("error: use 2h, 4h or 8h.");
54-
return;
55-
}
56-
i++;
57-
}
58-
break;
59-
}
60-
}
61-
62-
// API o prisklass
63-
ElpriserAPI elpriserAPI = new ElpriserAPI();
64-
ElpriserAPI.Prisklass prisklass;
65-
try {
66-
prisklass = ElpriserAPI.Prisklass.valueOf(zone);
67-
} catch (IllegalArgumentException e) {
68-
System.out.println("Felaktig zon: " + zone);
69-
prisklass = ElpriserAPI.Prisklass.SE3;
70-
}
71-
72-
// priser
73-
List<ElpriserAPI.Elpris> priser = new ArrayList<>(elpriserAPI.getPriser(date, prisklass));
74-
if (priser.isEmpty()) {
75-
System.out.println("inga priser tillgangliga for " + date + " in zon " + zone + ".");
76-
return;
77-
}
78-
79-
List<ElpriserAPI.Elpris> imorgonPriser = elpriserAPI.getPriser(startDate, prisklass);
80-
if (imorgonPriser != null && !imorgonPriser.isEmpty()) {
81-
priser.addAll(imorgonPriser);
82-
}
83-
84-
if (sorted) {
85-
priser.sort(Comparator.comparingDouble(ElpriserAPI.Elpris::sekPerKWh).reversed());
86-
}
87-
88-
// stats
89-
DateTimeFormatter tidFormat = DateTimeFormatter.ofPattern("HH:mm");
90-
ElpriserAPI.Elpris billigast = priser.getFirst();
91-
ElpriserAPI.Elpris dyrast = priser.getFirst();
92-
double summa = 0;
93-
94-
// skriv ut timpriser
95-
for (ElpriserAPI.Elpris pris : priser) {
96-
System.out.printf("%s: %.4f SEK/kWh%n",
97-
pris.timeStart().format(tidFormat), pris.sekPerKWh());
98-
}
99-
100-
for (ElpriserAPI.Elpris pris : priser) {
101-
summa += pris.sekPerKWh();
102-
if (pris.sekPerKWh() < billigast.sekPerKWh()) billigast = pris;
103-
if (pris.sekPerKWh() > dyrast.sekPerKWh()) dyrast = pris;
104-
}
105-
106-
double medelpris = summa / priser.size();
107-
108-
System.out.println("Statistik");
109-
System.out.println("Datum: " + date);
110-
System.out.println("Zon: " + zone);
111-
System.out.printf("Medelpris: %.4f SEK/kWh%n", medelpris);
112-
System.out.printf("Billigast pris: %s - %.4f SEK/kWh%n",
113-
billigast.timeStart().format(tidFormat), billigast.sekPerKWh());
114-
System.out.printf("Dyrast pris: %s - %.4f SEK/kWh%n",
115-
dyrast.timeStart().format(tidFormat), dyrast.sekPerKWh());
116-
117-
// opt laddning
118-
if (chargingHours > 0) {
119-
beraknaLaddningsfonster(priser, chargingHours, tidFormat);
120-
} else {
121-
// 2h, 4h, 8h
122-
for (int period : new int[]{2, 4, 8}) {
123-
beraknaLaddningsfonster(priser, period, tidFormat);
124-
}
125-
}
126-
}
127-
128-
// metod för laddningsfönster ??????????
129-
public static void beraknaLaddningsfonster(List<ElpriserAPI.Elpris> priser, int timmar, DateTimeFormatter format) {
130-
if (priser.size() < timmar) return;
131-
132-
double minSum = Double.MAX_VALUE;
133-
int minIndex = 0;
134-
135-
for (int i = 0; i <= priser.size() - timmar; i++) {
136-
double windowSum = 0;
137-
for (int j = i; j < i + timmar; j++) {
138-
windowSum += priser.get(j).sekPerKWh();
139-
}
140-
if (windowSum < minSum) {
141-
minSum = windowSum;
142-
minIndex = i;
143-
}
144-
}
145-
146-
String startTid = priser.get(minIndex).timeStart().format(format);
147-
String slutTid = priser.get(minIndex + timmar - 1).timeStart().plusHours(1).format(format);
148-
149-
System.out.printf("Billigast pris %dh-period: %s - %s (%.4f SEK totalt)%n",
150-
timmar, startTid, slutTid, minSum);
151-
}
152-
153-
// hjälptext
154-
public static void skrivUtHjalp() {
155-
System.out.println("Usage: java -cp target/classes com.example.Main --zone <zon> [options]");
156-
System.out.println("--zone SE1|SE2|SE3|SE4");
157-
System.out.println("--date YYYY-MM-DD|imorgon");
158-
System.out.println("--sorted");
159-
System.out.println("--charging 2h|4h|8h");
160-
System.out.println("--help");
161-
}
162-
}
1+
-

0 commit comments

Comments
 (0)