Advent of Code 2023: Day 1: Trebuchet?!

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

Обвязка для загрузки условий задачи – та же, что для AoC-2022. Тег для задачек 2023 года – adventofcode-2023 (или раздел Problem Solving).

Первая часть загадки первого дня

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

Часть вторая и универсальное решение

Но совсем бесполезным решение для первой части назвать нельзя – оно легло в основу универсального решения.

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); }

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

Загадка первого дня была не слишком сложной, но поначалу пошла туговато на фоне повседневного “перекладывания жысонов“.

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

11
Начать дискуссию