Backend-разработка

Присоединяйтесь к нашей программе обучения

Задание 1: теория

Установка ПО

Рекомендуем установить Haskell Stack и все упражнения запускать в нем.

  • установка для Windows:

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

    • используйте установщик, минимальная версия системы - Windows 7 64-разрядная.

  • установка для Linux & Mac OS X: установите по инструкции или поставьте нужный пакет (stack или haskell-stack) через пакетный менеджер вашей ОС (apt, yum, brew и т.п.). Версия на сайте более свежая.

Больше ничего устанавливать не требуется, никаких Haskell Platform, ghcup, ghc, cabal. Stack самостоятельно скачает и установит компилятор и библиотеки.Как запустить: откройте консоль (командную строку) и наберите команду stack repl - запустится интерпретатор выражений Haskell. В первый раз придется подождать, пока загрузится и установится компилятор. Если установка выполнена правильно, отобразится подсказка ко вводу:

Prelude> _

Базовая подготовка

Более сложная теория

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

Рекомендуемые каты

Ниже рекомендуемые для прохождения каты из Codewars. Они примерно отсортированы от легких к сложным, выбирайте сами подходящий момент, когда начинать их делать (но по большей части после 6 главы Learn you a Haskell можно смело браться за первые задания):

  • Is this a triangleОпределение, могут ли данных три числа быть длинами сторон треугольника. С этой катой тренируются базовые логические конструкции. Полезно, что есть простор и для элегантных решений, и для решений "в лоб". Есть вероятность, что практикующий потренирует так же совсем базовую работу со списками (хотя тут это необязательно).

  • Disemvowel trollsЗадача на удаление всех гласных (почти) из строки. Позволяет закрепить отношение к строкам, как к списку символов, тренирует работу со списками, особенно базовые навыки фильтрации. Ката была выбрана в том числе из-за интересного оформления самой задачи и конкретного use case, где нужно защищаться от кричащих троллей :)

  • Highest and lowestНайти самое большое и самое маленькое значение из строки чисел, которую надо предварительно распарсить. Отличная задача для начального уровня, позволяет натренировать парсинг инстансов Read и самую базовую работу со списками (на поиск наименьшего и наибольшего значений). Естественно, и то, и другое, будет полезно уже при решении реальных задач.

  • IsogramsЗадача на вычисление дубликатов в массиве. Это наглядный экземпляр стандартного алгоритмического задания, которое в разных вариациях часто встречается в упражнениях почти на всех языках. Здесь же можно опробовать её на Хаскеле и сравнить (на деле или интуитивно) с тем, как бы это решалось на остальных языках. Как и почти во всех классических задачах, тут есть простор для фантазии, несмотря на простоту описания. Можно решать как банальными конструкциями, а можно попытаться найти что-то изящное :)

  • Split stringsЗадача с предельно простым описанием, очень ясным примером, но которая не такая очевидная в решении. Хорошо иллюстрирует работы с паттерн-матчингом и конструированием списков, которые тут приходится то разбирать, то собирать. Ну и, естественно, отличная тренировка самой базовой рекурсии.

  • Tribonacci sequenceИнтересная вариация набившей оскомину задачи про ряд Фибоначчи. Очень простое с виду изменение правил игры заставляет призадуматься. Ката отлично тренирует конструирование списков и рекурсию, либо умение обходиться без рекурсии стандартными функциями высшего порядка :)

  • Title caseКульминация базовых тренировок, где необходимо уметь работать и с символами, и со строками, и со списками. Задача, которая действительно может встретиться в боевых условиях, и которая позволит показать навыки написания "читаемого" кода. Здесь есть возможность, как для явной рекурсии, так и для использования стандартных функций высшего порядка, есть интересное требование замены буквы на заглавный аналог и условие, когда вообще ничего делать не надо :)

Дополнительные каты

Публикуем список дополнительных кат от тех, кто проходил обучение до вас) Все это не обязательно к выполнению, это просто для вашего собственного развития. Список будет дополняться. :)

  • DubstepПозволяет ещё немного потренироваться работать со списками. Можно написать рекурсивное решение, либо попробовать работать со свёртками, либо просто глубже поковырять стандартную библиотеку и найти в ней функции, позволяющие легко справиться с задачей.

  • Valid bracesНужно проверить все ли скобки в выражении закрываются. Можно решать разными способами. Она заставляет задуматься, что является аналогом стека в хаскеле, и тренирует навыки обращения со свертками.

  • Product of consecutive Fib numbersНужно найти является ли переданное число произведением соседних чисел в последовательности Фибоначчи. Задача тренирует навыки создания рекурсии, или обращения с функциями из Data.List.

  • Reverse wordsПеревернуть все слова по отдельности. Пробелы оставить как есть. У этой каты есть красивое решение с использованием комбинатора из Data.Function. Будет полезно познакомиться с этим модулем.

  • SnailИнтересная с задача с простым условием, для которой сразу понятен императивный алгоритм с вложенными циклами, но не сразу — функциональный. Помечена как 4-ый кью, но на самом деле достаточно первых глав LYAH и умения работать со списками.

  • Equal sides of arrayВ задаче нужно найти индекс элемента в списке, где сумма элементов списка слева будет равна сумме элементов списка справа от найденного элемента. Если же такого элемента нет, то вывести -1. В этой кате можно отработать работу со списками, поискать вспомогательные функции в модуле Data.List или же просто посмотреть интересные решение других людей.

  • Go so far around to the right that you end up leftНеобходимо реализовать левую свертку через правую. Для решения нужно ознакомиться с реализацией обеих сверток и хорошо понимать, как работает каждая из них. Для решения нужно хорошо разобраться в принципе работы обеих сверток, так как использовать reverse = читерить.

  • Take a Ten Minute WalkНужно проверить предложенный маршрут (движение по сторонам света) на два условия: длительность (10 минут при минуте на одно перемещение) и совпадение начальной и конечной точки (вернуться туда, откуда пришёл). Тренирует работу со списками или использование Data.List.

  • Highest Rank Number in an ArrayНебольшая ката для практики бесточечного стиля и работы со стандартными модулями типа Data.List, Data.Ord и т.д. на ваш выбор.

  • Duplicate EncoderПростая ката, нацеленная на поиск дубликатов в массиве, что часто встречается в реальных задачах.

  • Next bigger number with the same digitsКата с очевидным брутфорс-решением. Попытайтесь найти наиболее оптимальный алгоритм, потому как если написать слишком просто, то все тесты пройти не успеет.

  • Find The Parity OutlierУ FindOutlier множестово разных решений функциями из Data.List, или можно в лоб, сверткой, тренирует паттерн матчинг и функции как объекты первого класса.

  • Most frequently used words in a textДостаточно простая ката для 4 кью. Тренирует обработку строки с использованием Data.Char и Data.List.

  • Fibonacci, Tribonacci and friendsЛогическое продолжение каты Tribonacci, достаточно интересное и неординарное решение, тренирует мозги.

  • Sortable ShapesЭто простая ката 6 кью (30 минут на решение достаточно) позволит Вам потренироваться в создании пользовательского типа данных. Основной результат - это понимание реализации каких классов нужно предусмотреть для созданного типа, чтобы данные могли отправляться в функцию sort.

  • Recurrence relations.

  • Simple Fun #74: Growing Plant.

  • Coloured Triangles.

  • Digital Root.

  • Twice linear.

  • Playing with laziness.

  • Break camelCase.

  • CamelCase Method.

  • Speed Control.

менеджер программы обучения

По любым вопросам по программе обучения пишите Светлане в Telegram