Тук първоначално трябваше да пише нещо за три сърдити каки, които вървяли по кръгъл коридор. Освен това не можели да се понасят и всеки път, когато две от тях се срещали в коридора, се обръщали кръгом и продължавали да вървят. Да, ама нещо не ми харесва такъв сюжет. И без това каките са дефицит - няма нужда да ги подтискаме допълнително.
Затова, сюжета е такъв:
В един идеално полусферичен хълм имало пещера и в нея живеела една ламя, която периодично тормозела селяните в близкото селце. Около хълма имало път, който бил идеална окръжност. От пътя към пещерата можело да се влезе през три входа (врати). Те били неравномерно разположени една от друга. Освен това, всеки вход си имал особеност: малко по-навътре след първата врата имало водно препиятствие, след втората имало огнено препятствие, а след третата имало каменно препятствие (падали камъни).
От селото периодично изпращали юнаци да убият ламята, но те обикновено не се справяли с препятствията. Тези които все пак се справяли с препятствията, ламята набързо ги излапвала още преди да си извадят мечовете. Накрая в селото не останали юнаци.
Обаче местния гуру, бил също така и IT-гуру (или поне така си въобразявал, както ще се види по-надолу). Разбрал вече, че няма да се справи с ламята с конвенционални средства и взел че изобретил робот-юнак, който да преплува водното препятствие. Обаче гуруто допуснал софтуерен бъг в модула "влизай" и робота влязъл през входа с огъня и изгорял. Гуруто направил втори робот, завел го под ръка до точната врата и го пуснал вътре да убие ламята. Обаче робота бил малко бавен и ламята го смачкала.
Гуруто не се отчаял, отчел всички грешки до момента и генерално променил подхода. Създал три нови версии - по един робот-юнак за всяко от препятствията, (// т.е. робот от първата версия може да се справи с водното препятствие, но не и с огъня или камъните, съответно от втората версия може да се справи с огъня ... и т.н.), с идеята трите робота да влязат едновременно през трите врати и така по-лесно да могат да се справят с ламята. За да не стават грешки с вратите, създал и съответен датчик за всяка врата, който да се разпознава само от съответния робот за този вход.
Пренаписал модула "влизай" на роботите. Вътре в алгоритъма вмъкнал следните правила:
1. Тръгвам към моята врата. Ако изгубя връзка с датчика, продължавам напред по пътя в същата посока
2. Ако възстановя изгубена връзка с датчика, продължавам в същата посока (гуруто не си падал по оптимизации и разчитал на това, че пътя е окръжност)
3. Като стигна до вратата, пускам сигнал до другите два робота, че съм пред моята врата.
4. Ако получа от тях сигнали, че и те са пред техните врати в същия момент, то ВЛИЗАМ. Ако не получа, то продължавам напред по пътя в същата посока (Това последното, е очевиден бъг на гуруто, ама какво да се прави: copy-paste и малко бързане и недоглеждане от негова страна. Трябвало е да напише "спирам пред вратата, пускам сигнали и чакам сигнал от другите двама")
5. Ако срещна друг робот докато се движа напред, то обръщам се на 180 градуса и продължавам напред по пътя (Това гуруто го сложил без много да мисли. Изглеждало му като някаква застраховка)
В една бурна нощ, докато ламята спяла, гуруто наредил датчиците на вратите, разположил роботите на разстояние всеки на три метра от неговата врата. Понеже бил напълно уверен в алгоритъма "влизай", разположил роботите малко безразборно - един от ляво на три метра от неговата врата, друг от дясно на три метра от неговата врата.
Завъртял се три пъти, преплюл три пъти през лявото рамо, после три пъти през дясното рамо, подскочил три пъти и после самоуверено натиснал бутона СТАРТ на дистанционното. Роботите тръгнали към вратите, но точно когато били на един метър всеки от своята врата, изтряскала гръмотевица която повредила всичките датчици и роботите подминали вратите.
Гурото до такава степен бил самоуверен, че бил направил единствено бутон СТАРТ. Нямало СТОП, нито нищо друго с което да спре и постави роботите в изходно положение. Единственото което можел да направи, е да подмени датчиците на вратите. Междувременно, роботите спазвали алгоритъма "влизай" и обикаляли около хълма и всеки път, когато два от тях се
срещнели, то тия двамата се обръщали и продължавали напред по пътя в обратна посока, съгласно правило 5. от модула "влизай".
Пита се:
1. Въпреки кривия алгоритъм на гурото, ще има ли момент, в който всеки от роботите ще е пред своята врата и съответно тримата ще разменят сигнали едновременно и ще влязат едновременно?
2. Ще има ли момент, при който всеки от роботите ще е в изходно положение на три метра от неговата врата и текущата му посока на движение ще е към вратата му. (От което автоматично следва и 1.)
Знае се, че роботите се придвижват с еднаква скорост. Също така, гуруто успешно подменил датчиците, но това му отнело известно време. Също така, може да се счита, че времето през което робота пуска сигнал "пред вратата съм" и чака обратен сигнал от другите двама е нула, т.е. робота не спира в момента в който праща сигнала.