Day 6 implementation in Java
parent
217ec505f7
commit
58d61834ab
|
|
@ -0,0 +1,49 @@
|
|||
package day6;
|
||||
|
||||
import io.vavr.collection.List;
|
||||
import util.FileReader;
|
||||
|
||||
|
||||
public class Main {
|
||||
private static final boolean ARE_SPACES_IGNORED = true;
|
||||
private static final String TIMES_LINE_PREFIX = "Time:";
|
||||
private static final String DISTANCES_LINE_PREFIX = "Distance:";
|
||||
|
||||
public static void main(String[] args) {
|
||||
String inputFilePath = System.getProperty("user.dir") + "\\java\\src\\main\\java\\day6\\input.txt";
|
||||
FileReader reader = new FileReader(inputFilePath);
|
||||
List<String> inputData = List.ofAll(reader.readContents());
|
||||
|
||||
if (ARE_SPACES_IGNORED) {
|
||||
inputData = inputData.map(string -> string.replaceAll(" ", ""));
|
||||
}
|
||||
|
||||
List<Long> times = List.of(inputData.get(0)
|
||||
.replace(TIMES_LINE_PREFIX, "")
|
||||
.split(" "))
|
||||
.filter(string -> !string.isEmpty())
|
||||
.map(Long::parseLong);
|
||||
List<Long> distances = List.of(inputData.get(1)
|
||||
.replace(DISTANCES_LINE_PREFIX, "")
|
||||
.split(" "))
|
||||
.filter(string -> !string.isEmpty())
|
||||
.map(Long::parseLong);
|
||||
|
||||
Long multipliedValues = times.zip(distances)
|
||||
.map(timeAndDistance -> getValidHoldingTimesCount(timeAndDistance._1, timeAndDistance._2))
|
||||
.foldLeft(1L, (accumulator, value) -> accumulator * value);
|
||||
System.out.println(multipliedValues);
|
||||
}
|
||||
|
||||
/**
|
||||
* Solves the equation (raceTime - holdingTime) * holdingTime > recordDistance
|
||||
*/
|
||||
private static Long getValidHoldingTimesCount(Long raceTime, Long recordDistance) {
|
||||
Double discriminant = Math.sqrt(raceTime * raceTime - 4 * recordDistance);
|
||||
|
||||
Long maximumHoldingTime = (long) Math.floor((raceTime + discriminant) / 2.);
|
||||
Long minimumHoldingTime = (long) Math.ceil((raceTime - discriminant) / 2.);
|
||||
|
||||
return maximumHoldingTime - minimumHoldingTime + 1;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue