Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / upp-2025 / week12 / index.du
diff options
context:
space:
mode:
1 files changed, 77 insertions, 61 deletions
-rw-r--r--src/teaching/upp-2025/week12/index.du138
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