Задачи Advent of Code на Kotlin
Advent of Code — ежегодное декабрьское мероприятие, где ежедневные задачи с тематикой праздников публикуются с 1 по 25 декабря. С разрешения Эрика Вастла, создателя Advent of Code, мы покажем, как решать эти задачи, используя idiomatic Kotlin:
Advent of Code 2021
- Подготовка
- День 1: Sonar sweep
- День 2: Погружение!
- День 3: Бинарная диагностика
- День 4: Гигантский кальмар
Подготовка
Мы рассмотрим основные советы по решению задач Advent of Code на Kotlin:
Прочитайте нашу статью в блоге о Advent of Code 2021
Используйте шаблон на GitHub для создания проектов
-
Посмотрите приветственное видео Kotlin Developer Advocate, Себастьяна Айгнера:
День 1: Sonar sweep
Примените функции windowed и count для работы с парами и тройками целых чисел.
Прочитайте описание задачи на 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: Исправление отчёта
- День 2: Философия паролей
- День 3: Траектория санного полозька
- День 4: Обработка паспортов
- День 5: Двоичная посадка
- День 6: Таможенные сборы
- День 7: Удобные сумки
- День 8: Остановка карманного компьютера
- День 9: Ошибка кодирования
День 1: Исправление отчёта
Изучите обработку входных данных, итерацию по списку, различные способы построения карты и использование функции 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: Удобные сумки
Изучите, как использовать регулярные выражения, метод Java compute() для HashMap в Kotlin для динамических вычислений значения в карте, используйте функцию forEachLine() для чтения файлов и сравните два типа алгоритмов поиска: поиск в глубину и поиск в ширину.
Прочитайте описание задачи на Advent of Code
Посмотрите решение Паши Финкельштейна на блоге Kotlin или посмотрите видео:
День 8: Остановка карманного компьютера
Примените sealed классы и лямбды для представления инструкций, примените множества Kotlin для обнаружения циклов в выполнении программы, используйте последовательности и функцию-строитель sequence { } для построения ленивой коллекции и попробуйте экспериментальную функцию measureTimedValue() для проверки показателей производительности.
Прочитайте описание задачи на Advent of Code
Посмотрите решение Себастьяна Айгнера на блоге Kotlin или посмотрите видео:
День 9: Ошибка кодирования
Изучите различные способы обработки списков в Kotlin, используя функции any(), firstOrNull(), firstNotNullOfOrNull(), windowed(), takeIf(), и scan(), которые демонстрируют идиоматический стиль Kotlin.
Прочитайте описание задачи на Advent of Code
Посмотрите решение Светланы Исаковой на блоге Kotlin или посмотрите видео:
Что дальше?
Выполните больше задач с Kotlin Koans
Создайте рабочие приложения с бесплатной дорожкой Kotlin Basics
© 2010–2023 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