- Зарегистрироваться на github.com (если аккаунта еще нет)
- Предоставить никнейм аккаунта в:
- После этого дождаться подтверждения того, что вас добавили в команду репозитория
- Ответом от преподавателя
- ваш никнейм в общей таблице выделен зеленым
- Принять приглашение к совместной работе над репозторием (приходит на почту)
- Вся работа ведется в вашей персональной ветке
- Ветка должна именоваться
<group>_<FirstName>-<LastName>
- Избегайте использования символов
/ , \ . | * +
- Не забывайте по завершении работы делать push в удаленную ветку
- Ветка должна именоваться
- По возможности старайтесь сделать красивую историю коммитов в ней
- ЗАПРЕЩАЕТСЯ ОПРАВЛЯТЬ ИЗМЕНЕНИЯ В ВЕТКУ master
- Все ваши коммиты из ветки master будут удалены
- Кара воспоследует
- Выполнив задание и отправив его код в свою ветку в репозиторий, отметьте соответствующий чекбокс в Таблице с результатами
- После проверки преподавателем в этой таблице будет отмечено выполнение задание:
- Зеленый - все хорошо
- Желтый - принято, но можно лучше
- Оранжевый - есть замечания, требующие исправления
- Красный - задание не найдено, задание не выполнено, задание списано
- Будет добавлен комментарий с замечаниями, после исправления замечаний стоит добавить свой комментарий в трек
-
В данном задании необходимо реализовать простые функции, используя рекурсию (допускается использование дополнительных "внутренних" функции)
-
Функции
def pascal(c: Int, r: Int): Int
- функция возвращающая значение элемента треугольника Паскаля по номеру колонки и строки
def balance(chars: List[Char]): Boolean
- функция, подсчитывающая баланс скобок в выражении (по открытым и закрытым скобкам)def countChange(money: Int, coins: List[Int])
- функция, определяющая количество возможных вариантов размена суммы (money
) монетами номиналом (coins
)
- В это задании необходимо реализовать множество целых числе заданное как функцию
type Set = Int => Boolean
, данная функция отвечает на вопрос "содержится ли заданный элемент в множестве", выделяя его таким образом из множества целых чисел - Для выполнения задания необходимо представить свою реализацию функций, тело которых представлено как
???
- После выполнения задания, подумайте над тем, где все-таки хранятся элементы множества
- Анаграмма слова - это перестановка его букв так, что образуется слово с другим значением. Например, если мы переставляем буквы слова
Elvis
, мы можем получить словоlives
, которое является одной из его анаграмм. - Анаграмма предложения - это перестановка всех символов в предложении так, что формируется новое предложение. Новое предложение состоит из значащих слов, количество которых может соответствовать или не соответствовать количеству слов в исходном предложении. Например, предложение:
I love you
- это анаграмма предложенияyou olive
- При создании анаграмм мы будем игнорировать регистр символов и знаки препинания.
- Ваша конечная цель состоит в том, чтобы реализовать функцию, который, учитывая список слов, представляющих предложение, находит все анаграммы этого предложения. - Обратите внимание, что мы использовали термин «значимый» для определения анаграмм. Вам будет предоставлен словарь, то есть список слов, обозначающих слова, которые имеют значение.
- Общая идея:
- Преобразовать символы предложения в список, содержащий пары - (символ, частота его появления в предложении)
- Чтобы найти анаграммы слова, нужно найти слова из словаря, которые имеют одинаковый список вхождений.
- Чтобы найти анаграмму предложения необходимо извлечь из него любое подмножество символов, и попытаться сформировать какие-либо значимые слова. Из оставшихся символов мы решим задачу рекурсивно, а затем объединим все значимые слова, которые мы нашли, с рекурсивным решением.
- Необходимо реализовать вычисление расстояния Хемминга для двух ДНК.
- Исходное описание задачи
- Для запуска базовых тестов (рекомендуется дополнять своими)
stack test
- Для использования интерактивной среды
stack ghci
- Установка и настройка Haskell
- Данные варианты курсовика рекомендованы для тех, кому совсем неинтересно и хочется потратить минимум времени для его написания:
- Реализовать интерфейс к лабораторной Scala-3
- Ввод предложения
- Вывод анаграммы
- Редактирование словаря
- Аналогично 1, но вместо интерфейса использовать файлы
- Калькулятор
- Реализовать интерфейс к лабораторной Scala-3
- Данные варианты курсовика рекомендованы для тех, кому хочется сделать что-то новое, но при этом не потратить на это много времени:
- Кластеризация точек - реализовать считывание точек из файла и отображение на графике (для построения графика выбрать любую библиотеку). Количество точек от 1 миллиона. Варианты (выбрать один):
- В двумерном пространстве
- В трехмерном пространстве
- Аналогично 1, но в качестве интерфейса веб (с использованием akka.http)
- Реализовать веб-интерфейс к лабораторной Scala-3 (с использованием akka.http) и сохранением словаря в БД (sqlite, mongodb, postgresql)
- Реализовать построение множества Мандельброта и представления его в виде картинки. Варианты:
- Без использования actors
- С использованием actors (akka)
- Реализовать перемножение матриц с использованием actors (akka)
- Кластеризация точек - реализовать считывание точек из файла и отображение на графике (для построения графика выбрать любую библиотеку). Количество точек от 1 миллиона. Варианты (выбрать один):
- Данные варианты курсовика рекомендованы для тех, кому интересно поглубже нырнуть в функциональное программирование и реализовать что-то необычное:
- Реализовать простой многослойный перцептрон, максимально используя только чистые функции. Тестировать можно на базе MNIST
- Реализовать простой многослойный перцептрон с использованием actors (akka). Тестировать можно на базе MNIST
- Реализовать распознавание цифр (MNIST) с использование существующих библиотек, например DeepLearning.scala
Вы можете предложить любой интересный вам вариант курсовика, главное условие - активное использование подходов функционального программирования