From c4d41f664375457f6af08b30ec40bdd8e32badf7 Mon Sep 17 00:00:00 2001 From: MiguelMLorente Date: Sun, 10 Dec 2023 12:23:03 +0100 Subject: [PATCH] Day 9 implementation in Java --- java/src/main/java/day9/Main.java | 45 +++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 java/src/main/java/day9/Main.java diff --git a/java/src/main/java/day9/Main.java b/java/src/main/java/day9/Main.java new file mode 100644 index 0000000..404d468 --- /dev/null +++ b/java/src/main/java/day9/Main.java @@ -0,0 +1,45 @@ +package day9; + +import io.vavr.collection.List; +import util.FileReader; + +import java.util.ArrayList; + +public class Main { + private static final boolean IS_PREDICTING_PREVIOUS_VALUES = true; + + public static void main(String[] args) { + String inputFilePath = System.getProperty("user.dir") + "\\java\\src\\main\\java\\day9\\input.txt"; + FileReader reader = new FileReader(inputFilePath); + List inputData = List.ofAll(reader.readContents()); + + Long predictionsSum = inputData + .map(string -> string.split(" ")) + .map(splitString -> List.of(splitString).map(Long::parseLong)) + .map(Main::predictValue) + .reduce(Long::sum); + + System.out.println(predictionsSum); + } + + private static Long predictValue(List values) { + if (values.filter(value -> value != 0L).isEmpty()) { + return 0L; + } + + Integer predictionIndex = IS_PREDICTING_PREVIOUS_VALUES ? 0 : values.length() - 1; + Integer predictionSign = IS_PREDICTING_PREVIOUS_VALUES ? -1 : +1; + + List reducedValues = getDifferencesList(values); + + return values.get(predictionIndex) + (predictionSign * predictValue(reducedValues)); + } + + private static List getDifferencesList(List values) { + java.util.List differencesList = new ArrayList<>(); + for (int i = 1; i < values.length(); i++) { + differencesList.add(values.get(i) - values.get(i-1)); + } + return List.ofAll(differencesList); + } +} \ No newline at end of file