Zadanie

Jozef, ktorý už niekoľko týždňov pracuje ako vyšetrovateľ v organizácii PETA, sa nedávno zúčastnil jej každoročnej konferencie. Na tomto stretnutí sa do hĺbky skúmajú rôzne útoky na práva zvierat.

Jeho úloha spočíva v posúdení životného prostredia a etickosti zaobchádzania so zvieratami v zoologickej záhrade v Bratislave, ktorá sa nachádza veľmi blízko pri tajnej jadrovej elektrárni na matfyze. Špecialisti v PETA zistili, že v tejto elektrárni je už viac ako 20 rokov prevádzkovaný softvér, ktorého autori disponujú len pochybnými zručnosťami v oblasti softvérového inžinierstva. Toto vyvolalo obavy, že elektráreň môže na zvieratá pôsobiť nadmernou radiáciou.

Jozef teda nahodil ponožky a sandále a vydal sa na špionážnu návštevu ZOO. Keďže vstupenka bola časovo obmedzená, musel pracovať rýchlo. Ešte pred návštevou vymyslel jeho tím geniálny plán ako posúdiť čo najviac zvierat za krátky čas. Každé zviera odfotil špeciálným fotoaparátom, ktorý využíva špičkové metódy kompresie. Teraz už len zostáva fotografie roztriediť podľa druhu zvieraťa, ktoré na nich je. Na toto ale v PETA nikto nemá čas, keďže musia riešiť ďalšie naliehavé problémy a preto táto úloha zostáva na vás!

Úloha

Vytvorte program, ktorý načíta fotografiu z Jozefovho špeciálneho fotoaparátu a vypíše, aké je na nej zviera.

Formát vstupu

Na prvom riadku vstupu je číslo \(n\) (\(1 \leq n \leq 4\)), ktoré udáva počet riadkov obrázka. Nasleduje \(n\) riadkov obrázka, pričom každý má nanajvýš \(1000\) znakov. Všetky riadky obrázka sú rovnako dlhé a prázdny priestor predstavujú medzery. Na načítanie riadku aj so všetkými medzerami odporúčame v jazyku C alebo C++ funkciu getline(cin, premenna) ktorá do premennej načíta riadok až po znak konca riadku.

Formát výstupu

Vypíšte na jeden riadok výstupu druh zvieraťa na obrázku.

Príklad

Input:

1
>O========-

Output:

had

Ako ste si rozhodne všimli, v zadaní nie sú jednotlivé druhy zvierat charakterizované a vašou úlohou bolo objaviť ich empiricky. Uvažujme vzorového riešiteľa Sama. Samo si po prečítaní úlohy uvedomil, že nemá veľa iných možností ako poslať aspoň nejaký program a dúfať, že sa stane niečo zaujímavé. Krvopotne teda napísal program, ktorý je v súlade s príkladom v zadaní a odoslal ho. A hľa, jeho riešenie zomrelo už na druhom vstupe s výsledkom Zlá odpoveď. Testovač ale Sama obdaril fotografiou, na ktorej jeho program zlyhal, tvrdiac, že je to ovca:

4
       _
 /mmmmmO
o wwwww
  || ||

Samo si uvedomil, že nie je ideálne mať celú fotografiu uloženú v programe a vstup s ňou porovnať, ale radšej ich odlíšiť na základe nejakej jednoduchej vlastnosti. Vlastnosť, ktorú si všimol ako prvú, je počet riadkov obrázka. Zatiaľ čo fotka hada má jeden riadok, fotka ovce má štyri. A tak napísal nový program, ktorý vie rozoznať ovcu a hada. Takto chvíľu pokračoval, nasledovala stonožka, ryba a mačka, no vtom narazil na problém. Stonožka aj mačka majú obe tri riadky. No Samo je šikovný a rýchlo si všimol, že mačka má, narozdiel od stonožky, uši. A tak, pomocou operátora in v pythone a pomocou funkcie v C++, ktorú si pripravil, skontroloval, či sa v prvom riadku obrázka nachádzajú uši. Následne stretol niekoľko variácii už známych zvierat, barany a veľryby, ktoré rozoznal od svojich náprotivkov podobne ako mačku od stonožky. Potom prišiel mravec, čo bola vlastne stonožka dlhá presne tri články. Samo sa teda jednoducho pozrel na šírku obrázka.

