134 lines
4.5 KiB
Java
134 lines
4.5 KiB
Java
import java.util.ArrayList;
|
|
import java.util.Scanner;
|
|
import java.io.File;
|
|
import java.io.FileNotFoundException;
|
|
|
|
class day4 {
|
|
|
|
public static void main(String[] args) {
|
|
|
|
try {
|
|
|
|
File myFile = new File("input.txt");
|
|
Scanner in = new Scanner(myFile);
|
|
|
|
ArrayList<String> passports = new ArrayList<String>();
|
|
String line = "";
|
|
String input = "";
|
|
|
|
while (in.hasNext()) {
|
|
input = "";
|
|
input = in.nextLine();
|
|
if (input.length() == 0) {
|
|
passports.add(line);
|
|
line = "";
|
|
} else {
|
|
line += input;
|
|
}
|
|
}
|
|
|
|
passports.add(input);
|
|
|
|
int valid = 0;
|
|
|
|
for (String current : passports) {
|
|
|
|
String currentNoSpace = current.replaceAll("\\s","");
|
|
|
|
String[] fields = currentNoSpace.split(":");
|
|
int counter = 0;
|
|
|
|
String currentField = "";
|
|
|
|
for (int i = 0; i < fields.length - 1; i++) {
|
|
|
|
currentField = fields[i].substring(fields[i].length() - 3);
|
|
|
|
System.out.println("Next value: " + fields[i + 1]);
|
|
String value = "";
|
|
try {
|
|
value = fields[i + 1].substring(0, fields[i + 1].length() - 3);
|
|
} catch (Exception e) {
|
|
value = "";
|
|
}
|
|
if (i == fields.length - 2) {
|
|
value = fields[i + 1];
|
|
}
|
|
|
|
System.out.println(currentField);
|
|
System.out.println(value);
|
|
|
|
if (currentField.equals("hcl")) {
|
|
|
|
String HEX_PATTERN = "^#([A-Fa-f0-9]{6})$";
|
|
if(value.matches(HEX_PATTERN)) counter++;
|
|
|
|
} else if (currentField.equals("pid")) {
|
|
|
|
String DIGITS_PATTERN = "\\d+";
|
|
if (value.matches(DIGITS_PATTERN) && value.length() == 9) counter++;
|
|
|
|
} else if (currentField.equals("ecl")) {
|
|
|
|
if (value.equals("amb") || value.equals("blu") || value.equals("brn") || value.equals("gry")
|
|
|| value.equals("grn") || value.equals("hzl") || value.equals("oth")) counter++;
|
|
|
|
} else if (currentField.equals("eyr")) {
|
|
|
|
String DIGITS_PATTERN = "\\d+";
|
|
if (value.matches(DIGITS_PATTERN)) {
|
|
int year = Integer.parseInt(value);
|
|
if (year >= 2020 && year <= 2030) counter++;
|
|
}
|
|
|
|
} else if (currentField.equals("hgt")) {
|
|
|
|
String DIGITS_PATTERN = "\\d+";
|
|
if (value.substring(0, value.length() - 2).matches(DIGITS_PATTERN)) {
|
|
if (value.substring(value.length() - 2, value.length()).equals("in")) {
|
|
|
|
int num = Integer.parseInt(value.substring(0, value.length() - 2));
|
|
if (num >= 59 && num <= 76) counter++;
|
|
|
|
} else if (value.substring(value.length() - 2, value.length()).equals("cm")) {
|
|
int num = Integer.parseInt(value.substring(0, value.length() - 2));
|
|
if (num >= 150 && num <= 193) counter++;
|
|
}
|
|
}
|
|
|
|
} else if (currentField.equals("byr")) {
|
|
|
|
String DIGITS_PATTERN = "\\d+";
|
|
if (value.matches(DIGITS_PATTERN)) {
|
|
int year = Integer.parseInt(value);
|
|
if (year >= 1920 && year <= 2002) counter++;
|
|
}
|
|
|
|
} else if (currentField.equals("iyr")) {
|
|
|
|
String DIGITS_PATTERN = "\\d+";
|
|
if (value.matches(DIGITS_PATTERN)) {
|
|
int year = Integer.parseInt(value);
|
|
if (year >= 2010 && year <= 2020) counter++;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (counter == 7) valid++;
|
|
counter = 0;
|
|
|
|
}
|
|
|
|
System.out.println("Valid: " + valid);
|
|
|
|
} catch (FileNotFoundException e) {
|
|
System.out.println(e);
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|