diff --git a/day_03/java/generic.java b/day_03/java/generic.java new file mode 100644 index 0000000..6057e90 --- /dev/null +++ b/day_03/java/generic.java @@ -0,0 +1,87 @@ +package day_03.java; + +import java.io.File; +import java.io.FileNotFoundException; +import java.util.*; + +public class generic { + public static void main(String[] args) { + if (args.length < 2) { + System.out.println("Not enough args"); + return; + }; + Scanner s; + try { + s = generic.readFile(args[0]); + } catch (FileNotFoundException e) { + System.out.println("Can't find that file"); + return; + } + + Boolean part2 = args[1].equals("2"); + Integer total = 0; + while (s.hasNextLine()) { + String c; + if (part2) { + c = generic.p2(s); + } else { + c = generic.p1(s); + } + Integer v = generic.priority(c); + total = total + v; + } + System.out.println(total); + } + + public static String p1(Scanner file) { + String l = file.next(); + Integer mid = l.length() / 2; + return generic.intersect( + l.substring(0, mid), + l.substring(mid) + ); + } + + public static String p2(Scanner file) { + String l1 = file.next(); + String l2 = file.next(); + String l3 = file.next(); + return generic.intersect( l1, l2, l3 ); + } + + public static String intersect(String... s) { + Set intersection = generic.toSet(s[0]); + for (int i = 1; i < s.length; i++) { + intersection.retainAll(generic.toSet(s[i])); + } + if (intersection.size() == 1) { + return intersection.toArray()[0].toString(); + } + return ""; + } + + public static Set toSet(String s) { + Set result = new HashSet(); + for (int i = 0; i < s.length(); i++) { + result.add(s.charAt(i)); + } + return result; + } + + public static Integer priority(String s) { + char c = s.charAt(0); + Integer v = (int) c; + if (Character.isLowerCase(c)) { + return v - 96; + } else if (Character.isUpperCase(c)) { + return v - 38; + } else { + return 0; + } + } + + public static Scanner readFile(String path) throws FileNotFoundException { + File f = new File(path); + return new Scanner(f); + } +} \ No newline at end of file