From 0077023e8765143818b55597f254f165efbefaa5 Mon Sep 17 00:00:00 2001 From: pin2t Date: Mon, 9 Dec 2024 21:54:48 +0400 Subject: [PATCH] day 1, 2 java --- README.md | 4 ++++ day01.java | 26 ++++++++++++++++++++++++++ day02.java | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+) create mode 100644 day01.java create mode 100644 day02.java diff --git a/README.md b/README.md index f941487..3447c68 100644 --- a/README.md +++ b/README.md @@ -8,4 +8,8 @@ inputs directory contains **my** inputs. Yours will be different ```shell go run 01.go < inputs/01.txt +``` + +```shell +java day01.java < inputs/01.txt ``` \ No newline at end of file diff --git a/day01.java b/day01.java new file mode 100644 index 0000000..a023519 --- /dev/null +++ b/day01.java @@ -0,0 +1,26 @@ +import java.util.*; + +import static java.lang.Integer.parseInt; +import static java.lang.Math.abs; +import static java.lang.System.in; +import static java.lang.System.out; + +public class day01 { + public static void main(String[] args) { + var left = new ArrayList(); + var right = new ArrayList(); + new Scanner(in).findAll("(\\d+)\\s+(\\d+)").forEach(pair -> { + left.add(parseInt(pair.group(1))); + right.add(parseInt(pair.group(2))); + }); + left.sort(Integer::compareTo); + right.sort(Integer::compareTo); + int total = 0, similarity = 0; + for (int i = 0; i < left.size(); i++) { + int l = left.get(i); + total += abs(l - right.get(i)); + similarity += (int) (l * right.stream().filter(n -> n.equals(l)).count()); + } + out.println(total + " " + similarity); + } +} diff --git a/day02.java b/day02.java new file mode 100644 index 0000000..7ba83c2 --- /dev/null +++ b/day02.java @@ -0,0 +1,49 @@ +import java.io.*; +import java.util.*; + +import static java.lang.System.in; +import static java.lang.System.out; + +public class day02 { + public static void main(String[] args) { + var safes = new int[]{0, 0}; + new BufferedReader(new InputStreamReader(in)).lines().forEach(line -> { + var report = new Report(line); + if (report.safe()) { + safes[0]++; + safes[1]++; + } else if (report.canBeSafe()) { + safes[1]++; + } + }); + out.println(safes[0] + " " + safes[1]); + } + + static class Report extends ArrayList { + Report(String input) { + super(Arrays.stream(input.split("\\s")).map(Integer::valueOf).toList()); + } + + Report(List source, int except) { + super(source); + remove(except); + } + + boolean safe() { + boolean increasing = getFirst().compareTo(getLast()) < 0; + for (int i = 1; i < size(); i++) { + if (increasing && (get(i) - get(i - 1) <= 0 || get(i) - get(i - 1) > 3) || + !increasing && (get(i) - get(i - 1) >= 0 || get(i - 1) - get(i) > 3)) { + return false; + } + } + return true; + } + + boolean canBeSafe() { + for (int i = 0; i < size(); i++) + if (new Report(this, i).safe()) return true; + return false; + } + } +}