# HG changeset patch # User Scoopta # Date 1607247864 28800 # Sun Dec 06 01:44:24 2020 -0800 # Node ID c1bef2865c95f26dac79337d8630e98fe950871b # Parent 26ed87bdfb74bde9fa9dec7089c02fb05fde9441 Day 4 diff --git a/src/ninja/scoopta/software/advent_of_code_12020/Day4.java b/src/ninja/scoopta/software/advent_of_code_12020/Day4.java new file mode 100644 --- /dev/null +++ b/src/ninja/scoopta/software/advent_of_code_12020/Day4.java @@ -0,0 +1,127 @@ +package ninja.scoopta.software.advent_of_code_12020; + +import java.util.List; +import java.nio.file.*; +import java.io.IOException; + +final class Day4 { + public static final void main(String[] args) { + try { + List lines = Files.readAllLines(Paths.get("day4.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 lines) { + boolean byr, iyr, eyr, hgt, hcl, ecl, pid; + byr = iyr = eyr = hgt = hcl = ecl = pid = false; + int valid = 0; + + for(String line : lines) { + if(line.equals("")) { + if(byr && iyr && eyr && hgt && hcl && ecl && pid) { + ++valid; + } + byr = iyr = eyr = hgt = hcl = ecl = pid = false; + continue; + } + byr = byr || line.contains("byr"); + iyr = iyr || line.contains("iyr"); + eyr = eyr || line.contains("eyr"); + hgt = hgt || line.contains("hgt"); + hcl = hcl || line.contains("hcl"); + ecl = ecl || line.contains("ecl"); + pid = pid || line.contains("pid"); + } + if(byr && iyr && eyr && hgt && hcl && ecl && pid) { + ++valid; + } + System.out.println(valid); + } + + private static final boolean pt2Check(String byr, String iyr, String eyr, String hgt, String hcl, String ecl, String pid) { + try { + int by = Integer.parseInt(byr); + int iy = Integer.parseInt(iyr); + int ey = Integer.parseInt(eyr); + boolean in = hgt.contains("in"); + boolean cm = hgt.contains("cm"); + int hg = Integer.parseInt(hgt.replace("in", "").replace("cm", "")); + + + boolean byrb = by >= 1920 && by <= 2002; + boolean iyrb = iy >= 2010 && iy <= 2020; + boolean eyrb = ey >= 2020 && ey <= 2030; + boolean hgtb = false; + if(in) { + hgtb = hg >= 59 && hg <= 76; + } + if(cm) { + hgtb = hg >= 150 && hg <= 193; + } + boolean hclb = hcl.matches("#[0-9a-fA-F]{6}"); + boolean eclb = ecl.equals("amb") || ecl.equals("blu") || ecl.equals("brn") || ecl.equals("gry") || ecl.equals("grn") || ecl.equals("hzl") || ecl.equals("oth"); + boolean pidb = pid.matches("[0-9]{9}"); + + if(byrb && iyrb && eyrb && hgtb && hclb && eclb && pidb) { + return true; + } + return false; + } catch(NumberFormatException e) { + return false; + } + } + + private static final void pt2(List lines) { + String byr, iyr, eyr, hgt, hcl, ecl, pid; + byr = iyr = eyr = hgt = hcl = ecl = pid = ""; + int valid = 0; + + for(String line : lines) { + if(line.equals("")) { + if(pt2Check(byr, iyr, eyr, hgt, hcl, ecl, pid)) { + ++valid; + } + byr = iyr = eyr = hgt = hcl = ecl = pid = ""; + continue; + } + + String[] keys = line.split(" "); + for(String data : keys) { + String key = data.split(":")[0]; + switch(key) { + case "byr": + byr = data.split(":")[1]; + break; + case "iyr": + iyr = data.split(":")[1]; + break; + case "eyr": + eyr = data.split(":")[1]; + break; + case "hgt": + hgt = data.split(":")[1]; + break; + case "hcl": + hcl = data.split(":")[1]; + break; + case "ecl": + ecl = data.split(":")[1]; + break; + case "pid": + pid = data.split(":")[1]; + break; + } + } + } + if(pt2Check(byr, iyr, eyr, hgt, hcl, ecl, pid)) { + ++valid; + } + System.out.println(valid); + } +}