Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commit85e75aeda7b41b5815501dad33e52cb3b50662a4 (patch)
Author
 Syndamia <kamen@syndamia.com>
2024-01-19 08:57:00 +0200
Committer
 Syndamia <kamen@syndamia.com>
2024-01-19 08:57:00 +0200
Files54e014a6091602a84164d05e47085c25993cff03
syndamia.com-85e75aeda7b41b5815501dad33e52cb3b50662a4.tar
syndamia.com-85e75aeda7b41b5815501dad33e52cb3b50662a4.tar.gz
syndamia.com-85e75aeda7b41b5815501dad33e52cb3b50662a4.zip
Parentaeb4f6614e4b42b05368bc9721e7f0b0d673c1db (diff)
[te/upp-2023/w14] Added exercises
2 files changed, 240 insertions, 0 deletions
-rw-r--r--src/teaching/upp-2023/index.md1
-rw-r--r--src/teaching/upp-2023/week14/index.md239
diff --git a/src/teaching/upp-2023/index.md b/src/teaching/upp-2023/index.md
index 6a8bfd2..19199ec 100644
--- a/src/teaching/upp-2023/index.md
+++ b/src/teaching/upp-2023/index.md
@@ -32,3 +32,4 @@
|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) \|\| [Решения](https://github.com/Syndamia/upp-2023-solutions/tree/main/week12) \|\| [GitHub classroom](https://classroom.github.com/a/KEDSxDjl)|
|13|12.01.2024|[Задачи](./week13) \|\| [GitHub classroom](https://classroom.github.com/a/bgiFD6SB)|
+|14|19.01.2024|[Задачи](./week14) \|\| [GitHub classroom](https://classroom.github.com/a/B08TtnnW)|
diff --git a/src/teaching/upp-2023/week14/index.md b/src/teaching/upp-2023/week14/index.md
new file mode 100644
index 0000000..cf28fe7
--- /dev/null
+++ b/src/teaching/upp-2023/week14/index.md
@@ -0,0 +1,239 @@
+# Задачи - УПП, Седмица 14, 19.01.2024
+
+GitHub classroom: [classroom.github.com/a/B08TtnnW](https://classroom.github.com/a/B08TtnnW)
+
+Това е последния практикум, затова ви давам по-лесни и приятни задачи: имплементации на игри!
+Всичките са взети от [101 BASIC Computer Games](https://en.wikipedia.org/wiki/BASIC_Computer_Games) (книгата е налична в [archive.org](https://archive.org/details/bitsavers_decBooks10Mar75_26006648)).
+
+Разбира се, който иска, може да решава задачи от предходни практикуми, давал съм достатъчно задачи.
+
+## 1 задача - Ним
+
+Ним е една много стара игра за два играча.
+В произволен брой купчини са сложени произволен брой предмети (предметите не се различават, примерно камъни или пръчки).
+Алтернативно, всеки играч взема някакъв брой (поне един) предмети от една купчина.
+Играчът който вземе последния предмет печели.
+
+В нашия вариант, предметите са пръчки.
+Компютъра автоматично (и случайно) генерира между 5 и 20 купчини с между 1 и 10 пръчки.
+Разбира се, трябва компютъра да съобщи за конкретните стойности:
+
+```terminal
+X piles
+Y sticks in pile 1
+Z sticks in pile 2
+[...]
+K sticks in pile X
+```
+
+След това се редуват, първия играч, втория играч:
+
+```terminal
+Player 1 turn
+```
+
+Избирате купчина с пръчки:
+
+```terminal
+Which pile do you want sticks from? _
+```
+
+където _ е мястото на курсора.
+След това броя пръчки от купчината:
+
+```terminal
+How many sticks? _
+```
+
+Ако някоя стойност е невалидна, питате пак.
+След това идва редът на втория играч:
+
+```terminal
+Player 2 turn
+```
+
+Накрая, този който вземе последната пръчка печели играта и се пита дали искате наново да почнете играта:
+
+```terminal
+Player X won. Do you want to play again? _
+```
+
+## 2 задача - Хамураби
+
+Вие играете като древния Вавилонски цар Хамураби над своя малък град.
+Управлявате три ресурса във вашето царство: хора, земя и жито.
+Имате власт 10 години, обаче обществото може да ви изгони и преди това.
+
+Не е от голямо значение да знаете, но акър земя е приблизително 4000 квадратни метра, а бушел жито е приблизително 4 килограма жито.
+
+В началото вашия съветник казва:
+
+```terminal
+Hamurabi, I beg to report to you
+In year X, Y people starved, Z came to the city.
+```
+
+Разбира се, X, Y и Z са положителни целочислени стойности.
+По-късно ще определим как се изменят и какви са началните стойности.
+
+След това имате 1/7 шанс чума да сполети вашия град.
+Ако се случи, съветника ви съобщава за това и загубвате половината си население:
+
+```terminal
+A horrible plague struck! Half of the people died.
+```
+
+След това съветника ви дава информация за града:
+
+```terminal
+Population is now X.
+The city now owns X acres.
+You harvested Z bushels per acre.
+Rats ate K bushels.
+You now have L bushels in store.
+```
+
+Разбира се, X, Y, Z, K и L са целочислени стойности.
+
+Ако тази информация е в последната година от вашето царуване, играта свършва и получавате мнението на населението за вас.
+
+Иначе, сега съветника започва да ви дава информация и да ви пита за вашето действие:
+
+```terminal
+Land is trading at X bushels per acre.
+How many acres do you wish to buy? _
+```
+
+Където X е произволно цяло число между 17 и 27, долна черта показва мястото на курсора.
+Трябва да се въведе цяло число.
+В този случай, както и всеки други, ако то е отрицателно, съветника напуска и играта свършва:
+
+```terminal
+Hamurabi, I cannot do what you wish, get yourself another steward!!!!!
+So long for now.
+```
+
+Последния ред винаги се показва, когато играта свърши.
+
+Ако нямате достатъчно бушели в резерв, за да купите всичката въведена земя, съветника ви казва:
+
+```terminal
+Hamurabi, think again, you have only X bushels of grian. Now then,
+```
+
+и същото съобщение за "Land is trading at [...] How many acres ..." се изписва и приемате нов вход.
+
+Ако сте въвели 0, значи искате да продавате земя и съветника ви пита:
+
+```terminal
+How many acres do you wish to sell? _
+```
+
+Ако се въведе отрицателно число, случва се същото като при купуване на земя.
+
+Ако въведете повече земя, отколкото имате, съветника казва:
+
+```terminal
+Hamurabi think again, you own only X acres. Now then,
+```
+
+и пак пита "How many acres [...]".
+
+След като сте купили или продали земя, сега съветника ви пита колко бушели жито ще отделите за нахранване на населението:
+
+```terminal
+How many bushels do you wish to feed your people? _
+```
+
+Ако се въведе твърде голямо число, съветника предупреждава и пита пак:
+
+```terminal
+Hamurabi, think again, you have only X bushels of grain. Now then,
+How many bushels do you wish to feed your people? _
+```
+
+Остава последния въпрос от съветника за годината:
+
+```terminal
+How many acres do you wish to plant with seed? _
+```
+
+Разбира се, ако се въведат повече акри отколкото има, съветника предупреждава и пита пак:
+
+```terminal
+Hamurabi, think again, you own only X acres. Now then,
+How many acres do you wish to plant with seed? _
+```
+
+Предполагам може да се сетите какво съобщение съветника връща при отрицателни акри.
+
+Един бушел жито може да засее два акъра земя, ако няма достатъчно жито, съветника предупреждава и пита пак.
+Отнема 10 човека да се грижат за един акър земя, ако няма достатъчно хора, съветника предупреждава и пита пак:
+
+```terminal
+But you have only X people to tend the fields. Now then,
+```
+
+Това са въпросите на съветника, сега остава годината да се изиграе.
+Хората жънат (произволно число) между 1 и 6 бушела жито на всеки акър.
+
+След това избирате друго произволно число между 1 и 6.
+Ако числото е по-голямо от 1, тогава плъховете ще изядат по толкова голяма дроб бушели жито от резерва (при числото 5, плъховете изяждат 1/5; тук бушелите жито се смятат преди жътва).
+
+Сега населението расте, броя хора които са "дошли" в града се определя по формулата `R * (20 * АКРИ ЗЕМЯ + БУШЕЛИ ЖИТО) / БРОЙ ХОРА / 100 + 1`, където R е цяло число между 1 и 6.
+Бушелите жито се смятат след жътва.
+
+Предпоследно, определя се колко хора са умрели от глад, като всеки човек консумира 20 бушели жито.
+Ако над 45% от населението са умрели от глад, останалите хора ви свалят от власт и играта свършва:
+
+```terminal
+You starved X people in one year, due to this extreme mismanagement,
+you have not only been impeached and thrown out of office but you have
+also been declared national fink!
+So long for now.
+```
+
+Накрая на годината, трябва да обновите общия брой хора, които са умрели от глад, за цялото ви царуване, заедно със средния процент хора които са умирали на година.
+
+Ако успешно царувате 10 години, накрая съветника ви казва как сте се справили:
+
+```terminal
+In your 10-year term of office, X percent of the population starved per year on average,
+I.E., a total of Y people died.
+```
+
+Сега изчислявате пропорцията между земя и хора, съветника ви казва:
+
+```terminal
+You started with 10 acres per person and ended with X acres per person.
+```
+
+Ако средно над 33% от населението е умирало от глад всяка година или съотношението ви е под 7 акъра на човек, тогава се случва същото нещо, като когато над 45% от населението умира от глад.
+
+Ако средно над 10% (но под 34%) от населението е умирало от глад всяка година или съотношението ви е под 9 акъра на човек (но над 6), тогава оставате в историята като лош владетел:
+
+```terminal
+Your heavy-handed performance smacks of Nero and Ivan IV.
+The people (remaining) find you an unpleasant ruler, and frankly, hate your guts.
+So long for now.
+```
+
+Ако средно над 3% (но под 11%) от населението е умирало от глад всяка година или съотношението е между 9 и 10 акъра на човека, тогава оставате със средно впечатление:
+
+```terminal
+Your performance could have been somewhat better but really wasn't too bad at all.
+X people would dearly like to see you assassinated but we all have our trivial problems.
+So long for now.
+```
+
+Където х съответства на бройката, между 0 и 80 процента от населението.
+
+В противен случай, тоест средно под 4% от населението е умирало от глад всяка година или съотношението е над 10 акъра на човека, тогава хората ви харесват:
+
+```terminal
+A fantastic performance!!!
+Charlemange, Disraeli and Jefferson combined could not have done better.
+So long for now.
+```
+
+В началото на играта започвате с 100 човека население, като 5 от тях са дошли в града, 1000 акри земя, жътва от 3 бушела на акър, плъхове са изяли 200 бушела и имате 2800 бушела в хранилището.