Найти в Дзене
3 подписчика

Advent of Code 2023: Day 1: Trebuchet?!


Снова AoC — и снова начат с опозданием. Дуплет! Основная идея прежняя – решать в jshell, пока это не станет слишком многословным. Экономия на буковках, в общем.
Обвязка для загрузки условий задачи – та же, что для AoC-2022. Тег #adventofcode_2023, или страница на сайте.

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

Часть вторая и универсальное решение
Совсем бесполезным решение для первой части назвать нельзя – легло в основу универсального.
static void day1(String puzzleInputUri) throws IOException, InterruptedException {
Map<String, String> digits = Map.of(
"1", "one",
"2", "two",
"3", "three",
"4", "four",
"5", "five",
"6", "six",
"7", "seven",
"8", "eight",
"9", "nine"
);
TreeMap<Integer, String> firstLast = new TreeMap<>();
var result = client.send(request.uri((URI.create(puzzleInputUri))).build(), HttpResponse.BodyHandlers.ofLines()).body()
.map(string -> {
firstLast.clear();
digits.forEach((digit, numeric) -> {
firstLast.put(string.indexOf(digit), digit);
firstLast.put(string.lastIndexOf(digit), digit);
firstLast.put(string.indexOf(numeric), digit);
firstLast.put(string.lastIndexOf(numeric), digit);
}
);
firstLast.remove(-1); // not matched substrings index
return firstLast.firstEntry().getValue() + firstLast.lastEntry().getValue();
})
.mapToInt(Integer::parseInt)
.sum();
System.out.println(result);
}

Жаль, что — для экономии буковок — не удалось отыскать где-нибудь в недрах стандартной библиотеки (Locale etc) готовых привязок цифр к числительным. Хотя и ожидаемо.
Загадка первого дня была не слишком сложной, но поначалу пошла туговато на фоне повседневного “перекладывания жысонов“.

Тем полезней переключаться! Участвуй!

#adventofcode #adventofcode_2023
@panykey | Искусство реализации идей
1 минута