Kalandozás a python programozás földjén.

Python, ahogy én ...

Érettségi 2008 (SMS)

2019. május 22. - d3c0d3r

Esemes Ernő szenvedélyes SMS-küldő, ezért a MaMobil nevű cég tesztelésre kérte fel. Ehhez egy új, kézreálló telefont adnak, amelynek tesztüzemben egyetlen hátránya, hogy legfeljebb az először érkező 10 darab, egyenként legfeljebb 100 karakteres üzenetet tud eltárolni. Ha ettől több üzenet van, akkor azokat korlátlan számban a szolgáltató őrzi meg a hangpostához hasonlóan, tehát azokhoz csak bizonyos díj fejében juthat hozzá. Az üzenetek nem tartalmazhatnak ékezetes karaktereket.

Feladat leírás: itt, forrás állományok: itt.

Megoldás:

from datetime import time, timedelta
from collections import Counter

kategoria = ['1-20', '21-40', '41-60', '61-80', '81-100']

class Sms:
    def __init__(self, ora, perc, tel, szoveg):
        self.ido = time(int(ora), int(perc))
        self.tel = tel
        self.szoveg = szoveg
        self.hossz = len(szoveg)
        self.d_ido = timedelta(hours=int(ora), minutes=int(perc))

    def ir(self, txt=''):
        print(txt, self.ido, self.tel, self.szoveg)

    def __str__(self):
        return '\n '+str(self.ido)[:5]+ ' ' + self.szoveg + ' '


smsek = []
mem = 10
with open('sms.txt') as f:
    x = f.read().split('\n')
    for i in range(1, len(x) - 1, 2):
        s = x[i].split()
        smsek.append(Sms(s[0], s[1], s[2], x[i + 1]))

print('2. feladat\nA legfrissebb üzenet: ', smsek[mem - 1].szoveg)

min(smsek, key=lambda v: v.hossz).ir('3. feladat\nA legrövidebb üzenet:')
max(smsek, key=lambda v: v.hossz).ir('A leghosszabb üzenet:')

print('4. feladat')
c = Counter((sms.hossz - 1) // 20 for sms in smsek)
[print(f'{kategoria[i]:>6}: {c[i]:<}') for i in range(len(c))]

print('5. feladat')
x = Counter([sms.ido.hour for sms in smsek])
print(f'A szolgáltatót {sum([i-mem for i in x.values() if i > mem])} SMS miatt kell felhívni.')

print('6. feladat')
x = [sms.d_ido for sms in smsek if sms.tel == '123456789']
print('Nincs elég adat.') if len(x) == 0 else print('Leghosszabb időtartam:', max(x[i+1] - x[i] for i in range(len(x) - 1)))

print('7. feladat')
smsek.append(Sms(input('Óra: '), input('Perc: '), input('Telefon: '), input('Szöveg: ')))

print('8. feledat', end=' -> ')
with open('smski.txt', 'w') as f:
    x = sorted(smsek, key=lambda v: v.tel)
    prev = x[0]
    f.write(prev.tel + str(prev))
    for c in range(1, len(x)):
        if x[c].tel != prev.tel:
            f.write('\n' + x[c].tel)
            prev = x[c]
        f.write(str(x[c]))

print('kész!')

A bejegyzés trackback címe:

https://python-kalandok.blog.hu/api/trackback/id/tr6614848308

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása