#ÉPÍTMÉNYADÓ - 2022 május 16. emelt szint INFORMATIKA

#------------------------------------------------------------------------------
# 1. Olvassa be és tárolja el az utca.txt állományban talált adatokat, és annak
#    felhasználásával oldja meg a következő feladatokat!
#------------------------------------------------------------------------------

fbe=open('Utca.txt','r')

savok=list(map(int,fbe.readline().strip().split()))
telkek=[]                   #mátrix: ebben lesznek a telkek adatai
for sor in fbe:             # pl.: 33366 Aradi 8A C 180
    telkek.append(sor.strip().split())

fbe.close()

#------------------------------------------------------------------------------
# 2. Hány telek adatai találhatók az állományban? Az eredményt írassa ki a
#    mintának megfelelően a képernyőre!
#------------------------------------------------------------------------------
print(f'2. feladat. A mintában {len(telkek)} telek szerepel.')

#------------------------------------------------------------------------------
# 3. Kérje be egy tulajdonos adószámát, és írassa ki a mintához hasonlóan,
#    hogy melyik utcában, milyen házszám alatt van építménye! Ha a megadott
#    azonosító nem szerepel az adatállományban, akkor írassa ki a
#    „Nem szerepel az adatállományban.” hibaüzenetet!
#------------------------------------------------------------------------------
print('3. feladat.',end=' ')
adoszam=input('Egy tulajdonos adószáma: ')          # pl.: '68396'

#NE FELEDJÜK, HOGY EGY TULAJDONOSNAK TÖBB TELKE IS LEHET!
#klasszikus kiválogatás, és ha nem válogattunk ki semmit, akkor NEM szerepel...

tulaj=[]    #ebbe válogatom a telkeit

for telek in telkek:
    if telek[0]==adoszam:                       #egy tuple kerül a listába:
        tulaj.append((telek[1],telek[2]))       #(utca, házszám)

if len(tulaj)>0:
    for telek in tulaj:
        print(f'{telek[0]} utca {telek[1]}')
else:
    print('Nem szerepel az adatállományban.')

#------------------------------------------------------------------------------
# 4. Készítsen függvényt ado néven, amely meghatározza egy adott építmény után
#    fizetendő adót! A függvény paraméterlistájában szerepeljen az adósáv és
#    az alapterület, visszaadott értéke pedig legyen a fizetendő adó!
#    A következő feladatokban ezt a függvényt is felhasználhatja.
#------------------------------------------------------------------------------

#A feladat 2. bekezdése:
#    Az építmény után négyzetméterenként fizetendő összeg sávonként eltérő,
#    azonban, ha az így kiszámított összeg nem éri el a 10.000 Ft-ot, akkor az
#    adott építmény után nem kell adót fizetni.

#   savok lista itt kerül felhasználásra
#   ha kényelmesebb használhatunk dictionary adattípust is, de nem fontos... :)

def ado(adosav,alapterulet):
    # a match szerkezet csak 3.10-es verziótól van így az alábbi nem lehetséges:
    '''
    match adosav:
        case 'A': fizetendo=alapterulet*savok[0]
        case 'B': fizetendo=alapterulet*savok[1]
        case 'C': fizetendo=alapterulet*savok[2]
    '''
    if adosav=='A':
        fizetendo=alapterulet*savok[0]
    elif adosav=='B':
        fizetendo=alapterulet*savok[1]
    else:
        fizetendo=alapterulet*savok[2]
        
    if fizetendo<10000:
        return 0
    else:
        return fizetendo

#------------------------------------------------------------------------------
# 5. Határozza meg, hogy hány építmény esik az egyes adósávokba, és mennyi az
#    adó összege adósávonként! Az eredményt a mintának megfelelően írassa ki a
#    képernyőre!
#------------------------------------------------------------------------------
print('5. feladat')

#feltételes összegzés és megszámlálás
A_db,A_ado,B_db,B_ado,C_db,C_ado=0,0,0,0,0,0

for telek in telkek:
    if telek[3]=='A':
        A_db+=1
        A_ado+=ado(telek[3],int(telek[4]))
    if telek[3]=='B':
        B_db+=1
        B_ado+=ado(telek[3],int(telek[4]))
    if telek[3]=='C':
        C_db+=1
        C_ado+=ado(telek[3],int(telek[4]))


print(f'A sávba {A_db} telek esik, az adó {A_ado} Ft.')
print(f'B sávba {B_db} telek esik, az adó {B_ado} Ft.')
print(f'C sávba {C_db} telek esik, az adó {C_ado} Ft.')

#------------------------------------------------------------------------------
# 6. Bár az utcák többé-kevésbé párhuzamosak a tó partjával, az egyes porták
#    távolsága a parttól az utcában nem feltétlenül ugyanannyi. Emiatt néhány
#    utcában – az ottani tulajdonosok felháborodására – egyes telkek eltérő
#    sávba esnek. Listázza ki a képernyőre, hogy melyek azok az utcák, ahol a
#    telkek sávokba sorolását emiatt felül kell vizsgálni! Feltételezheti,
#    hogy minden utcában van legalább két telek.
#------------------------------------------------------------------------------
print('6. feladat. A több sávba sorolt utcák:')

#Ne bonyolítsuk el a feladatot:
#    legyen egy halmazunk, amelyben az utca neveket összeszedjük és
#    ezt felhasználva nézzük meg, hogy egy vagy több adósáv kerül-e
#    az adott utcanévhez!

utcak=set()

for telek in telkek:
    utcak.add(telek[1])         #utcanevek a halmazba

for utca in utcak:              #most megvizsgáljuk utcánként az adósávokat
    adosavok=set()                 #ebbe a halmazba tesszük az utca adósávját
    for telek in telkek:
        if telek[1]==utca:      #ez a telek azonos az aktuális utcával
            adosavok.add(telek[3])
    if len(adosavok)>1:         #ez egy olyan utca, amelyben több adósáv van
        print(utca)
    
#------------------------------------------------------------------------------
# 7. Határozza meg a fizetendő adót tulajdonosonként! A tulajdonos adószámát
#    és a fizetendő összeget írassa ki a mintának megfelelően a fizetendo.txt
#    állományba! A fájlban minden tulajdonos adatai új sorban szerepeljenek,
#    a tulajdonos adószámát egy szóközzel elválasztva kövesse az általa
#    fizetendő adó teljes összege.
#------------------------------------------------------------------------------

fki=open('fizetendo.txt','w')

#most tulajdonosonként kell vizsgálódni. Lehet az előző módszer is:
tulajok=set()
for telek in telkek:
    tulajok.add(telek[0])

for tulaj in tulajok:
    adoFT=0
    for telek in telkek:
        if telek[0]==tulaj:
            adoFT+=ado(telek[3],int(telek[4]))
    print(tulaj+' '+str(adoFT),file=fki)

fki.close()






