--- a/busroute.py Tue Jun 13 00:47:24 2017 +0300 +++ b/busroute.py Tue Jun 20 09:37:43 2017 +0300 @@ -1,5 +1,6 @@ #!/usr/bin/env python3 -def supista_reitti(reitti, kokonainen = False): +def supista_reitti(reitti, ajomatka, kokonainen = False): + length = ((ajomatka / 600) + len(reitti)) / 2 def abstract_sign(sign): abstractions = { 'Moikoinen': 'Hirvensalo', @@ -29,7 +30,10 @@ return result if not reitti: return '' - kunnat = {'Turku', 'Naantali', 'Lieto', 'Aura', 'Kaarina', 'Pargas', 'Marttila', 'Somero', 'Koski Tl', 'Tarvasjoki'} + eksoalueet = { + 'Turku', 'Naantali', 'Lieto', 'Aura', 'Kaarina', 'Pargas', 'Marttila', 'Somero', 'Koski Tl', 'Tarvasjoki', + 'Kaivopuisto', + } replacements = { "Ylioppilaskylä-Itä": "Ylioppilaskylä", "Ylioppilaskylä-Länsi": "Ylioppilaskylä", @@ -41,6 +45,8 @@ 'Hemmola': 'Vahto', 'Paasniittu': 'Ruskon keskusta', 'Kahari': 'Ruskon keskusta', + 'Kemiö': 'Kemiönsaari', + 'Kasnäs': 'Kemiönsaari', } have_already = set() i = 0 @@ -56,7 +62,7 @@ 'Ihala': 150, 'Kauppakeskus Mylly': 200, 'Kuninkoja': 80, - 'Moikoinen': 50, + 'Moikoinen': 35, 'Raision keskusta': 100, 'Friskala': 20, 'Kukola': 50, @@ -81,7 +87,7 @@ 'Lentoasema': 50, 'Runosmäki': 50, 'Lieto': 100, - 'Liedon asemanseutu': 200, + 'Lieto as': 200, 'Ilmarinen': 50, 'Vahto': 50, 'Ruskon keskusta': 200, @@ -109,8 +115,10 @@ 'Räntämäki': 50, 'Moisio': 25, 'Pääskyvuori': 100, - 'Rautatieasema': 100, + 'Rautatieasema': 50, 'Rymättylä': 50, + "Sauvo": 500, + "Kemiönsaari": 500, } if 'Kauppatori' not in reitti: @@ -122,7 +130,6 @@ 'Ruskon keskusta': 'Rusko', 'Naantalin keskusta': 'Naantali', 'Kaarinan keskusta': 'Kaarina', - 'Liedon asemanseutu': 'Lieto as.', 'Kauppakeskus Mylly': 'Mylly', } @@ -135,7 +142,7 @@ lähtö = reitti[0] määränpää = reitti[-1] reitti_arvot = {} - f = lambda i: i**-0.6 + f = lambda i: i**-0.3 jakaja = max(f(i + 1) for i in range(len(reitti))) for i, pysäkki in enumerate(reitti): # muunna indeksi siten että myöhemmät alueet korostuvat @@ -155,20 +162,23 @@ if reitti_arvot[pysäkki] >= 1 ], key = lambda pysäkki: -pysäkki[1]) # enintään neljä tulee kylttiin - painot = painot[:4] - # jos neljäs kylttiarvo ei ole tarpeeksi merkittävä suhteessa reitin pituuteen niin otetaan neljäs pois - if len(painot) == 4 and painot[3][0] != määränpää and painot[3][1] < (4000 / len(reitti) ** 1.5): - del painot[3] - # sama kolmannelle - if len(painot) == 3 and painot[2][0] != määränpää and painot[2][1] < (500 / len(reitti) ** 1.5): - del painot[2] - if len(painot) == 2 and painot[1][0] != määränpää and painot[1][1] < (150 / len(reitti) ** 1.5): - del painot[1] + painot = painot[:3] + # jos kolmas kylttiarvo ei ole tarpeeksi merkittävä suhteessa reitin pituuteen niin otetaan se pois + try: + if painot[2][0] != määränpää and painot[2][1] < (1000 / length ** 1.15): + del painot[2] + except IndexError: + pass + try: + if painot[1][0] != määränpää and painot[1][1] < (500 / length ** 1.15): + del painot[1] + except IndexError: + pass # lajitellaan painoarvot uudestaan reittijärjestykseen jotta kyltti tulee oikeinpäin painot = sorted(painot, key = lambda paino: paino[2]) # muodostetaan kyltti.. kyltti = [paino[0] for paino in painot] - kyltti = abstract_sign(kyltti) + #kyltti = abstract_sign(kyltti) # supista nimet jos mahdollista def viimeistele(kyltti, supistus_taso = 0): if supistus_taso > 0: @@ -177,6 +187,9 @@ kyltti = [vakavat_supistukset.get(paikka, paikka) for paikka in kyltti] return kyltti tulos = viimeistele(kyltti) + for i in range(len(kyltti) - 1): + if kyltti[i + 1].startswith(kyltti[i]): + del kyltti[i] if len(' - '.join(kyltti)) > 20: tulos = viimeistele(kyltti, supistus_taso = 1) if len(' - '.join(kyltti)) > 70: @@ -184,6 +197,6 @@ if kokonainen: tulos = [lähtö] + tulos lyhyt_lähtö = replacements.get(lähtö, lähtö) - if lyhyt_lähtö != tulos[-1] and helpot_supistukset.get(lyhyt_lähtö, lyhyt_lähtö) in kunnat | {'Kauppatori'} and tulos[-1] in kunnat | {'Kauppatori'}: + if lyhyt_lähtö != tulos[-1] and helpot_supistukset.get(lyhyt_lähtö, lyhyt_lähtö) in eksoalueet | {'Kauppatori'} and tulos[-1] in eksoalueet | {'Kauppatori'}: tulos = ['Turku' if k == 'Kauppatori' else k for k in tulos] return tulos