В декабре мы отсчитываем дни до Рождества. У людей часто есть адвент-календари, наполненные шоколадом или даже Lego.

Но как насчет того, если вы программист, как вы можете считать дни до Рождества? А если бы у вас было ежедневное соревнование по кодированию на тему Рождества? Что ж, www.adventofcode.com — это ответ.

Каждый день доступно новое испытание. Пока проблемы связаны с Рождеством и Санта-Клаусом, доставляющим свои подарки. Задача разделена на две тесно связанные части. Вам предоставляется случайно сгенерированный ввод, и вам нужно дать ответ, используя короткую строку или число.

Задачи становятся все сложнее, а некоторые полностью побеждают меня (что неудивительно, учитывая мои ограниченные знания в области программирования). Задачи не зависят от языка, поэтому вы можете попробовать их на JavaScript или C#. Я использую Visual Studio и C#, и мой код доступен для просмотра на github.

На данный момент я выполнил задания с 1 по 6, а также 10. Отчасти потому, что задание 7 показалось мне очень трудным, но я надеюсь попробовать его еще раз.

Во время написания кода для решения этих задач я провел немало рефакторинга. Я начал с простого консольного приложения, в котором большая часть моего кода находилась в одном методе. По мере увеличения количества задач я начал перемещать код каждой задачи в отдельный класс с методами и свойствами, уникальными для этой задачи. Я также добавил главное меню, чтобы вы могли выбрать, какое испытание выполнить. Некоторый мой код для ответа на задачи требует некоторого времени для запуска, так что это значительно сэкономило время по сравнению с выполнением каждой задачи по порядку.

Эти задачи очень хорошо учат меня программированию. Мне нужно подумать о структурах данных, как лучше всего хранить эту информацию, о классах и методах и типах возвращаемых значений, как выводить данные на экран, как вводить/импортировать данные.

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

Санта пытается доставить подарки в большом многоквартирном доме, но не может найти нужный этаж — полученные им направления немного сбивают с толку. Он начинает с первого этажа (этаж 0), а затем следует инструкциям по одному символу за раз.

Открывающая скобка ( означает, что он должен подняться на один этаж, а закрывающая скобка ) означает, что он должен спуститься на один этаж.

Это простой цикл через длинную строку ( и ) и отслеживание номера этажа, на котором вы находитесь, чтобы вычислить, на каком этаже заканчивает Санта. Вторая часть задачи спрашивает, в какой момент вашей входной строки Санта достигает подвала (этаж -1).