day 1
This commit is contained in:
commit
3a7e2e235b
|
@ -0,0 +1,2 @@
|
||||||
|
.vscode/
|
||||||
|
target/
|
|
@ -0,0 +1,74 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<groupId>sugui</groupId>
|
||||||
|
<artifactId>aoc23</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
|
||||||
|
<name>aoc23</name>
|
||||||
|
<!-- FIXME change it to the project's website -->
|
||||||
|
<url>http://www.example.com</url>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
<maven.compiler.release>17</maven.compiler.release>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit</artifactId>
|
||||||
|
<version>4.11</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
|
||||||
|
<plugins>
|
||||||
|
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-clean-plugin</artifactId>
|
||||||
|
<version>3.1.0</version>
|
||||||
|
</plugin>
|
||||||
|
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-resources-plugin</artifactId>
|
||||||
|
<version>3.0.2</version>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>3.8.0</version>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
|
<version>2.22.1</version>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-jar-plugin</artifactId>
|
||||||
|
<version>3.0.2</version>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-install-plugin</artifactId>
|
||||||
|
<version>2.5.2</version>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-deploy-plugin</artifactId>
|
||||||
|
<version>2.8.2</version>
|
||||||
|
</plugin>
|
||||||
|
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-site-plugin</artifactId>
|
||||||
|
<version>3.7.1</version>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-project-info-reports-plugin</artifactId>
|
||||||
|
<version>3.0.0</version>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</pluginManagement>
|
||||||
|
</build>
|
||||||
|
</project>
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,82 @@
|
||||||
|
package sugui;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.StringReader;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.function.IntPredicate;
|
||||||
|
|
||||||
|
public class Day01 {
|
||||||
|
public static Path inputPath = Paths.get("resources/input01.txt");
|
||||||
|
|
||||||
|
public static Map<String, List<String>> spelledDigitsMap = Map.of(
|
||||||
|
"1", List.of("1", "one"),
|
||||||
|
"2", List.of("2", "two"),
|
||||||
|
"3", List.of("3", "three"),
|
||||||
|
"4", List.of("4", "four"),
|
||||||
|
"5", List.of("5", "five"),
|
||||||
|
"6", List.of("6", "six"),
|
||||||
|
"7", List.of("7", "seven"),
|
||||||
|
"8", List.of("8", "eight"),
|
||||||
|
"9", List.of("9", "nine"));
|
||||||
|
|
||||||
|
public static void main(String[] args) throws IOException {
|
||||||
|
var input = Files.readString(inputPath);
|
||||||
|
var firstResult = getFirstPuzzleResult(input);
|
||||||
|
var secondResult = getSecondPuzzleResult(input);
|
||||||
|
System.out.println("First result: " + firstResult);
|
||||||
|
System.out.println("Second result: " + secondResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getFirstPuzzleResult(String input) throws IOException {
|
||||||
|
IntPredicate isDigit = c -> Character.isDigit(c);
|
||||||
|
var bufferedReader = new BufferedReader(new StringReader(input));
|
||||||
|
var result = bufferedReader.lines()
|
||||||
|
.map(line -> {
|
||||||
|
var digits = line
|
||||||
|
.chars()
|
||||||
|
.filter(isDigit)
|
||||||
|
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
|
||||||
|
.toString();
|
||||||
|
var number = digits.isEmpty() ? 0
|
||||||
|
: Integer.parseInt(
|
||||||
|
String.format(
|
||||||
|
"%c%c",
|
||||||
|
digits.charAt(0),
|
||||||
|
digits.charAt(digits.length() - 1)));
|
||||||
|
return number;
|
||||||
|
})
|
||||||
|
.reduce(0, (a, b) -> a + b);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getSecondPuzzleResult(String input) throws IOException {
|
||||||
|
var bufferedReader = new BufferedReader(new StringReader(input));
|
||||||
|
var result = bufferedReader.lines()
|
||||||
|
.map(line -> {
|
||||||
|
Map<Integer, String> positions = new HashMap<>();
|
||||||
|
spelledDigitsMap.forEach((digit, spelledDigits) -> {
|
||||||
|
spelledDigits.forEach(spelled -> {
|
||||||
|
int firstIndex = line.indexOf(spelled);
|
||||||
|
int lastIndex = line.lastIndexOf(spelled);
|
||||||
|
if (firstIndex != -1) {
|
||||||
|
positions.put(firstIndex, digit);
|
||||||
|
positions.put(lastIndex, digit);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
int maxPosition = Collections.max(positions.keySet());
|
||||||
|
int minPosition = Collections.min(positions.keySet());
|
||||||
|
|
||||||
|
int number = Integer.parseInt(positions.get(minPosition) + positions.get(maxPosition));
|
||||||
|
return number;
|
||||||
|
}).reduce(0, (a, b) -> a + b);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,42 @@
|
||||||
|
package sugui;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unit test for simple App.
|
||||||
|
*/
|
||||||
|
public class Day01Test {
|
||||||
|
public static String firstBasicInput = """
|
||||||
|
1abc2
|
||||||
|
pqr3stu8vwx
|
||||||
|
a1b2c3d4e5f
|
||||||
|
treb7uchet
|
||||||
|
""";
|
||||||
|
public static String secondBasicInput = """
|
||||||
|
two1nine
|
||||||
|
eightwothree
|
||||||
|
abcone2threexyz
|
||||||
|
xtwone3four
|
||||||
|
4nineeightseven2
|
||||||
|
zoneight234
|
||||||
|
7pqrstsixteen
|
||||||
|
""";
|
||||||
|
public static int firstBasicResult = 142;
|
||||||
|
public static int secondBasicResult = 281;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void firstBasicCase() throws IOException {
|
||||||
|
int actualResult = Day01.getFirstPuzzleResult(firstBasicInput);
|
||||||
|
assertEquals(firstBasicResult, actualResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void secondBasicCase() throws IOException {
|
||||||
|
int actualResult = Day01.getSecondPuzzleResult(secondBasicInput);
|
||||||
|
assertEquals(secondBasicResult, actualResult);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue