Рубрики
Без рубрики

Появление кода 2018 День 1: хрональная калибровка

День 1 на станции инструмента по исследованию и обнаружению временной аномалии … Tagged с AOC2018, Python, Puzzle, Challenge.

Этот пост изначально появился на Steadbytes.com

Полное решение можно найти на GitHub

Первая часть

Из Ввод головоломки Изменения частоты нас просят рассчитать полученная частота после всех таких изменений . Это включает в себя два шага:

  1. Проанализировать ввод головоломки в последовательность числовых значений
  2. Добавьте их!

Вход в диапазон

Проверка ввода головоломки, мы видим, что каждая частота является положительным или отрицательным целым числом, разделенным новой линией. Например:

+12
-10
-4
-8
+18

Чтобы разобрать это в последовательность числовых значений, нам нужно:

  1. Разделите вход на новички
  2. Разобрать строку формы в подписанное целое число

    • Регулярное выражение [ \+|-]\d+

Разделение питона Файл объект На новичках напрямую поддерживается в API файла:

with open("input.txt") as puzzle_input:
    lines = puzzle_input.readlines()

Расположение каждой частоты в подписанное целое число может быть достигнуто с помощью Python’s Builtin int функционируйте напрямую. При данной строке (такой как наши частоты) она будет Приставление значение для целого числа, принимая во внимание знак, если присутствует:

>>> int("+15)
15
>>> int("-15")
-15

Завершая это в функции, мы получаем:

def parse_frequencies(puzzle_input):
    return [int(f) for f in puzzle_input.readlines()]

Суммирование частот

Поскольку наши частоты являются списком целых чисел, Python облегчает эту часть с вызовом сумма :

def part_1(frequencies):
    return sum(frequencies)

Часть вторая

Далее нас просят найти Первая частота, которая возникает дважды во время последовательного применения изменений частоты при входе головоломки Анкет Описание головоломки дает подсказку импорта:

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

С этим мы можем сломать проблему:

  1. Начните с частоты 0
  2. Неоднократно Итерация по последовательности изменений частоты, применяя каждое изменение к значению частоты тока.
  3. Следите за значением частоты на каждой итерации.
  4. Если встречается частота, которая была замечена ранее, верните ее.
def part_2(frequencies):
    frequency_memo = {0}
    current_frequency = 0
    while True:
        for f in frequencies:
            current_frequency += f
            if current_frequency in frequency_memo:
                return current_frequency
            frequency_memo.add(current_frequency)

Резюме

Появление кода привлекает нас мягким введением, демонстрируя общую структуру головоломки:

  1. Прочтите немного ввода из текстового файла.
  2. Используйте его, чтобы решить 2 (обычно связанные) головоломки.

Ресурсы

Оригинал: “https://dev.to/steadbytes/aoc-2018-day-1-chronal-calibration-3eh2”