A Marsi Labirintus
Kategória: Python - emelt szint
Feladat leírása
A marsi "Hope Alpha" bázis több, egymással folyosókkal összekötött modulból áll. A biztonsági rendszer folyamatosan naplózza, ha egy űrhajós átlép egyik zónából a másikba. A zónákat rövidítésekkel jelölik (pl. LAK - Lakóegység, KUT - Kutatólabor, ZSI - Zsilip, KUL - Külső Felszín).
A rendszer azonban meghibásodott, és néha "szellem-mozgásokat" rögzít (olyan mozgást, ami fizikailag lehetetlen, mert az illető nem ott volt), illetve figyelni kell az oxigénszint hirtelen zuhanását is.
A mozgas.txt állomány szerkezete más, mint a megszokott. Minden sor egy áthaladást rögzít két zóna között. A sorok felépítése: Óra:Perc Azonosító Honnan Hova OxigénSzint%
-
Időpont: A mozgás pillanata.
-
Azonosító: Az űrhajós kódja.
-
Honnan: A zóna kódja, ahonnan elindult.
-
Hova: A zóna kódja, ahová megérkezett.
-
OxigénSzint%: Az űrhajós létfenntartó rendszerének töltöttsége az érkezés pillanatában (egész szám, 0-100).
Szabályok:
-
Minden űrhajós a nap elején (00:00 előtt) a LAK (Lakóegység) zónában ébred. Tehát az első mozgásának a
Honnanrészében mindenképpen aLAK-nak kell lennie. -
Ha valaki átmegy A-ból B-be, akkor a következő mozgásának B-ből kell indulnia. (Ha nem így van, az adathiba!).
-
A
KUL(Külső Felszín) zónába csak aZSI(Zsilip) zónából lehet kimenni, és csak oda lehet visszajönni.
Példa bemenet:
06:05 USR1 LAK KUT 98
06:10 USR2 LAK ZSI 99
06:15 USR2 ZSI KUL 95
07:00 USR1 KUT LAK 96
...
Készíts Python programot mars néven a feladatok megoldására!
Részfeladatok
1. Olvasd be a
mozgas.txtfájlt! Tárold el a mozgásokat úgy, hogy később könnyen tudd vizsgálni az egyes űrhajósok útvonalát.2. Írd ki annak az űrhajósnak a kódját, aki legelőször lépett ki a
KUL(Külső Felszín) zónába! Ha többen léptek ki egyszerre (ugyanabban a percben), mindegyikük kódját jelenítsd meg szóközzel elválasztva. Ha senki nem ment ki, írd ki: "Ma nem volt űrséta." (itt még nem kell figyelembe venni a szellem-mozgásokat)3. A mozgás során az oxigénszint csökken. Keresd meg azt a mozgást (rekordot), ahol a legnagyobb volt az oxigénszint esése az előző mért állapothoz képest! Ehhez minden űrhajósnál követned kell az előző szintet (induláskor, a LAK-ban mindenkinek 100%-nak tekintjük). Írd ki az űrhajós kódját, a zónákat (Honnan -> Hova) és a fogyást százalékban! (itt még nem kell figyelembe venni a szellem-mozgásokat)
4. A rendszer néha hibás adatot rögzít. Keress olyan bejegyzéseket, amelyek megszakítják a láncot! Tehát: Az űrhajós legutóbb megérkezett a "B" zónába, de a következő bejegyzése szerint a "C" zónából indul (miközben B-ből kéne indulnia). Írd ki az összes ilyen hibás sort (időpont és azonosító), és írd mellé: "Érvénytelen mozgás: [Utolsó_ismert] helyett [Mostani_Honnan]-ból indult."
5. Kérj be a felhasználótól egy zóna kódot (pl.
KUT).a) Számold meg, hányszor érkeztek ebbe a zónába a nap folyamán összesen.
b) Listázd ki azoknak az űrhajósoknak az azonosítóját (ismétlődés nélkül), akik megfordultak itt!
6. A biztonsági szabályzat szerint a
KUL(Külső) zónába szigorúan csak aZSI(Zsilip) zónából szabad kimenni. A hibás szenzorok miatt előfordulhat, hogy valaki "KUT -> KUL" mozgást produkál a logban, ami fizikailag lehetetlen). Keress és írj ki minden olyan esetet, ahol aHovamezőKUL, de aHonnanmező NEMZSI! (óra, űrhajó, honnan, hova szerepeljen benne)7. A napló feldolgozása után határozd meg minden űrhajós utolsó ismert pozícióját! Generálj egy
statusz.txtfájlt. Minden sorba írd be az űrhajós kódját és a zónát, ahol éppen tartózkodik. Külön jelöld meg azokat, akik aKULzónában vannak (veszélyes!), az ő soruk végére írd oda:!!! HAZATÉRÉS SZÜKSÉGES !!!