From 57621315f56094260f947b93c5601963a827ecbf Mon Sep 17 00:00:00 2001 From: WOBBLEFANG THE THIRD Date: Fri, 5 Dec 2025 22:11:29 +0100 Subject: [PATCH] feat: implement Main class with methods to read training and evaluation files --- src/main/java/de/th_luebeck/ws25/Main.java | 82 ++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 src/main/java/de/th_luebeck/ws25/Main.java diff --git a/src/main/java/de/th_luebeck/ws25/Main.java b/src/main/java/de/th_luebeck/ws25/Main.java new file mode 100644 index 0000000..503720e --- /dev/null +++ b/src/main/java/de/th_luebeck/ws25/Main.java @@ -0,0 +1,82 @@ +package de.th_luebeck.ws25; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.*; + +public class Main { + static void main(String[] args) { + /* ... */ + } + + private List readTrainFile(Path path) throws IOException { + List outputSequences = new ArrayList<>(); + List lines = Files.readAllLines(path); + for (String line : lines) { + line = line.trim(); + if (line.isEmpty()) { + continue; + } + + String[] parts = line.split("\\s+", 2); + if (parts.length < 2) { + continue; + } + + Label label = Label.NORMAL; + if (parts[0].equals("A")) { + label = Label.ARRHYTHMIA; + } + + List values = Arrays.stream(parseInts(parts[1])).boxed().toList(); + outputSequences.add(new LabeledSequence(label, values)); + } + + return outputSequences; + } + + public static EvalFile readEvalFile(Path path) throws IOException { + List lines = Files.readAllLines(path); + if (lines.size() < 2) { + throw new IOException("Eval file must contain at least two lines"); + } + + List sequence = Arrays.stream(parseInts(lines.get(0).trim())).boxed().toList(); + List intervals = parseIntervals(lines.get(1)); + return new EvalFile(sequence, intervals); + } + + + public static int[] parseInts(String inputString) { + List numbers = new ArrayList<>(); + Scanner scanner = new Scanner(inputString); + scanner.useDelimiter("[\\s,\\[\\]]+"); + while (scanner.hasNext()) { + if (scanner.hasNextInt()) { + numbers.add(scanner.nextInt()); + } else { + scanner.next(); + } + } + + scanner.close(); + + return numbers.stream().mapToInt(i -> i).toArray(); + } + + public static List parseIntervals(String inputString) { + int[] numbers = parseInts(inputString); + List outputIntervals = new ArrayList<>(); + for (int i = 0; i + 1 < numbers.length; i += 2) { + int start = numbers[i], end = numbers[i + 1]; + if (start <= end) { + outputIntervals.add(new Interval(start, end)); + } else { + outputIntervals.add(new Interval(end, start)); + } + } + + return outputIntervals; + } +}