Наступил последний день Advent of Code, и мы пытаемся накормить Боба немного SNAFU. Я призываю вас сначала попробовать решить ее самостоятельно https://adventofcode.com.

Вход

Сегодняшние входные данные — это список чисел в формате SNAFU; мы возьмем его как std::vector<std::string>.

Внутрь и обратно

Наша цель сегодня — написать функции преобразования из формата SNAFU и в него.

Преобразование из SNAFU простое, поскольку мы можем обращаться с ним так же, как с любым числом, закодированным текстом, увеличивая показатель степени по мере того, как мы анализируем число в обратном порядке.

Преобразование в SNAFU немного сложнее.

Во-первых, давайте рассмотрим диапазон чисел, которых мы можем достичь, если поместим определенную цифру, скажем, 2, перед нашим числом. Максимальное число будет иметь паттерн 222…, а минимальное — паттерн 2==….

Итак, когда мы должны выбрать конкретную цифру? Хорошо, когда число, которое мы пытаемся представить, находится в этом диапазоне. Следуя этой идее, теперь мы можем построить наше преобразование, проверяя нижнюю границу для каждой цифры.

И на этом мы закончили с появлением кода 2022. Большое спасибо, что присоединились ко мне в этом путешествии. Обычный контент возобновится 2 января 2023 года.

Ссылки

Репозиторий с полным решением (включая парсинг ввода) доступен здесь: https://github.com/HappyCerberus/moderncpp-aoc-2022.

Я ежедневно размещаю контент на современном C++ в Twitter, LinkedIn, Mastodon, Medium и Substack.