Задачи - УПП, Седмица 11, 11.12.2025
GitHub Classroom: https://classroom.github.com/a/z_C3UMi8
За решаване
Задача 1
От входа получавате 20 буквен низ: име. Трябва да изкарате съобщението "Hello [име]!"
| Вход | Изход |
|---|---|
| John | Hello John! |
| Aleksandur | Hello Aleksandur! |
Задача 2
От входа получавате изречение: низ, завършващ на точка. Трябва да изкарате броя букви (малки или големи) в изречението.
| Вход | Изход |
|---|---|
| This is a very long sentence. | 23 |
| I'm 73 years old. | 10 |
Задача 3
От входа получавате изречение: низ, завършващ на точка. Трябва да изкарате броя полета в низа.
Поле наричаме всяка последователност от букви, която не съдържа знака шпация.
| Вход | Изход |
|---|---|
first second third fourth
| 4 |
I'm glad you're here!
| 4 |
a b c d 8 k * *
| 8 |
Задача 4
От входа получавате текст, докато не срещнете първия празен ред. Трябва да изкарате броя редове в текста.
| Вход | Изход |
|---|---|
| 3 |
| 4 |
Задача 5
От входа получавате низ, завършващ на двоеточие и след това две реални числа. За всяко срещане на думата "sum" в низа, трябва да изкарате сумата на числата, и за всяко срещане на "sub" в низа, трябва да изкарате разликата на числата.
| Вход | Изход |
|---|---|
| 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).
| Вход | Изход |
|---|---|
| 0x8 | 8 |
| 0x9 | 9 |
| 0xA | 10 |
| 0xF | 15 |
| 0x10 | 16 |
| 0xFF | 255 |
| 0xABCDEF | 11259375 |
| 0x5F3759DF | 1597463007 |
Задача 7
От входа получавате 5 буквен низ и след това един ред текст. Трябва да изкарате всички срещания на първия низ във втория (като препокривания са позволени).
| Вход | Изход |
|---|---|
| 3 |
| 16 |
Задача 8
От входа получавате букви, докато не срещнете низа "end". Трябва да изкарате всички полета в обратен ред.
Поле наричаме всяка последователност от букви, която не съдържа шпация.
| Вход | Изход |
|---|---|
| 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
От входа получавате две полета, съставени от главни и малки латински букви. Трябва да върнете общата бройка срещания на всяка буква от второто поле в първото.
| Вход | Изход |
|---|---|
| aAAbbbb aA | 3 |
| z ZZ | 0 |
За упражнение
Задача 10
От входа получавате ред с текст. Трябва да върнете дали е панграма на латинската азбука: дали всяка буква се среща поне веднъж (без значение дали е главна или малка).
| Вход | Изход |
|---|---|
| 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
От входа получавате два реда. Трябва да премахнете всяко срещане на втория ред в първия и да изкарате резултата.
| Вход | Изход |
|---|---|
|
|
|
|
Задача 12
От входа получавате ред с текст. Зачитайки го за парола, трябва да върнете колко силна е паролата.
Това са следните критерии, като всеки критерии добавя единица към общата оценка на паролата:
- Съдържа поне 15 букви
- Не съдържа съседни еднакви знаци
- Да съдържа поне една малка и главна латинска буква
- Да съдържа поне една цифра
- Да съдържа поне един знак, различен от цифра или буква
Накрая тряба да върнете оценката на паролата.
| Вход | Изход |
|---|---|
| hi | 1 |
| aa | 0 |
| Hello@World15 | 4 |
| Ny$wtgYH62uTy@d | 5 |
Задача 13
Хешираща функция е функция, която превръща низ в число. Една много често използвана е функцията на Fowler-Noll-Vo.
Тя работи по следния начин:
- началната стойност за хеша се нарича "offset basis"
- за всяка буква (без терминиращата нула):
- умножаваме текущия хеш по простото число на FNV (и обновяваме текущя хеш)
- на текущия хеш, пресмятаме неговото побитово изключващо или с текущата буква
Използвайки 32-битовите offset basis (2166136261) и FNV простото число (16777619), изкарайте хешираната стойност на подадения ред текст.
| Вход | Изход |
|---|---|
Hello World
| 310551791 |
Nothing
| 383317984 |
!
| 84696382 |
The most effective debugging tool is still careful thought, coupled with judiciously placed print statements.
| 2174003109 |
Задача 14
От входа получавате два реда с текст. Трябва да върнете дали първия ред е анаграма на втория, тоест дали втория низ може да се получи след някакво разместване на всички (латински) букви в първия низ.
Игнорирайте дали буквата е главна или малка.
| Вход | Изход |
|---|---|
| Anagram |
| Not an anagram |
| Anagram |
| Not an anagram |
| Anagram |
За любознателните
Задача 15
От входа получавате два реда с текст. Трябва да пресметнете разстоянието на Ливенщайн между тях.
То се пресмята така:
- Ако един от двата текущи низа е празен, връщаме 0
- Ако първата буква от двата низа е еднаква, връщаме разстоянието на Ливенщайн от остатъка от низовете
- Иначе, връщаме 1 плюс най-малкото от разстоянията на Лиевнщайн между:
- първия низ и остатъка на втория низ (без първата буква)
- остатъка на първия низ (без първата буква) и втория низ
- остатъците на двата низа (без първите им букви)
Има два начина да приемем низ от входа: