Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / upp-2025 / week11 / index.du
diff options
context:
space:
mode:
1 files changed, 81 insertions, 54 deletions
-rw-r--r--src/teaching/upp-2025/week11/index.du135
diff --git a/src/teaching/upp-2025/week11/index.du b/src/teaching/upp-2025/week11/index.du
index a381246..b88bd75 100644
--- a/src/teaching/upp-2025/week11/index.du
+++ b/src/teaching/upp-2025/week11/index.du
@@ -1,18 +1,18 @@
-# Задачи - УПП, Седмица 11, 11.12.2025
+'def title Задачи - УПП, Седмица 11, 11.12.2025
+'def desc Условията на задачите за упражнение.
-'define expected-reading 7 min
-'define created 10 December 2025
-'define edited 14 December 2025
-[$pagenav]
+# {title}
+
+{pagenav 7 min;10 December 2025;14 December 2025}
:question
Има два начина да приемем низ от входа:
-```c++
+```cpp
cin.getline(char*, size_t, char);
-```c++
+```cpp
cin.get(char&);
Кога бихме избрали всеки от тях?
@@ -24,12 +24,13 @@ GitHub Classroom: [url https://classroom.github.com/a/z_C3UMi8]
### Задача 1
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise01.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise01.cpp}
От входа получавате 20 буквен низ: име.
-Трябва да изкарате съобщението "Hello [*[име]*]!"
+Трябва да изкарате съобщението "Hello {i [име]}!"
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -40,14 +41,16 @@ GitHub Classroom: [url https://classroom.github.com/a/z_C3UMi8]
|: Hello Aleksandur!
+
### Задача 2
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise02.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise02.cpp}
От входа получавате изречение: низ, завършващ на точка.
Трябва да изкарате броя букви (малки или големи) в изречението.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -58,9 +61,10 @@ GitHub Classroom: [url https://classroom.github.com/a/z_C3UMi8]
|: 10
+
### Задача 3
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise03.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise03.cpp}
От входа получавате изречение: низ, завършващ на точка.
Трябва да изкарате броя полета в низа.
@@ -69,31 +73,33 @@ GitHub Classroom: [url https://classroom.github.com/a/z_C3UMi8]
Изключвайте крайната точка в бройката на полетата.
.note
-[*(14.12.2025)*] Добавени точки в края на изреченията.
+{i (14.12.2025)} Добавени точки в края на изреченията.
-:table_2
+:table
+:2
|= Вход
|= Изход
-|: [`first second third fourth.`]
+|: {` first second third fourth.}
|: 4
-|: [`I'm glad you're here.`]
+|: {` I'm glad you're here.}
|: 4
-|: [` a b c d 8 k * * .`]
+|: {` a b c d 8 k * * .}
|: 8
### Задача 4
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise04.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise04.cpp}
От входа получавате текст, докато не срещнете първия празен ред.
Трябва да изкарате броя редове в текста.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -115,14 +121,16 @@ trail led eastward through the fat spruce timberland.\n
|: 4
+
### Задача 5
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise05.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise05.cpp}
От входа получавате низ, завършващ на двоеточие и след това две реални числа.
За всяко срещане на думата "sum" в низа, трябва да изкарате сумата на числата, и за всяко срещане на "sub" в низа, трябва да изкарате разликата на числата.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -139,19 +147,21 @@ trail led eastward through the fat spruce timberland.\n
|: 3 -1 3
+
### Задача 6
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise06.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise06.cpp}
От входа получавате ред, обозначаващ число в 16-тича бройна система.
-Тоест, реда започва с [`0x`] и останалото са 16-тични цифри.
+Тоест, реда започва с {` 0x} и останалото са 16-тични цифри.
-Трябва да изкарате стойността на числото в 10-тична бройна система, [=като направите конвертирането ръчно!=]
-Тоест [=не е позволено да използвате функционалност от стандартната библиотека!=]
+Трябва да изкарате стойността на числото в 10-тична бройна система, {b като направите конвертирането ръчно!}
+Тоест {b не е позволено да използвате функционалност от стандартната библиотека!}
-Приемете, че буквите A-F са главни и че няма да имате водещи нули (напр. [`0x0001`]).
+Приемете, че буквите A-F са главни и че няма да имате водещи нули (напр. {` 0x0001}).
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -180,14 +190,16 @@ trail led eastward through the fat spruce timberland.\n
|: 1597463007
+
### Задача 7
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise07.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise07.cpp}
От входа получавате 5 буквен низ и след това един ред текст.
Трябва да изкарате всички срещания на първия низ във втория (като препокривания са позволени).
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -206,16 +218,18 @@ aaaaaaaaaaaaaaaaaaaa
|: 16
+
### Задача 8
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise08.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise08.cpp}
От входа получавате букви, докато не срещнете низа "end".
Трябва да изкарате всички полета в обратен ред.
Поле наричаме всяка последователност от букви, която не съдържа шпация.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -226,14 +240,16 @@ aaaaaaaaaaaaaaaaaaaa
|: weekend the on free is he said They
+
### Задача 9
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise09.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise09.cpp}
От входа получавате две полета, съставени от главни и малки латински букви.
Трябва да върнете общата бройка срещания на всяка буква от второто поле в първото.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -244,16 +260,18 @@ aaaaaaaaaaaaaaaaaaaa
|: 0
+
## За упражнение
### Задача 10
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise10.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise10.cpp}
От входа получавате ред с текст.
-Трябва да върнете дали е [url https://bg.wikipedia.org/wiki/%D0%9F%D0%B0%D0%BD%D0%B3%D1%80%D0%B0%D0%BC%D0%B0 панграма] на латинската азбука: дали всяка буква се среща поне веднъж (без значение дали е главна или малка).
+Трябва да върнете дали е {url панграма;https://bg.wikipedia.org/wiki/%D0%9F%D0%B0%D0%BD%D0%B3%D1%80%D0%B0%D0%BC%D0%B0} на латинската азбука: дали всяка буква се среща поне веднъж (без значение дали е главна или малка).
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -267,14 +285,16 @@ aaaaaaaaaaaaaaaaaaaa
|: Not a pangram
+
### Задача 11
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise11.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise11.cpp}
От входа получавате два реда.
Трябва да премахнете всяко срещане на втория ред в първия и да изкарате резултата.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -297,9 +317,10 @@ buffalo
Buffalo Buffalo Buffalo
+
### Задача 12
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise12.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise12.cpp}
От входа получавате ред с текст.
Зачитайки го за парола, трябва да върнете колко силна е паролата.
@@ -315,9 +336,10 @@ Buffalo Buffalo Buffalo
Накрая тряба да върнете оценката на паролата.
.note
-[*(14.12.2025)*] Оправени оценки в примерите
+{i (14.12.2025)} Оправени оценки в примерите
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -334,12 +356,13 @@ Buffalo Buffalo Buffalo
|: 5
+
### Задача 13
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise13.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise13.cpp}
Хешираща функция е функция, която превръща низ в число.
-Една много често използвана е функцията на [url https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function Fowler-Noll-Vo].
+Една много често използвана е функцията на {url Fowler-Noll-Vo;https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function}.
Тя работи по следния начин:
.bulleted
@@ -352,36 +375,39 @@ Buffalo Buffalo Buffalo
Използвайки 32-битовите offset basis (2166136261) и FNV простото число (16777619), изкарайте хешираната стойност на подадения ред текст.
.note
-[*(14.12.2025)*] Поправен хеш на последния пример.
+{i (14.12.2025)} Поправен хеш на последния пример.
-:table_2
+:table
+:2
|= Вход
|= Изход
-|: [`Hello World`]
+|: {` Hello World}
|: 310551791
-|: [`Nothing`]
+|: {` Nothing}
|: 383317984
-|: [`!`]
+|: {` !}
|: 84696382
-|: [`The most effective debugging tool is still careful thought, coupled with judiciously placed print statements.`]
+|: {` The most effective debugging tool is still careful thought, coupled with judiciously placed print statements.}
|: 2408366471
+
### Задача 14
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise14.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise14.cpp}
От входа получавате два реда с текст.
-Трябва да върнете дали първия ред е [url https://en.wikipedia.org/wiki/Anagram анаграма] на втория,
+Трябва да върнете дали първия ред е {url анаграма;https://en.wikipedia.org/wiki/Anagram} на втория,
тоест дали втория низ може да се получи след някакво разместване на всички (латински) букви в първия низ.
Игнорирайте дали буквата е главна или малка.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -421,12 +447,13 @@ I am Lord Voldemort
|: Anagram
+
## За любознателните
### Задача 15
От входа получавате два реда с текст.
-Трябва да пресметнете [url https://en.wikipedia.org/wiki/Levenshtein_distance разстоянието на Ливенщайн] между тях.
+Трябва да пресметнете {url разстоянието на Ливенщайн;https://en.wikipedia.org/wiki/Levenshtein_distance} между тях.
То се пресмята така:
.numbered