static void day2(String puzzleInputUri) throws IOException, InterruptedException {
/*
rock: A, X
scissors: C, Z
paper: B, Y
*/
Map<String, Integer> choiceCosts = Map.of("X", 1, "Y", 2, "Z", 3);
Map<Integer, Set<String>> strategyCosts = Map.of(
6, Set.of("A Y", "C X", "B Z"), //win
3, Set.of("A X", "C Z", "B Y"), //draw
0, Set.of("A Z", "C Y", "B X") //lose
);
Map<String, Set<String>> strategyMappingPartTwo = Map.of(
"X", strategyCosts.get(0), //lose
"Y", strategyCosts.get(3), //draw
"Z", strategyCosts.get(6) //win
);
int totalPartOne = client.send(request.uri((URI.create(puzzleInputUri))).build(), HttpResponse.BodyHandlers.ofLines()).body()
.map(round -> Map.entry(round,
strategyCosts.entrySet().stream().mapToInt(entry -> entry.getValue().contains(round) ? entry.getKey() : 0).sum())
)
.mapToInt(roundWithCost -> {
String choice = roundWithCost.getKey().split(" ")[1];
return roundWithCost.getValue() + choiceCosts.get(choice);
})
.sum();
System.out.println(totalPartOne);
int totalPartTwo = client.send(request.uri((URI.create(puzzleInputUri))).build(), HttpResponse.BodyHandlers.ofLines()).body()
.map(round -> round.split(" "))
.map(choiceAndStrategy -> strategyMappingPartTwo.get(choiceAndStrategy[1]).stream()
.filter(strategies -> strategies.contains(choiceAndStrategy[0]))
.findAny()
)
.flatMap(Optional::stream)
.mapToInt(round -> {
int cost = strategyCosts.entrySet().stream().mapToInt(entry -> entry.getValue().contains(round) ? entry.getKey() : 0).sum();
return cost + choiceCosts.get(round.split(" ")[1]);
})
.sum();
System.out.println(totalPartTwo);
}
Комментарий недоступен
Если ты способен написать инструкцию по приготовлению яичницы(очень подробную инструкцию), то можешь и программировать
люди умеют учудить(зач.) удивить. для меня это тоже загадка.
Фу, джава
не мы такие - жизнь такая... то есть "ква"!
А зачем дважды отправлять один и тот же запрос?
Чтобы дважды получить один и тот же ответ, но с разными результатами. То есть - чтобы дважды получить одинаковый результат, но разные ответы.
Иными словами...
Да хз. Так проще. В этой викторине нет задач на оптимизацию наносекунд и экономию битов.