Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / upp-2023 / week6 / index.du
diff options
context:
space:
mode:
1 files changed, 45 insertions, 37 deletions
-rw-r--r--src/teaching/upp-2023/week6/index.du82
diff --git a/src/teaching/upp-2023/week6/index.du b/src/teaching/upp-2023/week6/index.du
index f9ff0b1..11cc5ee 100644
--- a/src/teaching/upp-2023/week6/index.du
+++ b/src/teaching/upp-2023/week6/index.du
@@ -1,8 +1,11 @@
-# Задачи - УПП, Седмица 6, 10.11.2023
+'def title Задачи - УПП, Седмица 6, 10.11.2023
+'def desc Условия на задачите за упражнение
+
+# {title}
\n
-GitHub classroom: [url https://classroom.github.com/a/BBLlWMOy classroom.github.com/a/BBLlWMOy]
+GitHub classroom: {url classroom.github.com/a/BBLlWMOy;https://classroom.github.com/a/BBLlWMOy}
## Задача 1
@@ -12,9 +15,10 @@ GitHub classroom: [url https://classroom.github.com/a/BBLlWMOy classroom.github.
N и M са между 1 и 60.
-[=Пример:=]
+{b Пример:}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -42,16 +46,17 @@ N и M са между 1 и 60.
Разглеждаме числатата от 0 до N.
За всяко число знаем колко интервала го включват (покриват).
-Тоест в [`0 1 1 0`] означава, че 0 интервала "покриват" числото 0, един интервал покрива числото 1, един интервал покрива числото 2 и 0 покриват числото 3.
+Тоест в {` 0 1 1 0} означава, че 0 интервала "покриват" числото 0, един интервал покрива числото 1, един интервал покрива числото 2 и 0 покриват числото 3.
Търси се колко различни интервала имаме.
Не различаваме между два долепени интервала и един дълъг интервал.
От входа получаввате N (от 1 до 30), и след това N на брой числа: броя покриващи интервали за всички числа от 0 до N-1.
-[=Примери:=]
+{b Примери:}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -84,6 +89,7 @@ N и M са между 1 и 60.
|: 5
+
## Задача 3
Трябва да имплементирате дигитална версия на морски шах.
@@ -95,17 +101,17 @@ N и M са между 1 и 60.
В случай, че игралното поле се запълни и никой не е спечелил, след последното му изкарване трябва да върнете "Draw!" и да спрете програмата.
-[=Пример:=]
-[*Смесен вход/изход, вход е означен с "$ " преди него*]
+{b Пример:}
+{i Смесен вход/изход, вход е означен с "$ " преди него}
```
-'include ./ex3-io.txt
+'snippet 1 $ ./ex3-io.txt
-[=Бонус:=] направете го да работи с NxN брой клетки, като N е число между 1 и 50.
+{b Бонус:} направете го да работи с NxN брой клетки, като N е число между 1 и 50.
## Задача 4
-Имплементирайте играта [url https://en.wikipedia.org/wiki/Chomp chomp]: представете си, че имаме един шоколад, разделен на NxM квадратчета.
+Имплементирайте играта {url chomp;https://en.wikipedia.org/wiki/Chomp}: представете си, че имаме един шоколад, разделен на NxM квадратчета.
Всеки играч избира квадратче (координати), след това изяжда всички парчета, които са в дясно или надолу от квадратчето.
Играчът, който изяде квадратчето в горния ляв ъгъл губи играта.
@@ -114,15 +120,15 @@ N и M са между 1 и 60.
Редуват се първия и втория играч, като всеки въвежда две числа - координати в шоколада (между 1 и N за реда и 1 и M за колоната).
Когато някой изяде парчето в горния ляв ъгъл, програмата изкарва "PLAYER wins!" (PLAYER е 1 или 2) и спира изпълнение.
-[=Пример=]
-[*Смесен вход/изход, вход е означен с "$ " преди него*]
+{b Пример}
+{i Смесен вход/изход, вход е означен с "$ " преди него}
```
-'include ex4-io.txt
+'snippet 1 $ ex4-io.txt
## Задача 5
-[=Тази задача е много трудна, proceed with caution!=]
+{b Тази задача е много трудна, proceed with caution!}
Ще имплементираме програма, която "симулира" един елементарен компютър.
Компютъра ни, като всеки друг, работи само и единствено с цели неотрицателни числа.
@@ -133,34 +139,34 @@ N и M са между 1 и 60.
Започваме изпълнение от началото на паметта, след като изпълним една инструкция, изпълняваме тази директно до нея, и така докато не стигнем инструкцията "EXT".
В такъв случай, изкарваме стойността в регистър B и спираме програмата.
-Това са командите, описани във формата "D - [`A B C`]", като D е число, съответстващо на инструкцията с име [`A`] (името го използваме за нас, в кода то не присъства) и аргументи след името [`B`] и [`C`].
-[`MEMORY`] е число, съответстващо на индекс (адрес) в паметта на компютъра (между 0 и 127), а [`VALUE`] е произволна числова стойност.
+Това са командите, описани във формата "D - {` A B C}", като D е число, съответстващо на инструкцията с име {` A} (името го използваме за нас, в кода то не присъства) и аргументи след името {` B} и {` C}.
+{` MEMORY} е число, съответстващо на индекс (адрес) в паметта на компютъра (между 0 и 127), а {` VALUE} е произволна числова стойност.
:unordered
-- 0 - [`EXT`] - край на изпълнението на програмата в симулирания компютър
+- 0 - {` EXT} - край на изпълнението на програмата в симулирания компютър
-- 1 - [`INC MEMORY`] - инкрементира стойността на индекс [`MEMORY`]\n
- Пример: [`0 2`] - инкрементира стойността на индекс 2
+- 1 - {` INC MEMORY} - инкрементира стойността на индекс {` MEMORY}\n
+ Пример: {` 0 2} - инкрементира стойността на индекс 2
-- 2 - [`RIN VALUE MEMORY`] - инкрементира стойността на индекс [`VALUE + MEMORY`]\n
- Пример: [`1 3 6`] - инкрементира стойността на адрес [`3 + 6 = 9`]
+- 2 - {` RIN VALUE MEMORY} - инкрементира стойността на индекс {` VALUE + MEMORY}\n
+ Пример: {` 1 3 6} - инкрементира стойността на адрес {` 3 + 6 = 9}
-- 3 - [`DEC MEMORY`] - декрементира стойността на индекс [`MEMORY`]
+- 3 - {` DEC MEMORY} - декрементира стойността на индекс {` MEMORY}
-- 4 - [`RDE VALUE MEMORY`] - декрементира стойността на индекс [`VALUE + MEMORY`]
+- 4 - {` RDE VALUE MEMORY} - декрементира стойността на индекс {` VALUE + MEMORY}
-- 5 - [`STA MEMORY`] - запазва стойността на индекс [`MEMORY`] в регистъра А\n
- Пример: [`4 19`] - запазва стойността на индекс 19 в регистъра А
+- 5 - {` STA MEMORY} - запазва стойността на индекс {` MEMORY} в регистъра А\n
+ Пример: {` 4 19} - запазва стойността на индекс 19 в регистъра А
-- 6 - [`RST VALUE MEMORY`] - запазва стойността на адрес [`VALUE + MEMORY`] в регистър А\n
- Пример: [`5 2 14`] - запазва стойността на индекс [`2 + 14 = 16`] в регистър А
+- 6 - {` RST VALUE MEMORY} - запазва стойността на адрес {` VALUE + MEMORY} в регистър А\n
+ Пример: {` 5 2 14} - запазва стойността на индекс {` 2 + 14 = 16} в регистър А
-- 7 - [`STB MEMORY`] - запазва стойността на индекс [`MEMORY`] в регистъра B
+- 7 - {` STB MEMORY} - запазва стойността на индекс {` MEMORY} в регистъра B
-- 8 - [`BEQ MEMORY`] - продължава изпълнение от индекс [`MEMORY`], ако стойността в регистъра А е нула\n
- Пример: [`7 8`] - продължава изпълнение от индекс 8, ако стойността в регистър А е нула
+- 8 - {` BEQ MEMORY} - продължава изпълнение от индекс {` MEMORY}, ако стойността в регистъра А е нула\n
+ Пример: {` 7 8} - продължава изпълнение от индекс 8, ако стойността в регистър А е нула
-- 9 - [`BNE MEMORY`] - продължава изпълнение от индекс [`MEMORY`], ако стойността в регистъра А не е нула
+- 9 - {` BNE MEMORY} - продължава изпълнение от индекс {` MEMORY}, ако стойността в регистъра А не е нула
В началото получавате N, това са броя числа, които съставят цялата програма.
@@ -169,11 +175,12 @@ N и M са между 1 и 60.
Ако по време на изпълнение стигнете до инструкция, която не е дефинирана, изкарвате "Error: undefined instruction!" и спирате програмата.
Ако някой аргумент е индекс в паметта, обаче стойността му е извън обхвата на паметта, изкарвате "Error: invalid memory address!" и спирате програмата.
-Ако няма грешка и програмата успешно стигне до [`EXT`] инструкция, както беше казано, изкарваме на екрана стойността в регистъра B.
+Ако няма грешка и програмата успешно стигне до {` EXT} инструкция, както беше казано, изкарваме на екрана стойността в регистъра B.
-[=Примери:=]
+{b Примери:}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -190,9 +197,10 @@ N и M са между 1 и 60.
|: 863461
+
.question Какво прави последната програма?
-[=Бонус:=] направете програми за симулаторния компютър, които
+{b Бонус:} направете програми за симулаторния компютър, които
.ordered
1. умножават числата 87401 и 37
2. намира сумата на числата 87, 305, 2, 612, 222