Примерна тема за първо контролно (2024/25 г.)
Вариант А
Задача 1. (10 т.) Да се дефинира функция (multiply-by-position n), която приема неотрицателно число n и връщо ново число, което се получава като всяка цифра d на n се замести с числото, което се получава като d се умножи по номера на позицията си. Позициите се броят отдясно наляво, като цифрата на единиците е на позиция 1.
Примери:
(multiply-by-position 123) → 1*3, 2*2, 3*1 → 343
(multiply-by-position 507) → 5*3, 0*2, 7*1 → 1507
(multiply-by-position 987) → 9*3, 8*2, 7*1 → 27167
(multiply-by-position 1249) → 1*4, 2*3, 4*2, 9*1 → 4689
(multiply-by-position 9000) → 9*4, 0*3, 0*2, 0*1 → 36000
Задача 2. (10 т.) Да се дефинира функция (minmax fm l), която по дадена непразна матрица от едноместни числови функции fm и непразен списък от числа l, намира за всеки ред в матрицата максималното число, което може да се получи след прилагане на някоя функция в реда над някой елемент на списъка l, и връща най-малкото такова максимално число. Матрицата се представя като списък от редовете си.
Бонус: (5 т.) Решете задачата без рекурсия, само с функции от по-висок ред.
Пример:
(minmax (list (list square exp) (list cos 1+)) '(-1 0 1)) → 2.0
Задача 3. (10 т.) Да се дефинира функция (maximum-even-nodes-sum bt), която приема непразно двоично дърво от цели числа и връща път от корена, в който сумата на четните елементи е максимална. Ако има няколко такива пътя, да се върне такъв с максимална дължина.
Примери:
(maximum-even-nodes-sum '(1 (4 () ()) (6 (3 () ()) (-4 () ())))) → (1 6 3)
(maximum-even-nodes-sum '(1 (4 () ()) (6 (-2 () ()) (-4 () ())))) → (1 6)
Вариант Б
Задача 1. Да се дефинира функция (sum-with-position n), която приема неотрицателно число n и връщо ново число, което се получава като всяка цифра d на n се замести с числото, което се получава като d се събере с номера на позицията си. Позициите се броят отдясно наляво, като цифрата на единиците е на позиция 1.
Примери:
(sum-with-position 123) → 1+3, 2+2, 3+1 → 444
(sum-with-position 507) → 5+3, 0+2, 7+1 → 828
(sum-with-position 987) → 9+3, 8+2, 7+1 → 12108
(sum-with-position 1249) → 1+4, 2+3, 4+2, 9+1 → 55610
(sum-with-position 9000) → 9+4, 0+3, 0+2, 0+1 → 13321
Задача 2. Да се дефинира функция (maxmin fm l), която по дадена непразна матрица от едноместни числови функции fm и непразен списък от числа l, намира за всеки ред в матрицата минималното число, което може да се получи след прилагане на някоя функция в реда над някой елемент на списъка l, и връща най-голямото такова минимално число. Матрицата се представя като списък от редовете си.
Бонус: (5 т.) Решете задачата без рекурсия, само с функции от по-висок ред.
Пример:
(maxmin (list (list square exp) (list cos 1+)) '(-1 0 1)) → 0.0
Задача 3. Да се дефинира функция (minimum-odd-nodes-prod bt), която приема непразно двоично дърво от цели числа и връща път от корена, в който произведението на нечетните елементи е минимално. Ако има няколко такива пътя, да се върне такъв с максимална дължина.
Примери:
(minimum-odd-nodes-prod '(1 (3 () ()) (-3 (4 () ()) (-1 () ())))) → (1 -3 4)
(minimum-odd-nodes-prod '(1 (3 () ()) (-3 (-5 () ()) (-1 () ())))) → (1 -3)
Забележка: използването на всички стандартни функции в R5RS, както и на функциите accumulate, accumulate-i, filter, foldr, foldl, foldr1, foldl1 е позволено, но не е задължително.