Summary Files Commits Branches @commit @diff @stats
path: root / src
diff options
context:
space:
mode:
Commit7d9808f9606b96ef23468dfa41055f2ff395c1af (patch)
Author
 Syndamia <kamen@syndamia.com>
2025-12-10 22:42:15 +0200
Committer
 Syndamia <kamen@syndamia.com>
2025-12-10 22:42:15 +0200
Files2b6afa43fcce4476501e5530b0004c0c3e7dd45c /src
syndamia.com-7d9808f9606b96ef23468dfa41055f2ff395c1af.tar
syndamia.com-7d9808f9606b96ef23468dfa41055f2ff395c1af.tar.gz
syndamia.com-7d9808f9606b96ef23468dfa41055f2ff395c1af.zip
Parentc74c9ea17f39fc0c55045dd72fd2b1da06757c4a (diff)
feat(teaching/upp-2025/w11): Add exercises
2 files changed, 411 insertions, 0 deletions
-rw-r--r--src/teaching/upp-2025/index.du10
-rw-r--r--src/teaching/upp-2025/week11/index.du401
diff --git a/src/teaching/upp-2025/index.du b/src/teaching/upp-2025/index.du
index 21e09c7..3014d73 100644
--- a/src/teaching/upp-2025/index.du
+++ b/src/teaching/upp-2025/index.du
@@ -143,3 +143,13 @@
[url ./week10 Задачи]
|| [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10 Решения]
|| [url https://classroom.github.com/a/kDfmWmy7 GitHub Classroom]
+
+|: 11
+|: 11.12.2025
+|: Низове
+
+|:
+|:
+|:
+[url ./week11 Задачи]
+|| [url https://classroom.github.com/a/z_C3UMi8 GitHub Classroom]
diff --git a/src/teaching/upp-2025/week11/index.du b/src/teaching/upp-2025/week11/index.du
new file mode 100644
index 0000000..0cbb10a
--- /dev/null
+++ b/src/teaching/upp-2025/week11/index.du
@@ -0,0 +1,401 @@
+# Задачи - УПП, Седмица 11, 11.12.2025
+
+'define expected-reading 7 min
+'define created 10 December 2025
+'define edited 10 December 2025
+[$pagenav]
+
+:question
+
+Има два начина да приемем низ от входа:
+
+```c++
+cin.getline(char*, size_t, char);
+
+```c++
+cin.get(char&);
+
+Кога бихме избрали всеки от тях?
+
+
+GitHub Classroom: [url https://classroom.github.com/a/z_C3UMi8]
+
+## За решаване
+
+### Задача 1
+
+От входа получавате 20 буквен низ: име.
+Трябва да изкарате съобщението "Hello *[[име]]*!"
+
+:table_2
+|= Вход
+|= Изход
+
+|: John
+|: Hello John!
+
+|: Aleksandur
+|: Hello Aleksandur!
+
+
+### Задача 2
+
+От входа получавате изречение: низ, завършващ на точка.
+Трябва да изкарате броя букви (малки или големи) в изречението.
+
+:table_2
+|= Вход
+|= Изход
+
+|: This is a very long sentence.
+|: 23
+
+|: I'm 73 years old.
+|: 10
+
+
+### Задача 3
+
+От входа получавате изречение: низ, завършващ на точка.
+Трябва да изкарате броя полета в низа.
+
+Поле наричаме всяка последователност от букви, която не съдържа знака шпация.
+
+:table_2
+|= Вход
+|= Изход
+
+|: `[first second third fourth]`
+|: 4
+
+|: `[I'm glad you're here!]`
+|: 4
+
+|: `[ a b c d 8 k * * ]`
+|: 8
+
+
+
+### Задача 4
+
+От входа получавате текст, докато не срещнете първия празен ред.
+Трябва да изкарате броя редове в текста.
+
+:table_2
+|= Вход
+|= Изход
+
+|:
+```
+First line
+Second line
+Third line
+
+|: 3
+
+|:
+```
+Day had broken cold and grey, exceedingly cold and grey,
+when the man turned aside from the main Yukon trail and
+climbed the high earth-bank, where a dim and little-travelled
+trail led eastward through the fat spruce timberland.
+
+|: 4
+
+
+### Задача 5
+
+От входа получавате низ, завършващ на двоеточие и след това две реални числа.
+За всяко срещане на думата "sum" в низа, трябва да изкарате сумата на числата, и за всяко срещане на "sub" в низа, трябва да изкарате разликата на числата.
+
+:table_2
+|= Вход
+|= Изход
+
+|: sum: 5.5 0.5
+|: 6
+
+|: sub: 2 3
+|: -1
+
+|: Here is the sum of the two numbers: 3.14 4.13
+|: 7.27
+
+|: We can sum, subtract and sum again: 1 2
+|: 3 -1 3
+
+
+### Задача 6
+
+От входа получавате ред, обозначаващ число в 16-тича бройна система.
+Тоест, реда започва с `[0x]` и останалото са 16-тични цифри.
+
+Трябва да изкарате стойността на числото в 10-тична бройна система, =[като направите конвертирането ръчно!]=
+Тоест =[не е позволено да използвате функционалност от стандартната библиотека!]=
+
+Приемете, че буквите A-F са главни и че няма да имате водещи нули (напр. `[0x0001]`).
+
+:table_2
+|= Вход
+|= Изход
+
+|: 0x8
+|: 8
+
+|: 0x9
+|: 9
+
+|: 0xA
+|: 10
+
+|: 0xF
+|: 15
+
+|: 0x10
+|: 16
+
+|: 0xFF
+|: 255
+
+|: 0xABCDEF
+|: 11259375
+
+|: 0x5F3759DF
+|: 1597463007
+
+
+### Задача 7
+
+От входа получавате 5 буквен низ и след това един ред текст.
+Трябва да изкарате всички срещания на първия низ във втория (като препокривания са позволени).
+
+:table_2
+|= Вход
+|= Изход
+
+|:
+```
+abcde
+One abcde twoabcdethree four five abcde
+
+|: 3
+
+|:
+```
+aaaaa
+aaaaaaaaaaaaaaaaaaaa
+
+|: 16
+
+
+### Задача 8
+
+От входа получавате букви, докато не срещнете низа "end".
+Трябва да изкарате всички полета в обратен ред.
+
+Поле наричаме всяка последователност от букви, която не съдържа шпация.
+
+:table_2
+|= Вход
+|= Изход
+
+|: One two three end
+|: end three two One
+
+|: They said he is free on the weekend
+|: weekend the on free is he said They
+
+
+### Задача 9
+
+От входа получавате две полета, съставени от главни и малки латински букви.
+Трябва да върнете общата бройка срещания на всяка буква от второто поле в първото.
+
+:table_2
+|= Вход
+|= Изход
+
+|: aAAbbbb aA
+|: 3
+
+|: z ZZ
+|: 0
+
+
+## За упражнение
+
+### Задача 10
+
+От входа получавате ред с текст.
+Трябва да върнете дали е [url https://bg.wikipedia.org/wiki/%D0%9F%D0%B0%D0%BD%D0%B3%D1%80%D0%B0%D0%BC%D0%B0 панграма] на латинската азбука: дали всяка буква се среща поне веднъж (без значение дали е главна или малка).
+
+:table_2
+|= Вход
+|= Изход
+
+|: The quick brown fox jumps over the lazy dog.
+|: Pangram
+
+|: Pack my box with five dozen liquor jugs.
+|: Pangram
+
+|: Echo-changes every Thursday
+|: Not a pangram
+
+
+### Задача 11
+
+От входа получавате два реда.
+Трябва да премахнете всяко срещане на втория ред в първия и да изкарате резултата.
+
+:table_2
+|= Вход
+|= Изход
+
+|:
+```
+This is a very nice evening
+i
+
+|:
+```
+Ths s a very nce evenng
+
+|:
+```
+Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo
+buffalo
+
+|:
+```
+Buffalo Buffalo Buffalo
+
+
+### Задача 12
+
+От входа получавате ред с текст.
+Зачитайки го за парола, трябва да върнете колко силна е паролата.
+
+Това са следните критерии, като всеки критерии добавя единица към общата оценка на паролата:
+.numbered
+1. Съдържа поне 15 букви
+2. Не съдържа съседни еднакви знаци
+3. Да съдържа поне една малка и главна латинска буква
+4. Да съдържа поне една цифра
+5. Да съдържа поне един знак, различен от цифра или буква
+
+Накрая тряба да върнете оценката на паролата.
+
+:table_2
+|= Вход
+|= Изход
+
+|: hi
+|: 1
+
+|: aa
+|: 0
+
+|: Hello@World15
+|: 4
+
+|: Ny$wtgYH62uTy@d
+|: 5
+
+
+### Задача 13
+
+Хешираща функция е функция, която превръща низ в число.
+Една много често използвана е функцията на [url https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function Fowler-Noll-Vo].
+
+Тя работи по следния начин:
+.bulleted
+- началната стойност за хеша се нарича "offset basis"
+- за всяка буква (без терминиращата нула):
+ .numbered
+ 1. умножаваме текущия хеш по простото число на FNV (и обновяваме текущя хеш)
+ 2. на текущия хеш, пресмятаме неговото побитово изключващо или с текущата буква
+
+Използвайки 32-битовите offset basis (2166136261) и FNV простото число (16777619), изкарайте хешираната стойност на подадения ред текст.
+
+:table_2
+|= Вход
+|= Изход
+
+|: `[Hello World]`
+|: 310551791
+
+|: `[Nothing]`
+|: 383317984
+
+|: `[!]`
+|: 84696382
+
+|: `[The most effective debugging tool is still careful thought, coupled with judiciously placed print statements.]`
+|: 2174003109
+
+
+### Задача 14
+
+От входа получавате два реда с текст.
+Трябва да върнете дали първия ред е [url https://en.wikipedia.org/wiki/Anagram анаграма] на втория,
+тоест дали втория низ може да се получи след някакво разместване на всички (латински) букви в първия низ.
+
+Игнорирайте дали буквата е главна или малка.
+
+:table_2
+|= Вход
+|= Изход
+
+|:
+```
+New York Times
+monkeys write
+
+|: Anagram
+
+|:
+```
+barn
+yarn
+
+|: Not an anagram
+
+|:
+```
+evil
+vile
+
+|: Anagram
+
+|:
+```
+manually
+by hand
+
+|: Not an anagram
+
+|:
+```
+Tom Marvolo Riddle
+I am Lord Voldemort
+
+|: Anagram
+
+
+## За любознателните
+
+### Задача 15
+
+От входа получавате два реда с текст.
+Трябва да пресметнете [url https://en.wikipedia.org/wiki/Levenshtein_distance разстоянието на Ливенщайн] между тях.
+
+То се пресмята така:
+.numbered
+1. Ако един от двата текущи низа е празен, връщаме 0
+2. Ако първата буква от двата низа е еднаква, връщаме разстоянието на Ливенщайн от остатъка от низовете
+3. Иначе, връщаме 1 плюс най-малкото от разстоянията на Лиевнщайн между:
+ .bulleted
+ - първия низ и остатъка на втория низ (без първата буква)
+ - остатъка на първия низ (без първата буква) и втория низ
+ - остатъците на двата низа (без първите им букви)