Skip to content

Commit

Permalink
2019(misc): make tasks discoverable by annotation
Browse files Browse the repository at this point in the history
  • Loading branch information
augustoccesar committed Dec 6, 2023
1 parent 6408324 commit 0e17d78
Show file tree
Hide file tree
Showing 23 changed files with 248 additions and 238 deletions.
1 change: 1 addition & 0 deletions 2019/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ ext {
}

dependencies {
implementation "org.reflections:reflections:0.10.2"
compileOnly "org.projectlombok:lombok:${LOMBOK_VERSION}"
annotationProcessor "org.projectlombok:lombok:${LOMBOK_VERSION}"

Expand Down
60 changes: 9 additions & 51 deletions 2019/src/main/java/se/augustocesar/aoc2019/Main.java
Original file line number Diff line number Diff line change
@@ -1,66 +1,24 @@
package se.augustocesar.aoc2019;

import se.augustocesar.aoc2019.day01.Day01;
import se.augustocesar.aoc2019.day02.Day02;
import se.augustocesar.aoc2019.day03.Day03;
import se.augustocesar.aoc2019.day04.Day04;
import se.augustocesar.aoc2019.day05.Day05;
import se.augustocesar.aoc2019.day06.Day06;
import se.augustocesar.aoc2019.day07.Day07;
import se.augustocesar.aoc2019.day08.Day08;
import se.augustocesar.aoc2019.day09.Day09;
import se.augustocesar.aoc2019.day10.Day10;
import se.augustocesar.aoc2019.day11.Day11;
import se.augustocesar.aoc2019.day12.Day12;
import se.augustocesar.aoc2019.day13.Day13;
import se.augustocesar.aoc2019.day14.Day14;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.function.Supplier;
import se.augustocesar.aoc2019.task.Task;
import se.augustocesar.aoc2019.task.TaskLoader;

public class Main {

protected static final Map<Integer, Supplier<Task>> availableDays = buildAvailableDaysMap();

public static void main(String[] args) {
if (args.length < 1) {
System.err.println("Invalid amount of args.");
System.exit(1);
throw new IllegalArgumentException("Invalid amount of args");
}

int dayInt = Integer.parseInt(args[0]);
final Optional<Task> day = getDay(dayInt);
final int dayArg = Integer.parseInt(args[0]);
final HashMap<Integer, Task> availableTasks = new TaskLoader("se.augustocesar.aoc2019")
.registeredTasks();

if (day.isEmpty()) {
System.err.println("Day not found.");
System.exit(1);
return;
if (!availableTasks.containsKey(dayArg)) {
throw new RuntimeException(String.format("Day %d not found", dayArg));
}

day.get().run();
}

private static HashMap<Integer, Supplier<Task>> buildAvailableDaysMap() {
HashMap<Integer, Supplier<Task>> availableDays = new HashMap<>();
availableDays.put(1, Day01::new);
availableDays.put(2, Day02::new);
availableDays.put(3, Day03::new);
availableDays.put(4, Day04::new);
availableDays.put(5, Day05::new);
availableDays.put(6, Day06::new);
availableDays.put(7, Day07::new);
availableDays.put(8, Day08::new);
availableDays.put(9, Day09::new);
availableDays.put(10, Day10::new);
availableDays.put(11, Day11::new);
availableDays.put(12, Day12::new);
availableDays.put(13, Day13::new);
availableDays.put(14, Day14::new);
return availableDays;
}

public static Optional<Task> getDay(final int dayInt) {
return Optional.ofNullable(availableDays.get(dayInt).get());
availableTasks.get(dayArg).run();
}
}
58 changes: 0 additions & 58 deletions 2019/src/main/java/se/augustocesar/aoc2019/Task.java

This file was deleted.

53 changes: 26 additions & 27 deletions 2019/src/main/java/se/augustocesar/aoc2019/day01/Day01.java
Original file line number Diff line number Diff line change
@@ -1,45 +1,44 @@
package se.augustocesar.aoc2019.day01;

import se.augustocesar.aoc2019.Task;
import java.io.IOException;
import java.util.concurrent.atomic.AtomicInteger;
import se.augustocesar.aoc2019.task.RunnableTask;
import se.augustocesar.aoc2019.task.Task;

@RunnableTask(day = 1)
public class Day01 extends Task {

@Override
public String partOne() throws IOException {
public String partOne() {
final AtomicInteger sum = new AtomicInteger(0);
streamInput(
(s) -> {
int mass = Integer.parseInt(s);
this.readInputLines().forEach(line -> {
int mass = Integer.parseInt(line);

int value = sum.get() + fuelRequired(mass);
sum.set(value);
});
int value = sum.get() + fuelRequired(mass);
sum.set(value);
});

return sum.toString();
}

@Override
public String partTwo() throws IOException {
public String partTwo() {
final AtomicInteger sum = new AtomicInteger(0);
streamInput(
(s) -> {
int mass = Integer.parseInt(s);
int fuelRequired = fuelRequired(mass);
int stageSum = fuelRequired;

while (true) {
fuelRequired = fuelRequired(fuelRequired);
if (fuelRequired <= 0) {
break;
}

stageSum += fuelRequired;
}

sum.set(sum.get() + stageSum);
});
this.readInputLines().forEach(line -> {
int mass = Integer.parseInt(line);
int fuelRequired = fuelRequired(mass);
int stageSum = fuelRequired;

while (true) {
fuelRequired = fuelRequired(fuelRequired);
if (fuelRequired <= 0) {
break;
}

stageSum += fuelRequired;
}

sum.set(sum.get() + stageSum);
});

return sum.toString();
}
Expand Down
13 changes: 7 additions & 6 deletions 2019/src/main/java/se/augustocesar/aoc2019/day02/Day02.java
Original file line number Diff line number Diff line change
@@ -1,22 +1,23 @@
package se.augustocesar.aoc2019.day02;

import se.augustocesar.aoc2019.Task;
import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import se.augustocesar.aoc2019.task.RunnableTask;
import se.augustocesar.aoc2019.task.Task;

@RunnableTask(day = 2)
public class Day02 extends Task {

@Override
public String partOne() throws IOException {
public String partOne() {
int output = generateOutput(12, 2);

return String.valueOf(output);
}

@Override
public String partTwo() throws IOException {
public String partTwo() {
boolean found = false;
int expected = 19690720;
int noun = -1;
Expand All @@ -37,8 +38,8 @@ public String partTwo() throws IOException {
return String.valueOf(result);
}

public int generateOutput(int noun, int verb) throws IOException {
String input = readInput().trim();
public int generateOutput(int noun, int verb) {
String input = this.readInput().trim();
List<Integer> inputArr =
Stream.of(input.split(",")).map(Integer::parseInt).collect(Collectors.toList());

Expand Down
18 changes: 9 additions & 9 deletions 2019/src/main/java/se/augustocesar/aoc2019/day03/Day03.java
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
package se.augustocesar.aoc2019.day03;

import se.augustocesar.aoc2019.Task;
import se.augustocesar.aoc2019.utils.Pair;
import se.augustocesar.aoc2019.utils.Point2D;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import se.augustocesar.aoc2019.task.RunnableTask;
import se.augustocesar.aoc2019.task.Task;
import se.augustocesar.aoc2019.utils.Pair;
import se.augustocesar.aoc2019.utils.Point2D;

@RunnableTask(day = 3)
public class Day03 extends Task {

@Override
public String partOne() throws IOException {
public String partOne() {
final List<HashMap<String, Pair<Point2D, Integer>>> wires = getWiresPaths();

int shortest = Integer.MAX_VALUE;
Expand All @@ -30,7 +30,7 @@ public String partOne() throws IOException {
}

@Override
public String partTwo() throws IOException {
public String partTwo() {
final List<HashMap<String, Pair<Point2D, Integer>>> wires = getWiresPaths();

int shortest = Integer.MAX_VALUE;
Expand All @@ -46,8 +46,8 @@ public String partTwo() throws IOException {
return String.valueOf(shortest);
}

private List<HashMap<String, Pair<Point2D, Integer>>> getWiresPaths() throws IOException {
List<String> input = this.readInput().lines().collect(Collectors.toList());
private List<HashMap<String, Pair<Point2D, Integer>>> getWiresPaths() {
List<String> input = this.readInputLines();
List<HashMap<String, Pair<Point2D, Integer>>> wires = new ArrayList<>();

for (String in : input) {
Expand Down
15 changes: 8 additions & 7 deletions 2019/src/main/java/se/augustocesar/aoc2019/day04/Day04.java
Original file line number Diff line number Diff line change
@@ -1,28 +1,29 @@
package se.augustocesar.aoc2019.day04;

import se.augustocesar.aoc2019.Task;
import java.io.IOException;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import se.augustocesar.aoc2019.task.RunnableTask;
import se.augustocesar.aoc2019.task.Task;

@RunnableTask(day = 4)
public class Day04 extends Task {

@Override
public String partOne() throws IOException {
public String partOne() {
return String.valueOf(getValidCount(1));
}

@Override
public String partTwo() throws IOException {
public String partTwo() {
return String.valueOf(getValidCount(2));
}

private int getValidCount(int version) throws IOException {
final String[] input = this.readInput().strip().split("-");
private int getValidCount(int version) {
final String[] input = this.readInput().split("-");
final int rangeStart = Integer.parseInt(input[0]);
final int rangeEnd = Integer.parseInt(input[1]);

Expand Down Expand Up @@ -68,7 +69,7 @@ private boolean isValid(int password, int version) {
}

return switch (version) {
case 1 -> pairs.size() > 0;
case 1 -> !pairs.isEmpty();
case 2 -> pairs.stream()
.anyMatch(pair -> stringPass.indexOf(pair) == stringPass.lastIndexOf(pair));
default -> false;
Expand Down
9 changes: 5 additions & 4 deletions 2019/src/main/java/se/augustocesar/aoc2019/day05/Day05.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package se.augustocesar.aoc2019.day05;

import se.augustocesar.aoc2019.Task;
import se.augustocesar.aoc2019.shared.intcomputer.IntComputer;
import java.io.IOException;
import se.augustocesar.aoc2019.task.RunnableTask;
import se.augustocesar.aoc2019.task.Task;

@RunnableTask(day = 5)
public class Day05 extends Task {

@Override
public String partOne() throws IOException {
public String partOne() {
String program = this.readInput().strip();
IntComputer computer = IntComputer.load(program);
computer.getInputSource().write(1);
Expand All @@ -17,7 +18,7 @@ public String partOne() throws IOException {
}

@Override
public String partTwo() throws IOException {
public String partTwo() {
String program = this.readInput().strip();
IntComputer computer = IntComputer.load(program);
computer.getInputSource().write(5);
Expand Down
Loading

0 comments on commit 0e17d78

Please sign in to comment.