Задачи Advent of Code в идиоматическом Kotlin
Advent of Code — это ежегодное событие, которое проходит в декабре: каждый день с 1 по 25 декабря публикуется новая тематическая праздничная задача. С разрешения Эрика Уэстла, создателя Advent of Code, мы покажем, как решать эти задачи в идиоматическом стиле Kotlin:
Подготовьтесь к Advent of Code
Мы расскажем об основных советах, которые помогут вам приступить к решению задач Advent of Code на Kotlin:
Используйте этот шаблон GitHub для создания проектов
Посмотрите приветственное видео от представителя сообщества разработчиков Kotlin Себастьяна Айгнера:
Advent of Code 2022
День 1: Подсчёт калорий
Узнайте о шаблоне Kotlin для Advent of Code и удобных функциях для работы со строками и коллекциями в Kotlin, таких как maxOf() и sumOf(). Посмотрите, как функции-расширения помогают удобно структурировать решение.
Прочитайте описание задачи на сайте Advent of Code
Посмотрите решение в видео:
День 2: Камень, ножницы, бумага
Разберитесь с операциями над типом Char в Kotlin и посмотрите, как тип Pair и конструктор to удобно использовать с сопоставлением с образцом. Узнайте, как упорядочивать собственные объекты с помощью функции compareTo().
Прочитайте описание задачи на сайте Advent of Code
Посмотрите решение в видео:
День 3: Перестановка рюкзаков
Узнайте, как библиотека kotlinx.benchmark помогает понять характеристики производительности вашего кода. Посмотрите, как операции над множествами, например intersect, помогают находить общие данные, и сравните производительность разных реализаций одного решения.
Прочитайте описание задачи на сайте Advent of Code
Посмотрите решение в видео:
День 4: Уборка лагеря
Узнайте, как функции infix и operator помогают сделать код выразительнее, а функции-расширения для типов String и IntRange — легко разбирать входные данные.
Прочитайте описание задачи на сайте Advent of Code
Посмотрите решение в видео:
День 5: Штабеля ящиков
Узнайте, как создавать более сложные объекты с помощью фабричных функций, использовать регулярные выражения и работать с двусторонней очередью типа ArrayDeque.
Прочитайте описание задачи на сайте Advent of Code
Посмотрите решение в видео:
День 6: Проблемы с настройкой
Узнайте больше о подробном анализе производительности с библиотекой kotlinx.benchmark и сравните характеристики 16 разных вариантов одного решения.
Прочитайте описание задачи на сайте Advent of Code
Посмотрите решение в видео:
День 7: На устройстве не осталось места
Узнайте, как моделировать древовидные структуры, и посмотрите демонстрацию программной генерации кода Kotlin.
Прочитайте описание задачи на сайте Advent of Code
Посмотрите решение в видео:
День 8: Домик на вершине дерева
Посмотрите на sequence в действии и узнайте, насколько первый черновой вариант программы может отличаться от идиоматического решения на Kotlin (специальный гость — Роман Елизаров!).
Прочитайте описание задачи на сайте Advent of Code
Посмотрите решение в видео:
День 9: Мост из верёвок
Познакомьтесь с функцией run, именованными возвратами и удобными функциями стандартной библиотеки, такими как coerceIn или zipWithNext. Узнайте, как создавать списки заданного размера с помощью конструкторов List и MutableList, а также взгляните на визуализацию условия задачи, созданную на Kotlin.
Прочитайте описание задачи на сайте Advent of Code
Посмотрите решение в видео:
День 10: Электронно-лучевая трубка
Узнайте, как диапазоны и оператор in упрощают проверку диапазонов, как параметры функций можно превратить в получателей, а также познакомьтесь с модификатором tailrec.
Прочитайте описание задачи на сайте Advent of Code
Посмотрите решение в видео:
День 11: Обезьяна посередине
Узнайте, как перейти от изменяемого императивного кода к более функциональному подходу с неизменяемыми структурами данных и структурами только для чтения. Познакомьтесь с контекстными получателями и узнайте, как наш гость создал собственную библиотеку визуализации специально для Advent of Code.
Прочитайте описание задачи на сайте Advent of Code
Посмотрите решение в видео:
День 12: Алгоритм подъёма на холм
Используйте очереди, ArrayDeque, ссылки на функции и модификатор tailrec, чтобы решать задачи поиска пути на Kotlin.
Прочитайте описание задачи на сайте Advent of Code
Посмотрите решение в видео:
Advent of Code 2021
День 1: Сканирование сонаром
Используйте функции оконной обработки и подсчёта, чтобы работать с парами и тройками целых чисел.
Прочитайте описание задачи на сайте Advent of Code
Посмотрите решение Антона Архипова в блоге Kotlin или видео:
День 2: Погружение!
Узнайте о деструктурирующих объявлениях и выражении when.
Прочитайте описание задачи на сайте Advent of Code
Посмотрите решение Паши Финкельштейна на GitHub или видео:
День 3: Бинарная диагностика
Изучите разные способы работы с двоичными числами.
Прочитайте описание задачи на сайте Advent of Code
Посмотрите решение Себастьяна Айгнера в блоге Kotlin или видео:
День 4: Гигантский кальмар
Узнайте, как разобрать входные данные и добавить классы предметной области для более удобной обработки.
Прочитайте описание задачи на сайте Advent of Code
Посмотрите решение Антона Архипова на GitHub или видео:
Advent of Code 2020
День 1: Исправление отчёта
Изучите обработку входных данных, перебор списка, разные способы создания map и использование функции let для упрощения кода.
Прочитайте описание задачи на сайте Advent of Code
Посмотрите решение Светланы Исаковой в блоге Kotlin или видео:
День 2: Философия паролей
Изучите вспомогательные функции для работы со строками, регулярные выражения, операции над коллекциями и то, как функция let помогает преобразовывать выражения.
Прочитайте описание задачи на сайте Advent of Code
Посмотрите решение Светланы Исаковой в блоге Kotlin или видео:
День 3: Траектория тобоггана
Сравните императивный и более функциональный стили кода, поработайте с парами и функцией reduce(), отредактируйте код в режиме выбора столбцов и исправьте переполнение целых чисел.
Прочитайте описание задачи на сайте Advent of Code
Посмотрите решение Михаила Дворкина на GitHub или видео:
День 4: Обработка паспортов
Используйте выражение when и изучите разные способы проверки входных данных: вспомогательные функции, работу с диапазонами, проверку принадлежности множеству и сопоставление с определённым регулярным выражением.
Прочитайте описание задачи на сайте Advent of Code
Посмотрите решение Себастьяна Айгнера в блоге Kotlin или видео:
День 5: Посадка по двоичному коду
Используйте функции стандартной библиотеки Kotlin (replace(), toInt(), find()) для работы с двоичным представлением чисел, изучите возможности локальных функций и узнайте, как использовать функцию max() в Kotlin 1.5.
Прочитайте описание задачи на сайте Advent of Code
Посмотрите решение Светланы Исаковой в блоге Kotlin или видео:
День 6: Таможня по собственным правилам
Узнайте, как группировать символы в строках и коллекциях и подсчитывать их с помощью функций стандартной библиотеки: map(), reduce(), sumOf(), intersect() и union().
Прочитайте описание задачи на сайте Advent of Code
Посмотрите решение Антона Архипова в блоге Kotlin или видео:
День 7: Удобные сумки
Узнайте, как использовать регулярные выражения и метод compute() Java для HashMap, позволяющий динамически вычислять значение в map, функцию forEachLine() для чтения файлов, а также сравните два типа алгоритмов поиска: поиск в глубину и поиск в ширину.
Прочитайте описание задачи на сайте Advent of Code
Посмотрите решение Паши Финкельштейна в блоге Kotlin или видео:
День 8: Сбой портативной консоли
Используйте запечатанные классы и лямбды для представления инструкций, множества Kotlin для обнаружения циклов при выполнении программы, последовательности и функцию-построитель sequence { } для создания ленивой коллекции, а также экспериментальную функцию measureTimedValue() для проверки показателей производительности.
Прочитайте описание задачи на сайте Advent of Code
Посмотрите решение Себастьяна Айгнера в блоге Kotlin или видео:
День 9: Ошибка кодирования
Изучите разные способы обработки списков в Kotlin с помощью функций any(), firstOrNull(), firstNotNullOfOrNull(), windowed(), takeIf() и scan(), демонстрирующих идиоматический стиль Kotlin.
Прочитайте описание задачи на сайте Advent of Code
Посмотрите решение Светланы Исаковой в блоге Kotlin или видео:
Что дальше?
Выполните больше заданий с помощью Kotlin Koans
Создавайте работающие приложения с помощью бесплатного курса Kotlin Core от JetBrains Academy
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/advent-of-code.html