Вариант А



Задача 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 е позволено, но не е задължително.

Последно модифициране: вторник, 4 ноември 2025, 10:57