From 44d3c20b25b93b73374388a41b9282cb8e557cc2 Mon Sep 17 00:00:00 2001 From: Nat Lasseter Date: Sun, 10 Dec 2023 17:50:56 +0000 Subject: Day 09 part 1 --- day09/day09.java | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 day09/day09.java (limited to 'day09/day09.java') diff --git a/day09/day09.java b/day09/day09.java new file mode 100644 index 0000000..4609508 --- /dev/null +++ b/day09/day09.java @@ -0,0 +1,77 @@ +import java.io.IOException; +import java.io.RandomAccessFile; +import java.util.Arrays; +import java.util.ArrayList; + +public class day09 { + public static void main(String args[]) throws IOException { + RandomAccessFile input = new RandomAccessFile("input", "r"); + System.out.println("Day 09 Part 1: " + part1(input)); + input.seek(0); + System.out.println("Day 09 Part 2: " + part2(input)); + input.close(); + } + + public static String part1(RandomAccessFile input) throws IOException { + String line; + int sum = 0; + while ((line = input.readLine()) != null) { + String[] linea = line.split(" "); + int[] nums = new int[linea.length]; + for (int i = 0; i < linea.length; i++) { + nums[i] = Integer.parseInt(linea[i]); + } + + sum += predictNext(nums); + } + return Integer.toString(sum); + } + + public static String part2(RandomAccessFile input) throws IOException { + return "WIP"; + } + + private static int predictNext(int[] line) { + ArrayList> differences = new ArrayList<>(); + ArrayList lastDiffs = new ArrayList<>(); + + for (int i: line) { + lastDiffs.add(i); + } + + differences.add(lastDiffs); + + while (!allZero(lastDiffs)) { + lastDiffs = getDifferences(lastDiffs); + differences.add(lastDiffs); + } + + for (int i = differences.size() - 2; i >= 0; i--) { + ArrayList lastrow = differences.get(i+1); + ArrayList row = differences.get(i); + row.add(row.get(row.size() - 1) + lastrow.get(lastrow.size() - 1)); + } + + ArrayList first = differences.get(0); + return first.get(first.size() - 1); + } + + private static boolean allZero(ArrayList list) { + for(int i: list) { + if (i != 0) { + return false; + } + } + return true; + } + + private static ArrayList getDifferences(ArrayList last) { + ArrayList next = new ArrayList<>(); + + for (int i = 1; i < last.size(); i++) { + next.add(last.get(i) - last.get(i-1)); + } + + return next; + } +} -- cgit v1.2.1