Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching
diff options
context:
space:
mode:
Commitb18ee19d02e2c29e057b896df9ae8b3dfca2777c (patch)
Author
 Syndamia <kamen@syndamia.com>
2025-12-17 22:47:10 +0200
Committer
 Syndamia <kamen@syndamia.com>
2025-12-17 22:47:10 +0200
Filesca559f9c93d1705776f9aca48998497a0a299956 /src/teaching
syndamia.com-b18ee19d02e2c29e057b896df9ae8b3dfca2777c.tar
syndamia.com-b18ee19d02e2c29e057b896df9ae8b3dfca2777c.tar.gz
syndamia.com-b18ee19d02e2c29e057b896df9ae8b3dfca2777c.zip
Parentac143884288299e251444b2d617f9275eafc8513 (diff)
feat(teaching/upp-2025/w12): Add exercises
2 files changed, 453 insertions, 0 deletions
-rw-r--r--src/teaching/upp-2025/index.du10
-rw-r--r--src/teaching/upp-2025/week12/index.du443
diff --git a/src/teaching/upp-2025/index.du b/src/teaching/upp-2025/index.du
index c7f9ce2..1d952a2 100644
--- a/src/teaching/upp-2025/index.du
+++ b/src/teaching/upp-2025/index.du
@@ -154,3 +154,13 @@
[url ./week11 Задачи]
|| [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11 Решения]
|| [url https://classroom.github.com/a/z_C3UMi8 GitHub Classroom]
+
+|: 12
+|: 18.12.2025
+|: Низове
+
+|:
+|:
+|:
+[url ./week12 Задачи]
+|| [url https://classroom.github.com/a/zvYPAVPS GitHub Classroom]
diff --git a/src/teaching/upp-2025/week12/index.du b/src/teaching/upp-2025/week12/index.du
new file mode 100644
index 0000000..50dae61
--- /dev/null
+++ b/src/teaching/upp-2025/week12/index.du
@@ -0,0 +1,443 @@
+# Задачи - УПП, Седмица 12, 18.12.2025
+
+'define expected-reading 14 min
+'define created 17 December 2025
+'define edited 17 December 2025
+[$pagenav]
+
+GitHub Classroom: [url https://classroom.github.com/a/zvYPAVPS]
+
+## За решаване
+
+### Задача 1
+
+[url https://en.wikipedia.org/wiki/Caesar_cipher Шифъра на Цезар] е античен шифър, при който всяка буква от азбуката се отмества и замества.
+Например, при отместване от 3, A става D, B става E, Z става C и така нататък.
+
+От входа получавате един ред с текст на английски, който е шифриран с шифъра на Цезар.
+Имплементирайте програма, която го дешифрира (и изкарва резултата).
+
+Начина е чрез "brute force", тоест да тествате всички възможни отмествания.
+Възползвайте се от факта, че петте най-срещани думи в английския език са "the", "be", "to", "of" и "and".
+
+Игнорирайте дали буквите са главни или малки във вашите проверки по време на дешифриране.
+
+:table_2
+|= Вход
+|= Изход
+
+|: Vykly vm aol woluvpe
+|: Order of the phenoix
+
+|: Lg tw gj fgl lg tw
+|: To be or not to be
+
+|: AXV EXA AXTKBA ZLIA XKA DOXV TEBK qeb jxk qrokba xpfab colj qeb jxfk Vrhlk qoxfi
+|: DAY HAD DAWNED COLD AND GRAY WHEN the man turned aside from the main Yukon trail
+
+
+### Задача 2
+
+От входа получавате един ред текст.
+След това получавате положително число: брой колони (където всяка една колона съдържа един знак).
+
+Трябва да изкарате текста, "побран" в броя колони, като можете да разделяте реда само на празни разстояния.
+
+С други думи, не може да разделяте думи (полета) на повече от един ред!
+Ако има поле, което е по-дълго от броя колони, то ще запълни цял ред и ще "прелее" извън броя колони.
+
+:table_2
+|= Вход
+|= Изход
+
+|:
+```
+First second third
+9
+
+|:
+```
+First
+second
+third
+
+|:
+```
+Hello World
+1
+
+|:
+```
+Hello
+World
+
+|:
+```
+a b c d e f g h i j k l
+5
+
+|:
+```
+a b c
+d e f
+g h i
+j k l
+
+|:
+```
+It was nine o'clock in the morning. There was no sun or promise of sun, although there was not a cloud in the sky. It was a clear day.
+19
+
+|:
+```
+It was nine o'clock
+in the morning.
+There was no sun or
+promise of sun,
+although there was
+not a cloud in the
+sky. It was a clear
+day.
+
+
+### Задача 3
+
+От входа получавате две полета (низове, които не съдържат шпации).
+След това получавате положително число: брой колони (където една колона съдържа един знак).
+
+Трябва да разположите двете полета в колоните така, че разстоянието между полетата и разтоянията между всяко поле и краищата са еднакви.
+
+С други думи, ако сме получили `[Hello]`, `[World]` и 25 колони, трябва да изкараме следния низ (където `[|]` обграждат всичките колони):
+
+```
+| Hello World |
+
+Разстоянието между `[|]` и `[H]` е същото като между `[o]` и `[W]`, и между `[d]` и `[|]`, а иммено 5 шпации.
+
+Когато разстоянията не могат да са точни, трябва или средното да е по-късото, или и двата края да са по-къси.
+Ако буквите в думите са повече от броя колоните, тогава изкарайте думите слепени.
+
+:table_2
+|= Вход
+|= Изход
+
+|: Hello World 24
+|:
+```
+ Hello World
+
+|: Hello World 23
+|:
+```
+ Hello World
+
+|: Hello World 22
+|:
+```
+ Hello World
+
+|: Today Is 20
+|:
+```
+ Today Is
+
+|: Lorem ipsum 3
+|:
+```
+Loremipsum
+
+|: Lorem ipsum 11
+|:
+```
+Lorem ipsum
+
+
+### Задача 4
+
+От входа получавате едно поле (последователност от букви, която не съдържа шпация).
+Трябва да върнете типа на полето, спрямо тези правила:
+
+.ordered
+1. =[Тип "integer":]= може да започне с `[+]` или `[-]` и всички останали букви са цифри
+2. =[Тип "float":]= може да започне с `[+]` или `[-]` и след това съдържа цифри и точка, която точка трябва да се намира между цифри (т.е. не е преди или след всички цифри)
+3. =[Тип "word":]= ако съдържа само латински букви (главни или малки)
+4. =[Тип "time":]= може да започне или завърши с "AM" или "PM", след това (допускайки че е започва с низа) съдържа 1-2 цифри (часа), които са между 0 и 24 вкл., знака двоеточие `[:]` и накрая завършва на две цифри (минутите), които са между 0 и 59 вкл.
+5. =[Тип "percentage":]= започва с поне една цифра, като след първите цифри може да има точка и още цифри, и накрая завършва на знака `[%]`
+6. =[Тип "other"]=, когато не можем да го свържем с никое от горните правила
+
+:table_2
+|= Вход
+|= Изход
+
+|: 5
+|: integer
+
+|: +582
+|: integer
+
+|: -83
+|: integer
+
+|: +5.55
+|: float
+
+|: 70.
+|: other
+
+|: -.99
+|: other
+
+|: Hello
+|: word
+
+|: w*rld
+|: other
+
+|: 12:00
+|: time
+
+|: PM1:08
+|: time
+
+|: 4:04AM
+|: time
+
+|: 55:28
+|: other
+
+|: 16:60
+|: other
+
+|: 0%
+|: percentage
+
+|: 99.99%
+|: percentage
+
+|: .95%
+|: other
+
+|: 50.%
+|: other
+
+
+### Задача 5
+
+От входа получавате две положителни цели числа: месец и година.
+Трябва да изкарате календарния месец в следния формат:
+
+```
+Mo Tu We Th Fr Sa Su
+ 1 2 3 4 5 6 7
+ 8 9 10 11 12 13 14
+15 16 17 18 19 20 21
+22 23 24 25 26 27 28
+29 30 31
+
+Като дните трябва да са коректно подравнени.
+
+:table_2
+|= Вход
+|= Изход
+
+|: 12 2025
+|:
+```
+Mo Tu We Th Fr Sa Su
+ 1 2 3 4 5 6 7
+ 8 9 10 11 12 13 14
+15 16 17 18 19 20 21
+22 23 24 25 26 27 28
+29 30 31
+
+|: 8 2024
+|:
+```
+Mo Tu We Th Fr Sa Su
+ 1 2 3 4
+ 5 6 7 8 9 10 11
+12 13 14 15 16 17 18
+19 20 21 22 23 24 25
+26 27 28 29 30 31
+
+|: 9 2001
+|:
+```
+Mo Tu We Th Fr Sa Su
+ 1 2
+ 3 4 5 6 7 8 9
+10 11 12 13 14 15 16
+17 18 19 20 21 22 23
+24 25 26 27 28 29 30
+
+|: 2 2020
+|:
+```
+Mo Tu We Th Fr Sa Su
+ 1 2
+ 3 4 5 6 7 8 9
+10 11 12 13 14 15 16
+17 18 19 20 21 22 23
+24 25 26 27 28 29
+
+
+## За самоподготовка
+
+### Задача 6
+
+Модерните текстови редактори са визуални редактори: редактираш текста, който едновременно виждаш (подобно на лист хартия). Предшественик на тези редактори са [url https://en.wikipedia.org/wiki/Line_editor редовите редактори]: пускаш редица команди, всяка от които променя текста по някакъв начин.
+
+Минуса е, че не нямаш курсор с който да правиш промените директно, това да видиш текста и да го редактираш са отделни команди, които трябва да изписваш всеки път.
+Плюса е, че реализацията е много по-проста и лесно се правят автоматизации/скриптове.
+
+От входа получавате редове с команди.
+Всяка команда е еднобуквена и може да има аргументи преди и след себе си.
+
+Трябва да изпълните всяка команда или да изкарате съобщение за грешка, ако командата е невалидна.
+
+.question
+За любознателните: дизайна на този редактор е базиран на [url https://www.gnu.org/software/ed/manual/ed_manual.html ed]
+
+#### Обсег и текущия ред
+
+Аргумента преди командата определя реда (редовете) върху който работим.
+За удобство ще наричаме това "обсега".
+Да се има впредвид, че броим редовете от 1.
+
+Ако обсега е изпуснат, командата се изпълнява върху "текущия ред".
+Това е просто номер на ред.
+
+Текущия ред по подразбиране е 0 ако няма въведен текст.
+Иначе, спрямо командата, най-често е реда, който последно сме добавили.
+Вижте командите за повече информация.
+
+Обсега за един ред е една от 3 типа стойности:
+.numbered
+1. цяло число (последователност от цифри), която определя реда в текущия текст
+2. `[.]`, което обозначава текущия ред
+3. `[$]`, което обозначава последния ред във файла
+
+Ако въведем =[само]= обсег за един ред, то това обновява текущия ред.
+
+Имаме и обсег за няколко реда, който е във формата `[начало,край]`.
+`[начало]` и `[край]` са в същия формат като обсега за един ред.
+Тоест, това са два обсега за един ред, слепени със запетая.
+
+`[начало]` може да бъде пропуснато, в който случай по подразбиране е 1 (първия ред).
+`[край]` може да бъде пропуснато, в който случай по подразбиране е `[$]` (последния ред).
+
+Трябва да върнете съобщение за грешка, ако е подаден невалиден обсег за текущия текст.
+
+### Командите
+
+Както казахме, всяка команда е една буква (след обсега) и потенциално има аргументи.
+Това са всички команди:
+
+.numbered
+1. `[p]` - изкарва редовете в обсега
+2. `[n]` - изкарва редовете в обсега, като преди всеки е поставен неговия номер на реда
+3. `[d]` - изтрива редовете в обсега
+4. `[а]` - добавя текст =[след]= всеки ред в обсега
+5. `[i]` - добавя текст =[преди]= всеки ред в обсега
+6. `[q]` - прекратява програмата
+
+Буквите, след командите `[a]` и `[i]` са текста, който трябва да бъде вмъкнат.
+Може да се вмъкне само по един ред текст.
+
+След въвеждане на ред чрез `[a]` или `[i]`, текущия ред автоматично се обновява на ново-добавения ред.
+
+След изтриване на ред чрез `[d]`, трябва да обновите текущия ред, само когато има смисъл.
+Например, ако текущия ред е 10 и изтриете ред 20, няма нужда от промяна.
+Ако текущия ред е 10 и изтриете редове 2 и 3, тогава текущия ред трябва да се намали с броя изтрите редове, а имменно, с 2, от 10 на 8.
+
+### Примери
+
+Вход и изход не са смесени.
+Наклонения текст е допълнителен коментар на това, което се случва (тоест, вие не трябва да го подавате на вашата програма).
+
+=[Вход 1:]=
+```
+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
+
+=[Изход 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]
+
+=[Вход 2:]=
+```
+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.
+,2n
+p
+2
+p
+,i
+,p
+q
+
+=[Изход 2:]=
+```
+*[Изход от ",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"]*
+On top of this ice were as many feet of snow. It was all pure white.
+*[Изход от второто "p"]*
+The Yukon lay a mile wide and hidden under three feet of ice.
+*[Изход от ",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]
+
+=[Вход 3:]=
+```
+aNorth and south, as far as his eye could see,
+ait was unbroken white.
+aThe one thing that relieved
+athe whiteness was a thin dark line that
+acruved from the pine-covered
+aisland to the south.
+3,5p
+5
+d
+,n
+icurved from the pine-covered
+.,$p
+1,2d
+.n
+,p
+q
+
+=[Изход 3:]=
+```
+*[Изход от "3,5p"]*
+The one thing that relieved
+the whiteness was a thin dark line that
+cruved from the pine-covered
+*[Изход от ",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"]*
+4 curved from the pine-covered
+5 island to the south.
+*[Изход от ".n"]*
+2 curved from the pine-covered
+*[Изход от ",p"]*
+The one thing that relieved
+the whiteness was a thin dark line that
+curved from the pine-covered
+island to the south.