diff options
| Commit | 85e75aeda7b41b5815501dad33e52cb3b50662a4 (patch) | |
|---|---|---|
| Author | 2024-01-19 08:57:00 +0200 | |
| Committer | 2024-01-19 08:57:00 +0200 | |
| Files | 54e014a6091602a84164d05e47085c25993cff03 | |
| syndamia.com-85e75aeda7b41b5815501dad33e52cb3b50662a4.tar syndamia.com-85e75aeda7b41b5815501dad33e52cb3b50662a4.tar.gz syndamia.com-85e75aeda7b41b5815501dad33e52cb3b50662a4.zip | ||
| Parent | aeb4f6614e4b42b05368bc9721e7f0b0d673c1db (diff) | |
[te/upp-2023/w14] Added exercises
2 files changed, 240 insertions, 0 deletions
| -rw-r--r-- | src/teaching/upp-2023/index.md | 1 | ||||
| -rw-r--r-- | src/teaching/upp-2023/week14/index.md | 239 |
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 бушела в хранилището. |