Задачи - УПП, Седмица 14, 19.01.2024

GitHub classroom: classroom.github.com/a/B08TtnnW

Това е последния практикум, затова ви давам по-лесни и приятни задачи: имплементации на игри! Всичките са взети от 101 BASIC Computer Games (книгата е налична в archive.org).

Разбира се, който иска, може да решава задачи от предходни практикуми, давал съм достатъчно задачи.

1 задача - Ним

Ним е една много стара игра за два играча. В произволен брой купчини са сложени произволен брой предмети (предметите не се различават, примерно камъни или пръчки). Алтернативно, всеки играч взема някакъв брой (поне един) предмети от една купчина. Играчът който вземе последния предмет печели.

В нашия вариант, предметите са пръчки. Компютъра автоматично (и случайно) генерира между 5 и 20 купчини с между 1 и 10 пръчки. Разбира се, трябва компютъра да съобщи за конкретните стойности:

X piles
Y sticks in pile 1
Z sticks in pile 2
[...]
K sticks in pile X

След това се редуват, първия играч, втория играч:

Player 1 turn

Избирате купчина с пръчки:

Which pile do you want sticks from? _

където _ е мястото на курсора. След това броя пръчки от купчината:

How many sticks? _

Ако някоя стойност е невалидна, питате пак. След това идва редът на втория играч:

Player 2 turn

Накрая, този който вземе последната пръчка печели играта и се пита дали искате наново да почнете играта:

Player X won. Do you want to play again? _

2 задача - Хамураби

Вие играете като древния Вавилонски цар Хамураби над своя малък град. Управлявате три ресурса във вашето царство: хора, земя и жито. Имате власт 10 години, обаче обществото може да ви изгони и преди това.

Не е от голямо значение да знаете, но акър земя е приблизително 4000 квадратни метра, а бушел жито е приблизително 4 килограма жито.

В началото вашия съветник казва:

Hamurabi, I beg to report to you
In year X, Y people starved, Z came to the city.

Разбира се, X, Y и Z са положителни целочислени стойности. По-късно ще определим как се изменят и какви са началните стойности.

След това имате 1/7 шанс чума да сполети вашия град. Ако се случи, съветника ви съобщава за това и загубвате половината си население:

A horrible plague struck! Half of the people died.

След това съветника ви дава информация за града:

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 са целочислени стойности.

Ако тази информация е в последната година от вашето царуване, играта свършва и получавате мнението на населението за вас.

Иначе, сега съветника започва да ви дава информация и да ви пита за вашето действие:

Land is trading at X bushels per acre.
How many acres do you wish to buy? _

Където X е произволно цяло число между 17 и 27, долна черта показва мястото на курсора. Трябва да се въведе цяло число. В този случай, както и всеки други, ако то е отрицателно, съветника напуска и играта свършва:

Hamurabi, I cannot do what you wish, get yourself another steward!!!!!
So long for now.

Последния ред винаги се показва, когато играта свърши.

Ако нямате достатъчно бушели в резерв, за да купите всичката въведена земя, съветника ви казва:

Hamurabi, think again, you have only X bushels of grian. Now then,

и същото съобщение за “Land is trading at […] How many acres …” се изписва и приемате нов вход.

Ако сте въвели 0, значи искате да продавате земя и съветника ви пита:

How many acres do you wish to sell? _

Ако се въведе отрицателно число, случва се същото като при купуване на земя.

Ако въведете повече земя, отколкото имате, съветника казва:

Hamurabi think again, you own only X acres. Now then,

и пак пита “How many acres […]”.

След като сте купили или продали земя, сега съветника ви пита колко бушели жито ще отделите за нахранване на населението:

How many bushels do you wish to feed your people? _

Ако се въведе твърде голямо число, съветника предупреждава и пита пак:

Hamurabi, think again, you have only X bushels of grain. Now then,
How many bushels do you wish to feed your people? _

Остава последния въпрос от съветника за годината:

How many acres do you wish to plant with seed? _

Разбира се, ако се въведат повече акри отколкото има, съветника предупреждава и пита пак:

Hamurabi, think again, you own only X acres. Now then,
How many acres do you wish to plant with seed? _

Предполагам може да се сетите какво съобщение съветника връща при отрицателни акри.

Един бушел жито може да засее два акъра земя, ако няма достатъчно жито, съветника предупреждава и пита пак. Отнема 10 човека да се грижат за един акър земя, ако няма достатъчно хора, съветника предупреждава и пита пак:

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% от населението са умрели от глад, останалите хора ви свалят от власт и играта свършва:

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 години, накрая съветника ви казва как сте се справили:

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.

Сега изчислявате пропорцията между земя и хора, съветника ви казва:

You started with 10 acres per person and ended with X acres per person.

Ако средно над 33% от населението е умирало от глад всяка година или съотношението ви е под 7 акъра на човек, тогава се случва същото нещо, като когато над 45% от населението умира от глад.

Ако средно над 10% (но под 34%) от населението е умирало от глад всяка година или съотношението ви е под 9 акъра на човек (но над 6), тогава оставате в историята като лош владетел:

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 акъра на човека, тогава оставате със средно впечатление:

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 акъра на човека, тогава хората ви харесват:

A fantastic performance!!!
Charlemange, Disraeli and Jefferson combined could not have done better.
So long for now.

В началото на играта започвате с 100 човека население, като 5 от тях са дошли в града, 1000 акри земя, жътва от 3 бушела на акър, плъхове са изяли 200 бушела и имате 2800 бушела в хранилището.