A Marsi Labirintus

Kategória: Python - emelt szint

Feladat leírása

A Marsi Labirintus illusztráció

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:

  1. 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 Honnan részében mindenképpen a LAK-nak kell lennie.

  2. 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!).

  3. A KUL (Külső Felszín) zónába csak a ZSI (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. 1. Olvasd be a mozgas.txt fájlt! Tárold el a mozgásokat úgy, hogy később könnyen tudd vizsgálni az egyes űrhajósok útvonalát. 

  2. 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. 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. 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. 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. 6. A biztonsági szabályzat szerint a KUL (Külső) zónába szigorúan csak a ZSI (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 a Hova mező KUL, de a Honnan mező NEM ZSI! (óra, űrhajó, honnan, hova szerepeljen benne)

  7. 7. A napló feldolgozása után határozd meg minden űrhajós utolsó ismert pozícióját! Generálj egy statusz.txt fá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 a KUL zónában vannak (veszélyes!), az ő soruk végére írd oda: !!! HAZATÉRÉS SZÜKSÉGES !!!


Forrásfájlok