Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commit3f7d2f1d4b4bd61d0d182af5745a529bdff5a2dd (patch)
Author
 Syndamia <kamen@syndamia.com>
2024-01-12 08:32:14 +0200
Committer
 Syndamia <kamen@syndamia.com>
2024-01-12 08:32:14 +0200
Filesd5ae5feb195dce5b1517d7b5383a9d4ddbd30e37
syndamia.com-3f7d2f1d4b4bd61d0d182af5745a529bdff5a2dd.tar
syndamia.com-3f7d2f1d4b4bd61d0d182af5745a529bdff5a2dd.tar.gz
syndamia.com-3f7d2f1d4b4bd61d0d182af5745a529bdff5a2dd.zip
Parentf0cfdc9cefb1a2fa0058836a69352c6c4c29ea8f (diff)
[te/upp-2023/w13] Added exercises
2 files changed, 125 insertions, 0 deletions
-rw-r--r--src/teaching/upp-2023/index.md1
-rw-r--r--src/teaching/upp-2023/week13/index.md124
diff --git a/src/teaching/upp-2023/index.md b/src/teaching/upp-2023/index.md
index 9888181..6529f20 100644
--- a/src/teaching/upp-2023/index.md
+++ b/src/teaching/upp-2023/index.md
@@ -31,3 +31,4 @@
|10|15.12.2023|[Задачи](./week10) \|\| [Решения](https://github.com/Syndamia/upp-2023-solutions/tree/main/week10) \|\| [GitHub classroom](https://classroom.github.com/a/EJcTQRz4)|
|11|22.12.2023|[Задачи](./week11) \|\| [Решения](https://github.com/Syndamia/upp-2023-solutions/tree/main/week11) \|\| [GitHub classroom](https://classroom.github.com/a/cZRnZj9y)|
|12|05.01.2024|[Задачи](./week12) \|\| [GitHub classroom](https://classroom.github.com/a/KEDSxDjl)|
+|13|12.01.2024|[Задачи](./week13) \|\| [GitHub classroom](https://classroom.github.com/a/bgiFD6SB)|
diff --git a/src/teaching/upp-2023/week13/index.md b/src/teaching/upp-2023/week13/index.md
new file mode 100644
index 0000000..70a2be9
--- /dev/null
+++ b/src/teaching/upp-2023/week13/index.md
@@ -0,0 +1,124 @@
+# Задачи - УПП, Седмица 13, 12.01.2024
+
+GitHub classroom: [classroom.github.com/a/bgiFD6SB](https://classroom.github.com/a/bgiFD6SB)
+
+## Алтернативни задачи
+
+Считайте [задачите от семинара](https://github.com/ivanahristova/introduction-to-programming-2023-2024/tree/main/sem13) и [тези от миналия път](../week12/) като част от днешните задачи.
+Тоест, за хората които се затрудняват повечко, решете ги и след това се върнете тук.
+Разбира се, ще помагам и с тях.
+
+
+## 1 задача
+
+От входа получавате число N, това е броя на "пробни" думи.
+След тях получавате още една дума, която е желаната дума.
+Трябва да изкарате коя пробна дума е най-близка до (различава се с най-малко знаци с) желаната дума.
+
+Всяка дума е на нов ред и е съставена от малки латински букви.
+Ако има няколко думи с еднаква "близкост", изкарайте последната от тях.
+
+**Примери:**
+
+|Вход|Изход|
+|----|-----|
+|5<br>cate<br>cot<br>dog<br>cote<br>co<br>cat|cot|
+|4<br>nask<br>nmaskl<br>msdal<br>task<br>mask|task|
+
+## 2 задача
+
+Ще дефинираме обвито изречение, като редица от букви, за които са изпълнени следните правила:
+
+- първата е главна
+- последната е точка
+- между тях има само малки букви, цифри и шпации
+- всяко изречение е "обвито" до някакъв брой колони
+
+ Тоест за всяко изречение са избрани максимален брой колони, и знаците са обвити, така че да се поберат.
+ Примерно, ако имахме изречението "Hello world." и бяхме избрали 5 колони, тогава оплучаваме:
+
+ ```
+ Hello
+ worl
+ d.
+ ```
+
+От входа получавате N и M, те съответстват на матрица от символи с N реда и M колони.
+В матрицата имате обвити изречения, подредени по такъв начин, че между съседни има със сигурност поне една шпация (която действа като разделител).
+Допускаме, че при "двусмислици" възможно най-много шпации са част от изречението (а не от разделителя), тоест ако имаме:
+
+```
+A B
+. .
+```
+
+тогва двете ни изречения са:
+
+```
+B.
+A .
+```
+
+Изкарайте на конзолата всички обвити изречения в матрицата (редът им няма значение).
+
+**Примери:**
+
+|Вход|Изход|
+|----|-----|
+|<pre>7 13<br>Thi A Someth<br>s i n ing. <br>s c . <br>ool <br>. Good Hel<br> luc lo.<br>Ha. k. <br></pre>|Something.<br>An.<br>This is cool.<br>Hello.<br>Good luck.<br>Ha.<br>|
+|<pre>2 7<br>B A.<br>. </pre>|<pre>A.<br>B .</pre>|
+|<pre>3 7<br> A.<br>B <br>. </pre>|<pre>A.<br>B .</pre>|
+|<pre>4 7<br> A.<br> <br>B <br>. </pre>|<pre>A.<br>B .</pre>|
+|<pre>3 6<br>Big <br>jumper<br>. </pre>|<pre>Big jumper.</pre>|
+
+## 3 задача
+
+В префиксния (или полския) запис слагаме оператора за смятане пред (в ляво от) елементите върху които работи (нормален запис - `1 + 2`, полски запис - `+ 1 2`).
+Ще разглеждаме "многоредови" изрази в полски запис, тоест изрази в които има няколко реда от целочислени стойности, така че трябва да се изчислят няколко израза с еднаква "форма", но различни стойности.
+
+Един такъв израз изглежда така:
+
+```
++ 1 2
+ 3 4
+ 5 6 .
+```
+
+Точката на края на последния ред задава край на израза.
+В този пример ще изчислим `1 + 2`, `3 + 4` и `5 + 6`, тоест ще "върне" три стойности: 3, 7 и 11.
+Всяка колона в израза е от един и същи "тип", тоест в една колона винаги ще има числова стойност или някакъв знак.
+С изключение на точката, всеки знак може да се постави на произволен ред (обаче в една колона не може да има повече от един знак).
+
+Примерно:
+
+```
+ 1 - 2 2 63
++ 3 4 7 7
+ 5 6 * 8 9 .
+```
+
+Това ще изчисли `1 + (2 - 2 * 63)`, `3 + (4 - 7 * 7)` и `5 + (6 - 8 * 9)`.
+Израза би направил същото нещо ако примерно всички знаци бяха на първия ред или на последния.
+
+От входа получавате няколко такива израза, докато не получите знака `$`.
+
+Може да достъпвате стойност от предходни изрази чрез синтаксиса "ИНДЕКС.ИНДЕКС", където индексите са от 0, първия определя нормера на израза, докато втория определя коя стойност искаме.
+Примерно:
+
+```
+ 1 2
++ 3 4
+ 5 6 .
+* 0.0 0.2 .
+```
+
+В последния израз умножаваме от нулевия израз, първата и третата стойност, тоест умножаваме 3 и 11.
+
+Накрая трябва да изкарате всички стойности от последния израз.
+
+
+**Пример:**
+
+|Вход|Изход|
+|----|-----|
+|<pre> 1 5<br>+ 2 6<br> 3 7<br> 4 8 .<br>- 0.3 0.2 .<br>* 1.0 0.1 .<br> 1.0 3 0.2 3<br> - 3 0.3 0.1 1.0<br>* 0.0 2.0 / 2.0 0.1 .<br>$<br></pre>|-3 -36 -20|