Advent of Code 2022: Day 2

Задачка второго дня оказалась повариативней, пришлось искать отдельные решения для первой и второй частей.

Тем не менее — они были найдены, а ответы — получены. Как обычно — решение в виде функции запускается в jshell.

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); }
22
9 комментариев

Комментарий недоступен

2
Ответить

Если ты способен написать инструкцию по приготовлению яичницы(очень подробную инструкцию), то можешь и программировать

Ответить
Автор

люди умеют учудить(зач.) удивить. для меня это тоже загадка.

Ответить

Фу, джава

1
Ответить
Автор

не мы такие - жизнь такая... то есть "ква"!

Ответить

А зачем дважды отправлять один и тот же запрос?

Ответить
Автор

Чтобы дважды получить один и тот же ответ, но с разными результатами. То есть - чтобы дважды получить одинаковый результат, но разные ответы.
Иными словами...
Да хз. Так проще. В этой викторине нет задач на оптимизацию наносекунд и экономию битов.

Ответить