Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / upp-2023 / week4 / index.du
diff options
context:
space:
mode:
1 files changed, 41 insertions, 36 deletions
-rw-r--r--src/teaching/upp-2023/week4/index.du77
diff --git a/src/teaching/upp-2023/week4/index.du b/src/teaching/upp-2023/week4/index.du
index 425ffbd..48b8c61 100644
--- a/src/teaching/upp-2023/week4/index.du
+++ b/src/teaching/upp-2023/week4/index.du
@@ -1,12 +1,15 @@
-# Задачи - УПП, Седмица 4, 27.10.2023
+'def title Задачи - УПП, Седмица 4, 27.10.2023
+'def desc Условия на задачите за упражнение
+
+# {title}
\n
-GitHub classroom: [url https://classroom.github.com/a/jqKaO1ny classroom.github.com/a/jqKaO1ny]
+GitHub classroom: {url classroom.github.com/a/jqKaO1ny;https://classroom.github.com/a/jqKaO1ny}
## Задача 1 - Числен редактор
-Получавате число [`N`], което ще е в обхвата от 1 до 10000000000000000000.
+Получавате число {` N}, което ще е в обхвата от 1 до 10000000000000000000.
Вашата програма трябва да поддържа няколко операции върху това число, включително копиране на редица от цифри в него и поставянето им в друга част на числото.
Подробните операции ще получите по-късно, и не е нужно да валидирате вход или дали след дадена операция числото се побира в типа данни.
@@ -16,7 +19,7 @@ GitHub classroom: [url https://classroom.github.com/a/jqKaO1ny classroom.github.
Всичките операции трябва да бъдат отделени във функции.
Затова, и за улеснение, задачата е разделена на стъпки:
-[=ВАЖНО:=] В решението [=НЕ=] може да изполвате масиви, вектори, ..., както и каквито и да е функции, които не сте написали вие!
+{b ВАЖНО:} В решението {b НЕ} може да изполвате масиви, вектори, ..., както и каквито и да е функции, които не сте написали вие!
### Подточка а) Примитивните функции
@@ -25,69 +28,70 @@ GitHub classroom: [url https://classroom.github.com/a/jqKaO1ny classroom.github.
Имплементирайте функциите:
:unordered
-- [`get`], която приема число, начален индекс и краен индекс (в този ред)\n
+- {` get}, която приема число, начален индекс и краен индекс (в този ред)\n
Тя връща подчислото, което започва от началния и завършва в крайния индекс.
- .p Пример: [`get(481395, 2, 4)`] връща [`813`]
+ .p Пример: {` get(481395, 2, 4)} връща {` 813}
-- [`remove`], която приема число, начален индекс и дължина (в този ред)\n
+- {` remove}, която приема число, начален индекс и дължина (в този ред)\n
Връща числото, без "дължина" на брой цифри от началния индекс
- .p Пример: [`remove(481395, 3, 3)`] връща [`485`]
+ .p Пример: {` remove(481395, 3, 3)} връща {` 485}
-- [`insert`], която приема число, начален индекс, дължина и число за вмъкване\n
+- {` insert}, която приема число, начален индекс, дължина и число за вмъкване\n
Връща числото, като на началния индекс намираме началото на вмъкнатото число с дължина "дължина"\n
Ефектът, е че числото се вмъква на дадения индекс, обаче избутва цифрите в ляво от него, вместо тези от дясно.
- .p Пример: [`insert(495, 2, 4, 1001)`] връща [`4100195`]
+ .p Пример: {` insert(495, 2, 4, 1001)} връща {` 4100195}
### Подточка б) Композитните функции
Сега е време да имплементираме съществената логика в задачата.
-Използвайки [=само=] примитивните функции, имплементирайте функциите:
+Използвайки {b само} примитивните функции, имплементирайте функциите:
:unordered
-- [`copy`], която приема число, начален индекс, дължина и втори начален индекс\n
+- {` copy}, която приема число, начален индекс, дължина и втори начален индекс\n
Връща числото, като от втория начален индекс, следващите "дължина" на брой цифри съвпадат с "дължина" на брой цифри от първия начален индекс
- .p Пример: [`copy(481395, 3, 4, 2)`] връща [`4139581395`]
+ .p Пример: {` copy(481395, 3, 4, 2)} връща {` 4139581395}
-- [`cut`], която приема число, начален индекс, дължина и втори начален индекс\n
+- {` cut}, която приема число, начален индекс, дължина и втори начален индекс\n
Връща числото, като "дължина" на брой цифри от (стария) начален индекс са преместени във втория начален индекс
- .p Пример: [`cut(481395, 3, 4, 2)`] връща [`413958`]
+ .p Пример: {` cut(481395, 3, 4, 2)} връща {` 413958}
-- [`replace`], която приема число, начален индекс, дължина и число за замяна\n
+- {` replace}, която приема число, начален индекс, дължина и число за замяна\n
Връща числото, като "дължина" на брой цифри от начален индекс са заменени с числото за замяна\n
- Заменените цифри и числото за замяна [=може да имат различни дължини=]!
+ Заменените цифри и числото за замяна {b може да имат различни дължини}!
- .p Пример: [`replace(481395, 4, 2, 705)`] връща [`4817055`]
+ .p Пример: {` replace(481395, 4, 2, 705)} връща {` 4817055}
-- [`prepend`], която приема две числа\n
+- {` prepend}, която приема две числа\n
Връща долепени второто и първото число
- .p Пример: [`prepend(395, 81)`] връща [`81395`]
+ .p Пример: {` prepend(395, 81)} връща {` 81395}
-- [`append`], която приема две числа\n
+- {` append}, която приема две числа\n
Връща долепени първото и второто число
- .p Пример: [`append(395, 81)`] връща [`39581`]
+ .p Пример: {` append(395, 81)} връща {` 39581}
### Подточка в) Вход и изход
Последно, време е да имплементираме интерфейса на програмата.
-Както вече казахме, първия вход е числото [`N`] с което ще извършим операция.
+Както вече казахме, първия вход е числото {` N} с което ще извършим операция.
-След това приемаме буква, която определя нашата (композитна) функция, като за всички функции използваме първата буква в името им, освен за [`cut`], за която използваме [`x`].
-Тоест, [`c`] означава, че ще "copy"-ваме, [`p`] че ще "prepend"-ваме, [`x`] че ще "cut"-ваме и так. нат.
+След това приемаме буква, която определя нашата (композитна) функция, като за всички функции използваме първата буква в името им, освен за {` cut}, за която използваме {` x}.
+Тоест, {` c} означава, че ще "copy"-ваме, {` p} че ще "prepend"-ваме, {` x} че ще "cut"-ваме и так. нат.
След като въведем буква, трябва да приемем съответния за дадената функция брой аргументи и да изкараме на екрана резултата от функцията.
-[=Примери=]
+{b Примери}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -104,6 +108,7 @@ GitHub classroom: [url https://classroom.github.com/a/jqKaO1ny classroom.github.
|: 86998385021843839
+
## Задача 2 - Умножение на полиноми
Представяме полином чрез две числа, първото побитово определя дали x на конкретната степен съществува, докато второто определя коефициента (като цифра) пред всеки член, без значение дали съществува в полинома.
@@ -111,7 +116,7 @@ GitHub classroom: [url https://classroom.github.com/a/jqKaO1ny classroom.github.
Числото с коефициенти е между 1 и 10000000000000000000.
Пример: първото число е 13, a второто е 3052.
-Побитово [`13 = 1101`], тоест ще имаме
+Побитово {` 13 = 1101}, тоест ще имаме
```
x³ * 1 + x² * 1 + x¹ * 0 + x⁰ * 1
@@ -121,15 +126,15 @@ x³ * 1 + x² * 1 + x¹ * 0 + x⁰ * 1
```
3 * x³* 1 + 0 * x² * 1 + 5 * x¹ * 0 + 2 * x⁰ * 1
-Финално, нашия полином, кодиран от числата 13 и 3052 е [`3x³ + 2`].
+Финално, нашия полином, кодиран от числата 13 и 3052 е {` 3x³ + 2}.
От входа получавате два полинома, трябва да ги умножите и да изкарате получилия се полином (пак във формата с две числа).
-[=ВАЖНО:=] В решението [=НЕ=] може да изполвате масиви, вектори, ..., както и каквито и да е функции, които не сте написали вие!
+{b ВАЖНО:} В решението {b НЕ} може да изполвате масиви, вектори, ..., както и каквито и да е функции, които не сте написали вие!
## Задача 3 - Дъската на Зар
-[*Името си го измислих, няма връзка с нещо :)*]
+{i Името си го измислих, няма връзка с нещо :)}
Дъската на Зар е една много проста игра.
Имаме два играча, които играят върху квадратна дъска, като на всяка "клетка" има цифра (0 до 9).
@@ -143,7 +148,7 @@ x³ * 1 + x² * 1 + x¹ * 0 + x⁰ * 1
Пример: ако играем с дъска 5х5, намираме се на реда "25486" и позицията на първия играч е първата, тогава ходът му изглежда така (с "V" показваме къде се намира):
-:code
+````
V
25486
Прочита цифрата 2, значи трябва да се премести с две клетки на дясно
@@ -171,11 +176,11 @@ V
Накрая на играта, трябва да сравните точките на първия и втория играч и да изкарате кой е победил (или дали никой не е).
Един ред може да се представи като цяло число и обработваме ред по ред, без да се връщаме назад.
-Тоест, първо от входа получавате число [`N`], което е размера на дъската.
-След това ще получавате [`N`] числа, всяко с [`N`] цифри в десетичния си запис, като след получаване на едно число изпълнявате ходовете на всички играчи.
+Тоест, първо от входа получавате число {` N}, което е размера на дъската.
+След това ще получавате {` N} числа, всяко с {` N} цифри в десетичния си запис, като след получаване на едно число изпълнявате ходовете на всички играчи.
-[=ВАЖНО:=] В решението [=НЕ=] може да изполвате масиви, вектори, ..., както и каквито и да е функции, които не сте написали вие!
+{b ВАЖНО:} В решението {b НЕ} може да изполвате масиви, вектори, ..., както и каквито и да е функции, които не сте написали вие!
-[=Упътване:=]
+{b Упътване:}
Лесно се получава, ако занулим цифрите които първия играч е посетил.
Още по-лесно става ако използвате функции от първата задача.