@@ 0,0 1,68 @@
+package ninja.scoopta.software.advent_of_code_12020;
+
+import java.util.List;
+import java.nio.file.*;
+import java.io.IOException;
+
+final class Day2 {
+ public static final void main(String[] args) {
+ try {
+ List<String> lines = Files.readAllLines(Paths.get("day2.txt"));
+ System.out.println("Part 1");
+ pt1(lines);
+ System.out.println("Part 2");
+ pt2(lines);
+ } catch(IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private static final void pt1(List<String> lines) {
+ int valid = 0;
+
+ for(String line : lines) {
+ String[] split = line.split(" ");
+ String[] policy = split[0].split("-");
+ int req = Integer.parseInt(policy[0]);
+ int max = Integer.parseInt(policy[1]);
+ String contains = split[1].replace(":", "");
+ String passwd = split[2];
+
+ int count = 0;
+ while(true) {
+ int idx = passwd.indexOf(contains);
+ if(idx < 0) {
+ break;
+ }
+ passwd = passwd.substring(0, idx) + passwd.substring(idx + contains.length());
+ ++count;
+ }
+ if(count >= req && count <= max) {
+ ++valid;
+ }
+ }
+ System.out.println(valid);
+ }
+
+ private static final void pt2(List<String> lines) {
+ int valid = 0;
+
+ for(String line : lines) {
+ String[] split = line.split(" ");
+ String[] policy = split[0].split("-");
+ int pos1 = Integer.parseInt(policy[0]);
+ int pos2 = Integer.parseInt(policy[1]);
+ String contains = split[1].replace(":", "");
+ String passwd = split[2];
+
+ try {
+ boolean case1 = passwd.charAt(pos1 - 1) == contains.charAt(0) && passwd.charAt(pos2 - 1) != contains.charAt(0);
+ boolean case2 = passwd.charAt(pos1 - 1) != contains.charAt(0) && passwd.charAt(pos2 - 1) == contains.charAt(0);
+ if(case1 || case2) {
+ ++valid;
+ }
+ } catch(IndexOutOfBoundsException e) {}
+ }
+ System.out.println(valid);
+ }
+}