"""
2008. május: SMS
@author Klemand66
"""

print("\n1. feladat\n")

betxt = open("sms.txt")

orak=[]
percek=[]
telszamok=[]
uzenetek=[]

k = int(betxt.readline().strip())

for i in range(k):
    sor=betxt.readline().strip()
    darsor=sor.split()
    orak.append(int(darsor[0]))
    percek.append(int(darsor[1]))
    telszamok.append(darsor[2])
    sor=betxt.readline().strip()
    uzenetek.append(sor)    
    
betxt.close()
print("A beolvasás és a fájl lezárása sikeresen befejeződött.")


print("\n2. feladat\n")

db=len(uzenetek)
if db<=10:
    print(uzenetek[db-1]) # az érkező utolsó üzenet lesz a legfrissebb
else:
    print(uzenetek[9]) # a 10. üzenet lesz a legfrissebb
    
        
print("\n3. feladat\n")
    
hosszak=list(map(lambda uzenet: len(uzenet), uzenetek))
maxhossz=max(hosszak)
print(f'A leghosszabb üzenet hossza {maxhossz}.')
maxindex=hosszak.index(maxhossz)
print(f'{orak[maxindex]}, {percek[maxindex]}, {telszamok[maxindex]}, {uzenetek[maxindex]}\n')

minhossz=min(hosszak)
print(f'A legrovidebb üzenet hossza {minhossz}.')
minindex=hosszak.index(minhossz)
print(f'{orak[minindex]}, {percek[minindex]}, {telszamok[minindex]}, {uzenetek[minindex]}')

"""
A feladat szerint elég volt egyet-egyet is megadni, de könnyen megadhatnánk az összeset.
(Ezért is tetszik jobban ez a módszer, mint a sima maximumkiválasztás programozási tétel.)

maxindexek=list(filter(lambda i: hosszak[i]==maxhossz,range(db)))
for i in maxindexek:
    print(f'{orak[i]}, {percek[i]}, {telszamok[i]}, {uzenetek[i]}')
print()

minindexek=list(filter(lambda i: hosszak[i]==minhossz,range(db)))
for i in minindexek:
    print(f'{orak[i]}, {percek[i]}, {telszamok[i]}, {uzenetek[i]}')
print()
"""

print("\n4. feladat\n")

print("Karakterhossz szerinti statisztika:")

for k in range(5):
    stat=list(filter(lambda i: hosszak[i]>k*20 and hosszak[i]<=(k+1)*20 ,range(db)))
    print(f'{k*20+1:2} - {(k+1)*20:3}: {len(stat):2}')
  

print("\n5. feladat\n")

dbsz=0
for i in range(24):
    aktdb=orak.count(i)
    if aktdb>10:
        dbsz+=aktdb-10 # minden órában a 10 fölöttiek maradnak bent
print(f'Ernőnek összesen {dbsz} db üzenetet kell a szolgáltatótól kikérnie.')


print("\n6. feladat\n")

# Kiválogatjuk a barátnő smseit:
bnosmsek=list(filter(lambda i:telszamok[i]=="123456789" ,range(db)))

if len(bnosmsek)<2:
    print("Nincs elegendő üzenet.")
else:
    # Meghatározzuk a barátnő küldésidőit:
    bnoidok=list(map(lambda i:orak[i]*60+percek[i] ,bnosmsek))
    # Meghatározzuk a küldések közötti időket:
    koztesidok=list(map(lambda i:bnoidok[i]-bnoidok[i-1] ,range(1,len(bnoidok))))
    maxido=max(koztesidok)
    print(f'A leghosszabb idő barátnői smsek nélkül {maxido//60} óra {maxido%60} perc volt.')

    
print("\n7. feladat\n")

sor=input("Kérem az órát, a percet és a telefonszámot szóközökkel elválasztva: ")

darsor=sor.strip().split()
orak.append(int(darsor[0]))
percek.append(int(darsor[1]))
telszamok.append(darsor[2])

sor=input("Kérem az üzenetet: ")

uzenetek.append(sor.strip())


print("\n8. feladat\n")

"""
Először elksészítjük a telefonszámok listáját
a hozzájuk tartozó smsekkel a kiírásnak megfelelő formában,
majd a rendezéshez a listákat egy kétdimenziós listává egyesítjük.
"""

telszamlista=[] # sima lista
smslista=[]     # sms-listák listája

for i,telszam in enumerate(telszamok):
    sms=str(orak[i])+" "+str(percek[i])+" "+uzenetek[i]
    if telszam in telszamlista:
        aktindex=telszamlista.index(telszam)
        smslista[aktindex].append(sms) # itt csak hozzáfűzzük az smst az smsek megfelelő listájához
    else:
        telszamlista.append(telszam)
        smslista.append([sms]) # itt nyitjuk az smsek új listáját
    
egylista=[]
for i in range(len(telszamlista)):
    egylista.append([telszamlista[i],smslista[i]])

egylista.sort(key=lambda elem: elem[0])

kitxt = open("smski.txt","w")

for elem in egylista:
    kitxt.write(f'{elem[0]}\n')
    for sms in elem[1]:
        kitxt.write(f' {sms}\n')

kitxt.close()
print("A kiíratás és a szövegfájl lezárása sikeresen befejeződött.")


input("\nA befejezéshez nyomd meg az ENTER billentyűt!")