Po ošetrení prípadu mravca sa potešil, pretože už získal za úlohu 8 bodov, no čakalo ho nemilé prekvapenie. Ako sa aj zamestnanci organizácie PETA obávali, reaktor na matfyze pôsobil na ZOO nadmernou radiáciou a nachádzali sa v nej zmutované zvieratá:

1
-=+====O<

V týchto prípadoch mal Samov program vypísať slovo mutant. Rozoznať zmutovaného hada bolo celkom jednoduché, keďže len niektorá časť tela mala namiesto znaku = znak +. A tak Samo použil rovnakú metódu ako doteraz. “Aaa!” Nahlas sa zľakol dvojhlavej ovce.

4
_     _
OmmmmmO
 wwwww
 || ||

V tomto prípade sa nestačí len pozrieť, či obrázok obsahuje nejaký znak, ale bolo by ideálne výskyty spočítať. Za týmto účelom Samo použil v pythone metódu str.count a v C++ si vytvoril ďalšiu funkciu (prípadne použil count). A teda jednoducho spočítal hlavy ovce, berúc do úvahy to, že barana mohol stretnúť podobný osud. Neskôr sa Samo stretol s ovcami so zmutovanou vlnou, ktorá sa opäť dala detekovať prítomnosťou znaku.

Nasledovali stonožky s chýbajúcimi nohami. Samovi napadlo, že spočíta, koľko nôh stonožka má a porovná s tým, koľko by ich mať mala, podľa šírky obrázka. Neskôr sa objavili stonožky s hlavami na náhodných miestach:

3
\|||/
ooOoO
/|||\

Toto sa opäť dalo vyriešiť spočítaním hláv. Dvojhlavé ryby boli o niečo komplikovanejšie, keďže hlava ryby sa skladá z rovnakých znakov ako chvost (ryba môže byť aj otočená), ale v prípade, že sa v obrázku nachádzajú obidva znaky (< a >) dvakrát, ryba musí mať dve hlavy. V prípade, že je takto zmutovaná veľryba, správnym výstupom je velmutant. Objavili sa mačky, ktoré nemali štyri nohy, prípadne mali viac ako dve uši, toto nebol žiadny problém, stačilo spočítať znaky. Nakoniec sa objavila ovca s trochu inou mutáciou vlny, no problém sa neodklonil od spočítania výskytov niektorého znaku. Týmto Samo dokončil svoj program na rozoznávanie druhov a získal 20 bodov. Celkovo mu to trvalo 18 submitov.

n = int(input())
o = [input() for _ in range(n)]
if n == 1:
    if '+' in o[0]:
        print("mutant")
    else:
        print("had")
elif n == 2:
    a = "ryba"
    if o[1].count('<') == o[1].count('>') == 2:
        a = "mutant"
    if 'v' in o[0]:
        print("vel"+a)
    else:
        print(a)
elif n == 3:
    if '^' in o[0]:
        if o[2].count('|') != 4 or o[0].count('^') != 2:
            print("mutant")
        else:
            print("macka")
    else:
        if len(o[0]) == 3:
            print("mravec")
        else:
            if o[0].count('|') < len(o[0])-2 or o[2].count('|') < len(o[2])-2 or o[1].count('O') > 1:
                print("mutant")
            else:
                print("stonozka")
else:
    if o[1].count('O') > 1 or 'W' in o[2] or 'M' in o[1]:
        print("mutant")
    elif '@' in o[0]:
        print("baran")
    else:
       print("ovca")

Diskusia

Tu môžte voľne diskutovať o riešení, deliť sa o svoje kusy kódu a podobne.

Pre pridávanie komentárov sa musíš prihlásiť.