Fürdő – a 2017. májusi emelt szintű informatika érettségi programozás-feladatának megoldása (a magyar mint idegen nyelvű feladatsorból)

Ebben az érettségi-megoldásban rendkívüli mennyiségűt bénázok, és aztán jól nem vettem újra a videót, mert nem baj, ha látod, hogy a “nagyok” (khmm-hmm) is tudnak tévedni “néha” (khmm-hmm-hmm!).

Szóval az úgy van, hogy ebben az érettségiben az adatszerkezet nem bonyolult, de érdemes lehet észrevenned, hogy ha már az elején szembenézel a szörnyűséggel – mármint azzal, hogy meg kell írnod két függvényt -, akkor lényegesen megkönnyítheted a saját dolgodat a későbbiekben. Az is szépen kiderül a megoldásból, hogy a függvények “fekete dobozok”, azaz bedobumk valamit, kijön valami, és ha a program többi részének fogalma nincs arról, hogy mi történik odabenn, az jó.

A feladat, és ami még fontosabb, a forrásfájl letölthető innen.

Tessék parancsolni:


#!/usr/bin/env python3

def másodpercbe(óra, perc, másodperc):
    return óra*3600 + perc*60 + másodperc

def órapercmásodpercbe(mp):
    óra = mp // 3600
    perc = (mp - óra*3600) // 60
    másodperc = mp - óra*3600 - perc*60
    return [óra, perc, másodperc]

#1. feladat
adatok = []
forrásfájl = open('furdoadat.txt')
for sor in forrásfájl:
    sor = sor.strip().split()
    sor = list(map(int, sor))
    adatok.append([sor[0], sor[1], sor[2], másodpercbe(sor[3], sor[4], sor[5])])
forrásfájl.close()

print('2. feladat')
öltőzőbőlkilépések = []
for adat in adatok:
    if adat[1] == 0 and adat[2] == 1:
        öltőzőbőlkilépések.append(órapercmásodpercbe(adat[3]))
print('Az első vendég ', ':'.join(list(map(str, öltőzőbőlkilépések[0]))), '-kor lépett ki az öltözőből.', sep='')
print('Az utolsó vendég ', ':'.join(list(map(str, öltőzőbőlkilépések[-1]))), '-kor lépett ki az öltözőből.', sep='')

print('3. feladat')
vendéghalmaz = set()
for adat in adatok:
    vendéghalmaz.add(adat[0])

hányanvoltakegyhelyen = 0
for vendég in vendéghalmaz:
    előfordulás = 0
for adat in adatok:
    if adat[0] == vendég:
        előfordulás += 1
    if előfordulás == 4:
        hányanvoltakegyhelyen += 1
print('A fürdőben', hányanvoltakegyhelyen, 'vendég járt csak egy részlegen.')

print('4. feladat\nA legtöbb időt eltöltő vendég:')
leghosszabb_idő = 0
for vendég in vendéghalmaz:
    for adat in adatok:
        if adat[0] == vendég:
            if adat[1] == 0 and adat[2] == 1:
                érkezés = adat[3]
            if adat[1] == 0 and adat[2] == 0:
                távozás = adat[3]
    benntartózkodás = távozás - érkezés
    if benntartózkodás > leghosszabb_idő:
            leghosszabb_idő = benntartózkodás
            leghosszabb_időt_töltött_vendég = vendég

print(leghosszabb_időt_töltött_vendég, '. vendég ', ':'.join(list(map(str, órapercmásodpercbe(leghosszabb_idő)))), sep='')

print('5. feladat')
ennyi69 = 0
ennyi916 = 0
ennyi1620 = 0
for adat in adatok:
    if adat[1] == 0 and adat[2] == 1:
        if másodpercbe(6,0,0) <= adat[3] <= másodpercbe(8,59,59):
            ennyi69 += 1
        elif másodpercbe(9,0,0) <= adat[3] <= másodpercbe(15,59,59):
            ennyi916 += 1
        elif másodpercbe(16,0,0) <= adat[3] <= másodpercbe(19,59,59):
            ennyi1620 += 1
print('6-9 óra között', ennyi69, 'vendég')
print('9-16 óra között', ennyi916, 'vendég')
print('16-20 óra között', ennyi1620, 'vendég')

#6. feladat
célfájl = open('szauna.txt', 'w')
for vendég in vendéghalmaz:
    szaunában_töltött_idő = 0
    érkezett = 0
    távozott = 0
    for adat in adatok:
        if adat[0] == vendég and adat[1] == 2:
            if adat[2] == 0: #most ment be
                érkezett = adat[3]
            if adat[2] == 1: #most ment ki
                távozott = adat[3]
        if érkezett and távozott:
            szaunában_töltött_idő += távozott - érkezett
            érkezett = 0
            távozott = 0
    if szaunában_töltött_idő:
        print(vendég, ':'.join(list(map(str, órapercmásodpercbe(szaunában_töltött_idő)))), file=célfájl)
célfájl.close()

print('7. feladat')
uszoda = set()
szaunák = set()
gyógyvizes_medencék = set()
strand = set()
for adat in adatok:
    if adat[2] == 0:
        if adat[1] == 1:
            uszoda.add(adat[0])
        elif adat[1] == 2:
            szaunák.add(adat[0])
        elif adat[1] == 3:
            gyógyvizes_medencék.add(adat[0])
        elif adat[1] == 4:
            strand.add(adat[0])
print('Uszoda:', len(uszoda))
print('Szaunák:', len(szaunák))
print('Gyógyvizes medencék:', len(gyógyvizes_medencék))
print('Strand:', len(strand))

Legutóbb hiányoztunk. Legközelebb tesztversenyezünk.

Reklámok

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés /  Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés /  Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés /  Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés /  Módosítás )

Kapcsolódás: %s