diff options
1 files changed, 81 insertions, 54 deletions
| -rw-r--r-- | src/teaching/upp-2025/week11/index.du | 135 |
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 |