HaskellTasks
Домашние задания курса по Хаскелю
Задание 1
Написать функцию hasPair :: Integer -> Bool, которая проверяет, есть ли в десятичной записи заданного числа две подряд идущие одинаковые цифры. Например, hasPair 1001 => True, а hasPair 1212 => False. [Решение](/Ifmo-code/Haskell/Hw1.hs)Задания 2,3
Задание 2 Назовем “производной” элемента числового списка разность между следующим в списке и данным элементом. Производной последнего элемента будем считать 0. Например, список производных элементов списка [3,1,2,5,7,6] будет список [-2,1,3,2,-1,0]. Написать функцию maxDeriv :: Real a => [a] -> Int, которая в заданном списке числовых элементов находит индекс элемента с максимальной “производной”. Например, в вышеприведенном списке таким индексом будет 2, поскольку элемент с этим индексом имеет максимальную производную - 3. Задание 3 В заданной строке символов будем считать числом произвольную последовательность цифр, слева и справа от которой не находится цифра. Написать функцию maxNumber :: String -> Integer, выдающую числовое значение самого большого “числа” в строке. Например, результатом вызова функции с аргументом "0xFF55 00012 -100 19" должно быть 100. Если чисел в строке нет совсем, то это ошибка аргумента. [Решение](/Ifmo-code/Haskell/Hw2.hs)Задание 4
Написать функцию preHigher :: Ord a => [a] -> [Int], которая по заданному списку элементов выдает список индексов тех из них, которые строго меньше следующего. Например, в числовом списке [1, 2.2, 2.1, 3.14, 2.7, 1.618] числа, меньшие следующего в списке - это 1 и 2.1, поэтому вызов preHigher [1, 2.2, 2.1, 3.14, 2.7, 1.618] должен выдать список [0, 2] - список индексов этих элементов. [Решение](/Ifmo-code/Haskell/Hw4.hs)Задание 5
Во задачах всех вариантов используется представление словаря в виде префиксного дерева (Trie, бор) без корневого элемента: data Trie = Empty | Node Char [Trie] type Dictionary = [Trie] Например, словарь, содержащий слова “bit”, “byte”, “bite”, “site” будет представлен следующим образом (с точностью до порядка элементов списков): [Node 'b' [Node 'i' [Node 't' [Empty, Node 'e' [Empty]]], Node 'y' [Node 't' [Node 'e' [Empty]]]], Node 's' [Node 'i' [Node 't' [Node 'e' [Empty]]]]] Написать функцию listWords :: Dictionary -> [String], которая выдает список всех слов в заданном словаре. [Решение](/Ifmo-code/Haskell/Hw5.hs)Задание 6
Задание 1 В первой задаче каждого варианта требуется выбрать представление и определить тип данных data Map key value = .. для которого требуется реализовать стандартный набор методов для манипуляций с “отображением”:- get :: Eq k => k -> Map k v -> Maybe v
- put :: Eq k => (k, v) -> Map k v -> Map k v
- remove :: Eq k => k -> Map k v -> Map k v
- keys :: Map k v -> [k]
- values :: Map k v -> [v]
- найти значение по ключу (get)
- добавить или заменить существующую пару <ключ,значение> (put)
- удалить пару с заданным ключом (remove)
- выдать множество (список) всех ключей (keys)
- выдать список всех значений (values)