diff options
1 files changed, 45 insertions, 37 deletions
| -rw-r--r-- | src/teaching/upp-2023/week6/index.du | 82 |
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 |