diff options
1 files changed, 77 insertions, 61 deletions
| -rw-r--r-- | src/teaching/upp-2025/week12/index.du | 138 |
diff --git a/src/teaching/upp-2025/week12/index.du b/src/teaching/upp-2025/week12/index.du index 5fc86b8..1d1ff4d 100644 --- a/src/teaching/upp-2025/week12/index.du +++ b/src/teaching/upp-2025/week12/index.du @@ -1,19 +1,19 @@ -# Задачи - УПП, Седмица 12, 18.12.2025 +'def title Задачи - УПП, Седмица 12, 18.12.2025 +'def desc Условията на задачите за упражнение. -'define expected-reading 14 min -'define created 17 December 2025 -'define edited 23 December 2025 -[$pagenav] +# {title} -GitHub Classroom: [url https://classroom.github.com/a/zvYPAVPS] +{pagenav 14 min;17 December 2025;23 December 2025} + +GitHub Classroom: {url https://classroom.github.com/a/zvYPAVPS} ## За решаване ### Задача 1 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week12/Exercise01.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week12/Exercise01.cpp} -[url https://en.wikipedia.org/wiki/Caesar_cipher Шифъра на Цезар] е античен шифър, при който всяка буква от азбуката се отмества и замества. +{url Шифъра на Цезар;https://en.wikipedia.org/wiki/Caesar_cipher} е античен шифър, при който всяка буква от азбуката се отмества и замества. Например, при отместване от 3, A става D, B става E, Z става C и така нататък. От входа получавате един ред с текст на английски, който е шифриран с шифъра на Цезар. @@ -24,7 +24,8 @@ GitHub Classroom: [url https://classroom.github.com/a/zvYPAVPS] Игнорирайте дали буквите са главни или малки във вашите проверки по време на дешифриране. -:table_2 +:table +:2 |= Вход |= Изход @@ -38,9 +39,10 @@ GitHub Classroom: [url https://classroom.github.com/a/zvYPAVPS] |: DAY HAD DAWNED COLD AND GRAY WHEN the man turned aside from the main Yukon trail + ### Задача 2 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week12/Exercise02.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week12/Exercise02.cpp} От входа получавате един ред текст. След това получавате положително число: брой колони (където всяка една колона съдържа един знак). @@ -50,7 +52,8 @@ GitHub Classroom: [url https://classroom.github.com/a/zvYPAVPS] С други думи, не може да разделяте думи (полета) на повече от един ред! Ако има поле, което е по-дълго от броя колони, то ще запълни цял ред и ще "прелее" извън броя колони. -:table_2 +:table +:2 |= Вход |= Изход @@ -104,26 +107,28 @@ sky. It was a clear day. + ### Задача 3 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week12/Exercise03.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week12/Exercise03.cpp} От входа получавате две полета (низове, които не съдържат шпации). След това получавате положително число: брой колони (където една колона съдържа един знак). Трябва да разположите двете полета в колоните така, че разстоянието между полетата и разтоянията между всяко поле и краищата са еднакви. -С други думи, ако сме получили [`Hello`], [`World`] и 25 колони, трябва да изкараме следния низ (където [`|`] обграждат всичките колони): +С други думи, ако сме получили {` Hello}, {` World} и 25 колони, трябва да изкараме следния низ (където {` |} обграждат всичките колони): ``` | Hello World | -Разстоянието между [`|`] и [`H`] е същото като между [`o`] и [`W`], и между [`d`] и [`|`], а иммено 5 шпации. +Разстоянието между {` |} и {` H} е същото като между {` o} и {` W}, и между {` d} и {` |}, а иммено 5 шпации. Когато разстоянията не могат да са точни, трябва или средното да е по-късото, или и двата края да са по-къси. Ако буквите в думите са повече от броя колоните, тогава изкарайте думите слепени. -:table_2 +:table +:2 |= Вход |= Изход @@ -158,22 +163,24 @@ Loremipsum Lorem ipsum + ### Задача 4 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week12/Exercise04.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week12/Exercise04.cpp} От входа получавате едно поле (последователност от букви, която не съдържа шпация). Трябва да върнете типа на полето, спрямо тези правила: .ordered -1. [=Тип "integer":=] може да започне с [`+`] или [`-`] и всички останали букви са цифри -2. [=Тип "float":=] може да започне с [`+`] или [`-`] и след това съдържа цифри и точка, която точка трябва да се намира между цифри (т.е. не е преди или след всички цифри) -3. [=Тип "word":=] ако съдържа само латински букви (главни или малки) -4. [=Тип "time":=] може да започне или завърши с "AM" или "PM", след това (допускайки че е започва с низа) съдържа 1-2 цифри (часа), които са между 0 и 24 вкл., знака двоеточие [`:`] и накрая завършва на две цифри (минутите), които са между 0 и 59 вкл. -5. [=Тип "percentage":=] започва с поне една цифра, като след първите цифри може да има точка и още цифри, и накрая завършва на знака [`%`] -6. [=Тип "other"=], когато не можем да го свържем с никое от горните правила +1. {b Тип "integer":} може да започне с {` +} или {` -} и всички останали букви са цифри +2. {b Тип "float":} може да започне с {` +} или {` -} и след това съдържа цифри и точка, която точка трябва да се намира между цифри (т.е. не е преди или след всички цифри) +3. {b Тип "word":} ако съдържа само латински букви (главни или малки) +4. {b Тип "time":} може да започне или завърши с "AM" или "PM", след това (допускайки че е започва с низа) съдържа 1-2 цифри (часа), които са между 0 и 24 вкл., знака двоеточие {` :} и накрая завършва на две цифри (минутите), които са между 0 и 59 вкл. +5. {b Тип "percentage":} започва с поне една цифра, като след първите цифри може да има точка и още цифри, и накрая завършва на знака {` %} +6. {b Тип "other"}, когато не можем да го свържем с никое от горните правила -:table_2 +:table +:2 |= Вход |= Изход @@ -229,6 +236,7 @@ Lorem ipsum |: other + ### Задача 5 От входа получавате две положителни цели числа: месец и година. @@ -244,7 +252,8 @@ Mo Tu We Th Fr Sa Su Като дните трябва да са коректно подравнени. -:table_2 +:table +:2 |= Вход |= Изход @@ -289,13 +298,14 @@ Mo Tu We Th Fr Sa Su 24 25 26 27 28 29 + ## За самоподготовка ### Задача 6 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week12/Exercise06.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week12/Exercise06.cpp} -Модерните текстови редактори са визуални редактори: редактираш текста, който едновременно виждаш (подобно на лист хартия). Предшественик на тези редактори са [url https://en.wikipedia.org/wiki/Line_editor редовите редактори]: пускаш редица команди, всяка от които променя текста по някакъв начин. +Модерните текстови редактори са визуални редактори: редактираш текста, който едновременно виждаш (подобно на лист хартия). Предшественик на тези редактори са {url редовите редактори;https://en.wikipedia.org/wiki/Line_editor}: пускаш редица команди, всяка от които променя текста по някакъв начин. Минуса е, че не нямаш курсор с който да правиш промените директно, това да видиш текста и да го редактираш са отделни команди, които трябва да изписваш всеки път. Плюса е, че реализацията е много по-проста и лесно се правят автоматизации/скриптове. @@ -306,7 +316,7 @@ Mo Tu We Th Fr Sa Su Трябва да изпълните всяка команда или да изкарате съобщение за грешка, ако командата е невалидна. .question -За любознателните: дизайна на този редактор е базиран на [url https://www.gnu.org/software/ed/manual/ed_manual.html ed] +За любознателните: дизайна на този редактор е базиран на {url ed;https://www.gnu.org/software/ed/manual/ed_manual.html} #### Обсег и текущия ред @@ -324,17 +334,17 @@ Mo Tu We Th Fr Sa Su Обсега за един ред е една от 3 типа стойности: .numbered 1. цяло число (последователност от цифри), която определя реда в текущия текст -2. [`.`], което обозначава текущия ред -3. [`$`], което обозначава последния ред във файла +2. {` .}, което обозначава текущия ред +3. {` $}, което обозначава последния ред във файла -Ако въведем [=само=] обсег за един ред, то това обновява текущия ред. +Ако въведем {b само} обсег за един ред, то това обновява текущия ред. -Имаме и обсег за няколко реда, който е във формата [`начало,край`]. -[`начало`] и [`край`] са в същия формат като обсега за един ред. +Имаме и обсег за няколко реда, който е във формата {` начало,край}. +{` начало} и {` край} са в същия формат като обсега за един ред. Тоест, това са два обсега за един ред, слепени със запетая. -[`начало`] може да бъде пропуснато, в който случай по подразбиране е 1 (първия ред). -[`край`] може да бъде пропуснато, в който случай по подразбиране е [`$`] (последния ред). +{` начало} може да бъде пропуснато, в който случай по подразбиране е 1 (първия ред). +{` край} може да бъде пропуснато, в който случай по подразбиране е {` $} (последния ред). Трябва да върнете съобщение за грешка, ако е подаден невалиден обсег за текущия текст. @@ -344,19 +354,19 @@ Mo Tu We Th Fr Sa Su Това са всички команди: .numbered -1. [`p`] - изкарва редовете в обсега -2. [`n`] - изкарва редовете в обсега, като преди всеки е поставен неговия номер на реда -3. [`d`] - изтрива редовете в обсега -4. [`а`] - добавя текст [=след=] всеки ред в обсега -5. [`i`] - добавя текст [=преди=] всеки ред в обсега -6. [`q`] - прекратява програмата +1. {` p} - изкарва редовете в обсега +2. {` n} - изкарва редовете в обсега, като преди всеки е поставен неговия номер на реда +3. {` d} - изтрива редовете в обсега +4. {` а} - добавя текст {b след} всеки ред в обсега +5. {` i} - добавя текст {b преди} всеки ред в обсега +6. {` q} - прекратява програмата -Буквите, след командите [`a`] и [`i`] са текста, който трябва да бъде вмъкнат. +Буквите, след командите {` a} и {` i} са текста, който трябва да бъде вмъкнат. Може да се вмъкне само по един ред текст. -След въвеждане на ред чрез [`a`] или [`i`], текущия ред автоматично се обновява на ново-добавения ред. +След въвеждане на ред чрез {` a} или {` i}, текущия ред автоматично се обновява на ново-добавения ред. -След изтриване на ред чрез [`d`], трябва да обновите текущия ред, само когато има смисъл. +След изтриване на ред чрез {` d}, трябва да обновите текущия ред, само когато има смисъл. Например, ако текущия ред е 10 и изтриете ред 20, няма нужда от промяна. Ако текущия ред е 10 и изтриете редове 2 и 3, тогава текущия ред трябва да се намали с броя изтрите редове, а имменно, с 2, от 10 на 8. @@ -365,24 +375,27 @@ Mo Tu We Th Fr Sa Su Вход и изход не са смесени. Наклонения текст е допълнителен коментар на това, което се случва (тоест, вие не трябва да го подавате на вашата програма). -[=Вход 1:=] +{b Вход 1:} ``` +'emplace aThe man looked along the way he had come. aThe Yukon lay a mile wide and hidden under three feet of ice. aOn top of this ice were as many feet of snow. It was all pure white. ,p q +'endemplace -[=Изход 1:=] +{b Изход 1:} ``` The man looked along the way he had come. The Yukon lay a mile wide and hidden under three feet of ice. On top of this ice were as many feet of snow. It was all pure white. -[$br1] +{br1} -[=Вход 2:=] +{b Вход 2:} ``` +'emplace aThe Yukon lay a mile wide and hidden under three feet of ice. iThe man looked along the way he had come. $aOn top of this ice were as many feet of snow. It was all pure white. @@ -393,25 +406,27 @@ p ,i ,p q +'endemplace -[=Изход 2:=] +{b Изход 2:} ``` -[*Изход от ",2n"*] +{i Изход от ",2n"} 1 The man looked along the way he had come. 2 The Yukon lay a mile wide and hidden under three feet of ice. -[*Изход от първото "p"*] +{i Изход от първото "p"} On top of this ice were as many feet of snow. It was all pure white. -[*Изход от второто "p"*] +{i Изход от второто "p"} The Yukon lay a mile wide and hidden under three feet of ice. -[*Изход от ",p"*]\n +{i Изход от ",p"}\n The man looked along the way he had come.\n The Yukon lay a mile wide and hidden under three feet of ice.\n On top of this ice were as many feet of snow. It was all pure white. -[$br1] +{br1} -[=Вход 3:=] +{b Вход 3:} ``` +'emplace aNorth and south, as far as his eye could see, ait was unbroken white. aThe one thing that relieved @@ -428,30 +443,31 @@ icurved from the pine-covered .n ,p q +'endemplace -[=Изход 3:=] +{b Изход 3:} .note -[=(23.12.2025)=] Поправен този изход +{b (23.12.2025)} Поправен този изход ``` -[*Изход от "3,5p"*] +{i Изход от "3,5p"} The one thing that relieved the whiteness was a thin dark line that cruved from the pine-covered -[*Изход от ",n"*] +{i Изход от ",n"} 1 North and south, as far as his eye could see, 2 it was unbroken white. 3 The one thing that relieved 4 the whiteness was a thin dark line that 5 island to the south. -[*Изход от ".,$p"*] +{i Изход от ".,$p"} curved from the pine-covered the whiteness was a thin dark line that island to the south. -[*Изход от ".n"*] +{i Изход от ".n"} 3 curved from the pine-covered -[*Изход от ",p"*] +{i Изход от ",p"} The one thing that relieved the whiteness was a thin dark line that curved from the pine-covered |