Csavarjunk egyet a feladaton - Megoldás

2022-05-26
A leendő programozóknak szánt, múlt heti IT írásunkban feltett kérdésekre itt találjátok a helyes válaszokat.

Bevezető

Legutóbbi IT feladványunkban egy első ránézésre kissé bonyolultnak tűnő fiktív helyzetet mutattunk be és tettünk fel nektek 3 kérdést. A feladat láttán minden bizonnyal sokan azt gondoltátok, hogy “na ne, megint egy idétlen szöveges feladat”.

A feladattal célunk az volt, hogy valamelyest szemléltessük a programozói látás- és gondolkodásmódot. A programozói léthez ugyanis az is hozzátartozik, hogy felismerjük, hogy az adott élethelyzethez mely funkciók létrehozása a legcélszerűbb annak érdekében, hogy a szoftver valódi segítséget adjon a felhasználónak. És amíg egy leendő programozó eljut oda, hogy megkapja első valódi feladatát, addig csak “mesterséges” mintafeladatotokon keresztül tudja pallérozni elméjét.

A feladatban vázolt helyzet lehetne akár egy gyártósor és az ahhoz kapcsolódó ellátási lánc viszonyának logikailag stilizált példája: A munkadarab a “K” objektum, a belső terület a munkafolyamat, a külső terület pedig a munkához szükséges nyersanyag beszállításának bemeneti pontjai, amelyek viszonya a munkadarabhoz és a gyártási folyamathoz rendkívül fontos az optimális idő- és energiafelhasználás szempontjából. Vagyis a látszólag értelmetlen szöveges feladat valójában egy valós élethelyzetet szimulál.

Ha egy kezdő programozót “odalöknének” egy ehhez hasonló élethelyzetbe, ahol nem csak a lecsupaszított logikai feladattal kell szembesülnie, hanem a valóságban létező sokszáz talán lényeges, és szintén sokszáz teljesen lényegtelen elemmel, akkor hiába lenne meg a programozói tudása ahhoz, hogy egy ilyen helyzetre megfelelő, az optimalizálást célzó megoldást kínáljon, megfelelő gondolkodási tréning hiányában szinte biztosan nem lenne képes megtalálni a megfelelő megoldást.


És akkor jöjjön a megoldás


1.) Melyik csillaghoz lesz legközelebb K, amikor eléri x pontot?

Helyes válasz: K az 1-es csillaghoz lesz a legközelebb.

Magyarázat:

A leírásból tényként tudjuk, hogy a parancssor által K eljut x pontra. Mivel a belső terület lassan és folyamatosan forog, ezért azt kell megtudnunk a parancssorból, hogy mennyi idő alatt jut el K az x pontba. Ehhez elég összeadni a parancssorban található számokat (a betűkkel nem is kell foglalkozni).

A számok összege 40. Ebből azt tudjuk, hogy 40 időegység alatt ér el K az x pontra.

Mivel egy negyed fordulathoz (90°) 4 időegység kell, ezért azt is tudjuk, hogy 10 időegység alatt 10 db negyed fordulat történik - vagyis x pont éppen a terület “tetején” lesz, az 1-es csillag alatt, amikor K eléri az x pontot.


2.) Ha a fent leírtak szerint minden lépés és minden forduló is energiát fogyaszt, milyen (másik) parancssorral érhetjük el a három feltétel egyidejű teljesülését?

Helyes válasz: RR vagy LL

Magyarázat:

Tudjuk, hogy a belső terület forgása miatt K kezdőpontja folyamatosan mozog. Az előző kérdésre a jó válasz az 1-es csillag volt.

Meglepő lehet, de a megfelelő parancssor valójában csak annyi, hogy K-t nem is kell elindítani a kezdőpontról, mert K előbb-utóbb mindenképpen visszakerül a kezdő pozícióba, mivel a belső terület forog (ahogyan a leírásban megtaláljuk).

Viszont ezzel még csak a pozícióra vonatkozó feltételt teljesítettük, de a K-n látható nyíl még nem mutat a csillagra. Ehhez szükséges az, hogy 180°-kal elforgassuk K-t.

Ezért jó megoldás mind az “RR” vagy “LL” parancs: “Fordulj jobbra és ismét jobbra helyben” vagy “Fordulj balra és ismét balra helyben”. Majd pedig a fordulás után csak meg kell várni, hogy a kívánt feltétel teljesüljön.


3.) Minimálisan hány időegység kell az előző kérdésben megfogalmazott pozíció eléréséhez?

Helyes válasz: 16 időegység kell ehhez.

Magyarázat:

Tudjuk, hogy egy negyed fordulathoz (90°) 4 időegység kell, ezért nyilvánvalóan 16 időegység kell ahhoz, hogy a belső terület 360°-os fordulatot tegyen meg, és ezáltal K eljuthat eredeti pozíciójába. Mivel az indulás pillanatától kezdve K folyamatosan távolodik a felső pozíciótól, ezért 0 idő nem elég.

Vagyis meg kell várni, hogy a kívánt pozícióba jusson K, és az ehhez szükséges minimális idő 16 időegység.



Ha érdekel a programozás, nézd meg IT képzéseinket: Junior Java backend fejlesztő, Junior frontend fejlesztő, Junior szoftvertesztelő