Зад.1. Да се напише функцията sumProducts, която приема списък от списъци от числа и връща сумата на всички произведения на числата в даден списък:
sumProducts [[1,2,3], [4,5], [], [-2,3,0,5,1]] -> 27 -- 27 = 6 + 20 + 1 + 0
Зад.2. Да се напише функцията occurrences, която приема два списъка от числа и връща списък от броя срещания на елементите от първия списък във втория:
occurrences [1..6] [1,3,4,3,2,3,3,0,5,3,1] -> [2,1,5,1,1,0]
Зад.3. Да се напише функцията matchLengths, която проверява дали всички списъци от списък със списъци са с еднаква дължина:
matchLengths [[1..4],[0..3],[5,4,8,10]] -> True
matchLengths [[1..4],[0..3],[],[5,4,8,10]] -> False
Зад.4. За тази задача ще представяме множествата като наредени списъци от своите елементи (значи те трябва да могат да бъдат сравнявани с == и < и да се срещат точно по веднъж). Да се напишат функции setUnion, setIntersect и setDiff, които намират съответно обединението, сечението и разликата на две множества:
setUnion [1,2,3,5] [2,4,5,6,7] -> [1,2,3,4,5,6,7]
setIntersect [1,2,3,5] [2,4,5,6,7] -> [2,5]
setDiff [1,2,3,5] [2,4,5,6,7] -> [1,3]
setDiff [2,4,5,6,7] [1,2,3,5] -> [4,6,7]

Зад.5. Нека е дадена квадратна матрица от числа. Под “Гаусова елиминация” ще разбираме операцията, при която се избира първият ред отгоре надолу, в който първият елемент е ненулев, и към всеки друг ред на матрицата прибавяме избрания ред, умножен по такъв коефициент, че числата в първия стълб на тези редове да станат равни на нула:
[[ 0,3,5,0], [[0, 3,5,0], [ 1,5,2,1],  -> [1, 5,2,1],
[ 2,3,8,4],    [0,-7,4,2], -- получено от (ред2 * (-2)) + ред2
[-2,0,4,5]]     [0,10,8,7]] -- получено от (ред2 * 2) + ред3
Напишете функция row-reduce, която извършва тази операция. Можете да допуснете, че в първия стълб на матрицата има поне един ненулев елемент.
Зад.6*. Напишете функция, която изчислява детерминантата на дадена квадратна матрица.
Зад.7. Напишете функция (cross-out m), която по дадена матрица от числа m с размери M*N генерира всички M*N на брой матрици, които могат да се получат от m със задраскване на някой ред и някой стълб. Редът на върнатите матрици няма значение.
Пример:
cross-out [[1,2,3,4],  
           [5,6,7,8],  -> [ [[6,7,8],[0,1,2]], [[5,7,8],[9,1,2]], [[5,6,8],[9,0,2]], [[5,6,7],[9,0,1]], [[2,3,4],[0,1,2]], ...
           [9,0,1,2]]     -- и още 7 малки матрици

Зад.8. Да се напише функция specialSort, която приема като параметър списък от списъци и го сортира относно най-често срещания елемент във всеки от вътрешните списъци. Ако има няколко най-често срещани елемента, да се избира най-големия от тях:
specialSort ["moo", "bee", "eve", "abracadabra", "abcdefg", "mama", "z"]
  -> ["abracadabra", "bee", "eve", "abcdefg", "mama", "moo", "z"]
-- в случая най-често срещаните елементи са съответно 'a', 'e', 'e', 'g', 'm', 'o', 'z'
-- наредбата не е уникална - няма проблем с това, нямаме изисквания за стабилност

Последно модифициране: четвъртък, 13 декември 2018, 11:56