Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / upp-2023 / week5 / index.du
diff options
context:
space:
mode:
1 files changed, 44 insertions, 33 deletions
-rw-r--r--src/teaching/upp-2023/week5/index.du77
diff --git a/src/teaching/upp-2023/week5/index.du b/src/teaching/upp-2023/week5/index.du
index 2673077..ba2c114 100644
--- a/src/teaching/upp-2023/week5/index.du
+++ b/src/teaching/upp-2023/week5/index.du
@@ -1,8 +1,11 @@
-# Задачи - УПП, Седмица 5, 03.11.2023
+'def title Задачи - УПП, Седмица 5, 03.11.2023
+'def desc Условия на задачите за упражнение
+
+# {title}
\n
-GitHub classroom: [url https://classroom.github.com/a/3KoIQ71H classroom.github.com/a/3KoIQ71H]
+GitHub classroom: {url classroom.github.com/a/3KoIQ71H;https://classroom.github.com/a/3KoIQ71H}
## Задача 1
@@ -10,11 +13,12 @@ GitHub classroom: [url https://classroom.github.com/a/3KoIQ71H classroom.github.
Направете функция, която получава два двуизмерни координата, покомпонентно ги сумира и връща резултатните координати.
Няма как функцията да върне две стойности, затова добаваете оше два аргумента, които да са указатели към променливи в които да запазим сумираните координати.
-От входа получавате два координата, след това връщате тяхната покомпонентна сума [=използвайки функцията=].
+От входа получавате два координата, след това връщате тяхната покомпонентна сума {b използвайки функцията}.
-[=Пример:=]
+{b Пример:}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -22,20 +26,22 @@ GitHub classroom: [url https://classroom.github.com/a/3KoIQ71H classroom.github.
|: 6.1 -99.241
+
## Задача 2
Използвайки масиви, имплементирайте 30-цифрени цели положителни числа.
Трябва да поддържате операциите събиране и изваждане между две такива числа.
Първо ще получите 30 цифри, които отговарят на първото числа, после още 30 цифри, които отговарят на втрото число и накрая ще получите знак.
-Ако знака е [`+`], трябва да ги съберете и да изкарате резултата на екрана.
-Ако знака е [`-`], трябва да ги извадите и да изкарате резултата на екрана.
+Ако знака е {` +}, трябва да ги съберете и да изкарате резултата на екрана.
+Ако знака е {` -}, трябва да ги извадите и да изкарате резултата на екрана.
При изкарване трябва да следвате "нормалните" правила: цифрите са долепени и водещите нули не се пишат.
-[=Пример:=]
+{b Пример:}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -72,24 +78,26 @@ GitHub classroom: [url https://classroom.github.com/a/3KoIQ71H classroom.github.
|: 999999999999999999999999999999
+
## Задача 3
Получавате редица цифри.
Ако имаме поне 3 повтарящи се цифри една след друга, можем да ги премахнем.
-Тоест редицата [`0 3 1 2 2 2 4 7`] може да стане [`0 3 1 4 7`].
+Тоест редицата {` 0 3 1 2 2 2 4 7} може да стане {` 0 3 1 4 7}.
След едно премахване, трябва да можем после да премахнем новопоявило се премахване.
-Тоест редицата [`5 1 3 3 3 3 1 1 1 9 2`] първо става [`5 1 1 1 1 9 2`] и след това [`5 9 2`].
+Тоест редицата {` 5 1 3 3 3 3 1 1 1 9 2} първо става {` 5 1 1 1 1 9 2} и след това {` 5 9 2}.
Не е нужно да гледате напред за възможно най-много премахване.
-Тоест в случая [`8 1 3 4 4 4 5 5 5 5 4 4`] не се очаква да предвидите, че ако първо премахнете 5-те, после ще може да премахнете всички 4ки.
+Тоест в случая {` 8 1 3 4 4 4 5 5 5 5 4 4} не се очаква да предвидите, че ако първо премахнете 5-те, после ще може да премахнете всички 4ки.
Премахвате първата валидна повтаряща се редица, връщате се малко назад, поглеждате дали някоя нова редица не се е появила, премахвате нея или отивате на следващата.
-От входа първо получавате броя [`N`] на цифрите в редицата, като [`N`] е между 1 и 40.
-След това получавате [`N`] на брой цифри и накрая връщате редицата с премахнати повтаряния.
+От входа първо получавате броя {` N} на цифрите в редицата, като {` N} е между 1 и 40.
+След това получавате {` N} на брой цифри и накрая връщате редицата с премахнати повтаряния.
-[=Примери:=]
+{b Примери:}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -108,21 +116,23 @@ GitHub classroom: [url https://classroom.github.com/a/3KoIQ71H classroom.github.
|: 7 1 5 2 1 7 2 1 2 1 7 2 6 1 6 7 6 9 7 3 8 6 6 5 1 2 7 4 6 8 3 8 2 2 6 9 4 2 6 5
+
## Задача 4
Получавате редица числа.
Всяко число е индекс към друго число в редицата (индексите започва от 0).
-Започвайки от всяка цифра, проследяваме всички "скоци", тоест ако имаме [`1 3 0 2`] и започваме от индекс 0, тогава от него скачаме на индекс 1, от него на индекс 3, от него на индекс 2 и от него се връщаме в индекс 0.
-Докато прескачаме не може да посетим вече посетен индекс, тоест ако имаме [`1 3 0 1`], от 0 отиваме в 1, от 1 в 3 и от 3 в 1, обаче вече сме посетили индекс 1, така че спираме да скачаме.
+Започвайки от всяка цифра, проследяваме всички "скоци", тоест ако имаме {` 1 3 0 2} и започваме от индекс 0, тогава от него скачаме на индекс 1, от него на индекс 3, от него на индекс 2 и от него се връщаме в индекс 0.
+Докато прескачаме не може да посетим вече посетен индекс, тоест ако имаме {` 1 3 0 1}, от 0 отиваме в 1, от 1 в 3 и от 3 в 1, обаче вече сме посетили индекс 1, така че спираме да скачаме.
Търси се колко най-много скока можем да направим, започайки от който и да е индекс.
Ако има няколко индекса с максималния брой скоци, връщаме само първия.
-Получавате от входа брой [`N`] на числата (индексите), като [`N`] е между 1 и 30, след това получавате толкова на брой числа (между 0 и N-1) и накрая връщате при кой начален индекс имаме най-много скока и колко са тези скоци.
+Получавате от входа брой {` N} на числата (индексите), като {` N} е между 1 и 30, след това получавате толкова на брой числа (между 0 и N-1) и накрая връщате при кой начален индекс имаме най-много скока и колко са тези скоци.
-[=Примери:=]
+{b Примери:}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -155,6 +165,7 @@ GitHub classroom: [url https://classroom.github.com/a/3KoIQ71H classroom.github.
|: 0 2
+
## Задача 5
sim картите са типове smart-card, това означава че в себе си имат един миниатюрен компютър с миниатюрна памет.
@@ -166,12 +177,12 @@ sim картите са типове smart-card, това означава че
### а) валидационни функции
.bulleted
-- [`isUnblockCode`], приема буква и връща дали е отблокиращ код\n
+- {` isUnblockCode}, приема буква и връща дали е отблокиращ код\n
Само главни, малки и цифри са валидни отблокиращи кодове
-- [`isPhoneNumber`], приема число (10 цифрено) и поглежда най-левите 3 цифри\n
+- {` isPhoneNumber}, приема число (10 цифрено) и поглежда най-левите 3 цифри\n
Те трябва да са валиден код на държава.
Нужно е да приемате поне кодовете за България (359) и за Франция (033).
- Ако искате може и други да приемате, пълен списък има [url https://en.wikipedia.org/wiki/List_of_country_calling_codes#Alphabetical_order тук].
+ Ако искате може и други да приемате, пълен списък има {url тук;https://en.wikipedia.org/wiki/List_of_country_calling_codes#Alphabetical_order}.
### б) вход и команди
@@ -179,20 +190,20 @@ sim картите са типове smart-card, това означава че
Ако отблокиращия е в невалиден формат, връщате съответно съобщение за грешка и спирате програмата.
След това получавате команди, всяка команда се определя с букви и още някакви стойности.
-[=Всяка команда трябва да бъде изкарана в отделна функция!=]
+{b Всяка команда трябва да бъде изкарана в отделна функция!}
.bulleted
-- [`v`] - пробвате се да се "логнете" в сим картата.
+- {` v} - пробвате се да се "логнете" в сим картата.
След буквата получавате и едно число, което е въведения ПИН код.
Ако е правилен, следващите 5 команди, които изискват упълномощение могат да се изпълнят.
След 5те команди, упълномощението се "премахва" и трябва пак да се въведе ПИН код при упълномощени команди.
Ако е грешен, общо има 3 опита, и след тях картата се блокира.
-- [`u`] - отпблокиране на блокирана карта.
+- {` u} - отпблокиране на блокирана карта.
След буквата получавате отблокиращ код и нов ПИН код.
Ако отблокиращия код е в грешен формат или е грешната стойност, премахваме един опит.
При 10 неуспешни опита, изкарвате съобщение, че картата е перманентно блокирана и спирате програмата.
Ако е успешно отблокирана, тогава променяте ПИН кода и сте се "логнали" автоматично.
-- [`i`] - връща информация за СИМ картата, това са общо броя команди които са изпълнявани до сега
+- {` i} - връща информация за СИМ картата, това са общо броя команди които са изпълнявани до сега
### в) команди с упълномощение
@@ -202,15 +213,15 @@ sim картите са типове smart-card, това означава че
Ако някоя търсена стойност е невалидна или не съществува, връщате съответната грешка.
.bulleted
-- [`c`] - променя ПИН код.
+- {` c} - променя ПИН код.
Получавате нов ПИН код и го променяте.
-- [`a`] - добавя контакт в паметта, общо може да имаме 10 контакта.
+- {` a} - добавя контакт в паметта, общо може да имаме 10 контакта.
Всеки контакт се определя с буква, неговото "име", и 10-цифрен мобилен номер.
Приема допълнително неговото име и тел. номер.
Добавяме контакта в първото незаето място, а ако всички са заети, връщаме съобщение с грешка.
-- [`r`] - приема и още една буква (име), връща телефонния номер на съответния контакт.
+- {` r} - приема и още една буква (име), връща телефонния номер на съответния контакт.
Ако той не съществува или телефонния номер е невалиден, връщаме съответно съобщение с грешка.
-- [`d`] - приема и още една буква (име), изтрива съответния контакт.
+- {` d} - приема и още една буква (име), изтрива съответния контакт.
Ако той не съществува, връщаме съответно съобщение с грешка.
-- [`o`] - променя контакт, приема допълнително две имена на контакти и телефонен номер.
+- {` o} - променя контакт, приема допълнително две имена на контакти и телефонен номер.
Променя контакта с първото име, като второто име и тел. номер стават новите му стойности.