Наступил последний день 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.