summaryrefslogtreecommitdiff
path: root/day03/day03.java
diff options
context:
space:
mode:
Diffstat (limited to 'day03/day03.java')
-rw-r--r--day03/day03.java117
1 files changed, 117 insertions, 0 deletions
diff --git a/day03/day03.java b/day03/day03.java
new file mode 100644
index 0000000..4d4caa9
--- /dev/null
+++ b/day03/day03.java
@@ -0,0 +1,117 @@
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.util.ArrayList;
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
+
+class Number {
+ int row, colstart, colend, value;
+
+ public Number(int row, int colstart, int colend, int value) {
+ this.row = row;
+ this.colstart = colstart;
+ this.colend = colend;
+ this.value = value;
+ }
+
+ public String toString() {
+ return "[" + this.row + ", " + this.colstart + "-" + this.colend + "]: " + this.value;
+ }
+}
+
+class Symbol {
+ int row, col;
+ String symbol;
+
+ public Symbol(int row, int col, String symbol) {
+ this.row = row;
+ this.col = col;
+ this.symbol = symbol;
+ }
+
+ public String toString() {
+ return "[" + this.row + ", " + this.col + "]: " + this.symbol;
+ }
+}
+
+public class day03 {
+ public static void main(String args[]) throws IOException {
+ RandomAccessFile input = new RandomAccessFile("input", "r");
+ System.out.println("Day 01 Part 1: " + part1(input));
+ input.seek(0);
+ System.out.println("Day 01 Part 2: " + part2(input));
+ input.close();
+ }
+
+ public static String part1(RandomAccessFile input) throws IOException {
+ String line;
+ int row = 0;
+ ArrayList<Number> numbers = new ArrayList<>();
+ ArrayList<Symbol> symbols = new ArrayList<>();
+
+ while ((line = input.readLine()) != null) {
+ getNumbers(numbers, row, line);
+ getSymbols(symbols, row, line);
+ row += 1;
+ }
+
+ int tot = 0;
+ for (Number num: numbers) {
+ boolean part = false;
+ for (Symbol sym: symbols) {
+ for (int col = num.colstart - 1; col <= num.colend + 1; col++) {
+ if (sym.row == num.row - 1 && sym.col == col) {
+ part = true;
+ }
+ if (sym.row == num.row + 1 && sym.col == col) {
+ part = true;
+ }
+ }
+ if (sym.row == num.row && sym.col == num.colstart - 1) {
+ part = true;
+ }
+ if (sym.row == num.row && sym.col == num.colend + 1) {
+ part = true;
+ }
+ }
+ if (part) {
+ tot += num.value;
+ }
+ }
+
+ return Integer.toString(tot);
+ }
+
+ private static void getNumbers(ArrayList<Number> numbers, int row, String line) {
+ Pattern pat = Pattern.compile("\\d+");
+ Matcher mat = pat.matcher(line);
+ while (mat.find()) {
+ numbers.add(
+ new Number(
+ row,
+ mat.start(),
+ mat.end() - 1,
+ Integer.parseInt(mat.group())
+ )
+ );
+ }
+ }
+
+ private static void getSymbols(ArrayList<Symbol> symbols, int row, String line) {
+ Pattern pat = Pattern.compile("[^0-9.]");
+ Matcher mat = pat.matcher(line);
+ while (mat.find()) {
+ symbols.add(
+ new Symbol(
+ row,
+ mat.start(),
+ mat.group()
+ )
+ );
+ }
+ }
+
+ public static String part2(RandomAccessFile input) throws IOException {
+ return "WIP";
+ }
+}