def ado(szelesseg, hosszusag):
    terulet = szelesseg * hosszusag
    if terulet < 700:
        ado = terulet * 51
    elif terulet <= 1000:
        ado = 700 * 51 + (terulet - 700) * 39
    else:
        ado = 700 * 51 + 300 * 39 + 200
    if szelesseg < 15 or hosszusag < 25:
        ado *= 0.8
    ado = int(round(ado / 100, 2)) * 100
    return ado


def tavolsag(telkek, hazszam):
    tav = 0
    if hazszam % 2 == 0:
        ig = hazszam // 2
    else:
        ig = hazszam // 2 + 1
    for i in range(1, ig):
        tav += telkek[i - 1][1]
    return tav


def szemben(telkek, hazszam0, hazszam1):
    if tavolsag(telkek[0], hazszam0) > tavolsag(telkek[1], hazszam1) + telkek[1][hazszam1 // 2][1] or \
            tavolsag(telkek[0], hazszam0) + telkek[0][hazszam0 // 2 - 1][1] < \
            tavolsag(telkek[1], hazszam1):
        return False
    else:
        return True


# 1 feladat
telkek = [[], []]

f = open("telkek.txt")
db = int(next(f))
for sor in f.readlines():
    hsz, sz, ho = sor.split()
    if int(hsz) % 2 == 0:
        telkek[0].append([int(hsz), int(sz), int(ho)])
    else:
        telkek[1].append([int(hsz), int(sz), int(ho)])
f.close()

telkek[0].sort(key=lambda x: x[0])  # sorbarendezzük a házszám szerint
telkek[1].sort(key=lambda x: x[0])

# 2. feladat
hossz = sum(x[1] for x in telkek[0]) + sum(x[1] for x in telkek[1]) + 2 * 80

print("2. feladat\nÖsszesen", hossz, "métert kell gyalogolni.")

# 3. feladat
db_kicsi = 0
for hsz, sz, ho in telkek[0]:
    if sz <= 20:
        db_kicsi += 1
print("3. feladat\nA keskeny telkek száma a Jólétsoron: ", db_kicsi)

# 4. feladat
legkisebb = min(telkek[1], key=lambda x: x[1] * x[2])
legnagyobb = max(telkek[1], key=lambda x: x[1] * x[2])
print("4. feladat\nA köztük lévő telkek száma:", abs(legnagyobb[0] - legkisebb[0]) // 2 - 1)
print("A legkisebb területű telek házszáma: {0}, területe: {1}".
      format(legkisebb[0], legkisebb[1] * legkisebb[2]))
print("A legnagyobb területű telek házszáma: {0}, területe: {1}".
      format(legnagyobb[0], legnagyobb[1] * legnagyobb[2]))

# 5. feladat
adobevetel = sum(ado(x[1], x[2]) for x in telkek[1])
print("5. feladat\nAdóbevétel a Gazdasoron:", adobevetel, "fabatka volt.")

# 6. feladat
print("6. feladat\nHázszám \t távolság")
for i in [-1, -2, -3]:
    print("{}\t{}".format(telkek[0][i][0], tavolsag(telkek[0], telkek[0][i][0])))

# 7. feladat
ki = open('joletsor.csv', 'w')
for hsz0, sz0, h0 in telkek[0]:
    hossz = 70
    for hsz1, sz1, h1 in telkek[1]:
        if szemben(telkek, hsz0, hsz1) and 70 - h1 < hossz:
            hossz = 70 - h1
    print(hsz0, sz0, hossz, sep=';', file=ki)
ki.close()
print("7. feladat\nFájlbaírás kész.")
