-
Notifications
You must be signed in to change notification settings - Fork 0
/
Day03.java
67 lines (62 loc) · 2.44 KB
/
Day03.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package Day03;
import java.io.*;
import java.util.Scanner;
public class Day03 {
public static void main(String[] args) {
try {
Scanner scanner = new Scanner(new File("src/Day03/supplies.txt"));
int priority = 0;
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
String sameItem = "";
String firstCompartment = line.substring(0, line.length() / 2);
String secondCompartment = line.substring(line.length() / 2);
sameItem = findSameItems(firstCompartment, secondCompartment);
priority += getLetterPriority(sameItem);
}
System.out.println("part1: " + priority);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
//part 2
try {
Scanner scanner = new Scanner(new File("src/Day03/supplies.txt"));
int priority = 0;
while (scanner.hasNextLine()) {
String firstLine = scanner.nextLine();
String secondLine = scanner.nextLine();
String thirdLine = scanner.nextLine();
String sameItem = findSameItems(thirdLine, findSameItems(firstLine, secondLine));
priority += getLetterPriority(sameItem);
}
System.out.println("part2: " + priority);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
// Lowercase item types a through z have priorities 1 through 26.
// Uppercase item types A through Z have priorities 27 through 52.
private static int getLetterPriority(String letter) {
int priority = letter.codePointAt(0);
if (priority >= 65 && priority <= 90) {
priority -= 64 - 26;
} else {
priority -= 96;
}
return priority;
}
// Find the item type that appears in both compartments of each rucksack
private static String findSameItems(String first, String second) {
String sameItem = "";
for (int i = 0; i < first.length(); i++) {
String firstChar = String.valueOf(first.charAt(i));
for (int j = 0; j < second.length(); j++) {
String secondChar = String.valueOf(second.charAt(j));
if (firstChar.equals(secondChar)) {
sameItem += firstChar;
}
}
}
return sameItem;
}
}