--- a/busroute.py Sat Oct 07 01:52:15 2017 +0300 +++ b/busroute.py Thu Oct 26 16:54:29 2017 +0300 @@ -1,6 +1,7 @@ #!/usr/bin/env python3 from configparser import ConfigParser +from math import inf replacements = { "ylioppilaskylä-itä": "ylioppilaskylä", @@ -10,8 +11,8 @@ 'saaro': 'ruissalo', 'silvola': 'vahto', 'hemmola': 'vahto', - 'paasniittu': 'ruskon keskusta', - 'kahari': 'ruskon keskusta', + 'paasniittu': 'rusko', + 'kahari': 'rusko', 'kemiö': 'kemiönsaari', 'kasnäs': 'kemiönsaari', 'pernon telakka': 'perno', @@ -19,15 +20,6 @@ 'hanhijoki': 'paimio', } -# nimiä joista voidaan joustaa tarvittaessa -abbreviations = { - 'raision keskusta': 'raisio', - 'ruskon keskusta': 'rusko', - 'naantalin keskusta': 'naantali', - 'kaarinan keskusta': 'kaarina', - 'kauppakeskus mylly': 'mylly', -} - region_info = ConfigParser() region_info.read('regions.ini') municipalities = set(region_info.sections()) @@ -42,31 +34,30 @@ def simplify_name(name): name = replacements.get(name, name) - name = abbreviations.get(name, name) return name -def reduce_schedule(reitti, trip_length, whole = False, long = False): - length = ((trip_length / 600) * 3 + len(reitti) * 2) / 5 - if not reitti: +def reduce_schedule(route, trip_length, whole = False, long = False): + length = ((trip_length / 600) * 3 + len(route) * 2) / 5 + if not route: return '' have_already = set() i = 0 - while i < len(reitti): - if reitti[i] in replacements: - reitti[i] = replacements[reitti[i]] - if reitti[i] in have_already: - del reitti[i] + while i < len(route): + if route[i] in replacements: + route[i] = replacements[route[i]] + if route[i] in have_already: + del route[i] else: - have_already.add(reitti[i]) + have_already.add(route[i]) i += 1 priorities = { 'ihala': 150, - 'kauppakeskus mylly': 200, + 'mylly': 200, 'kuninkoja': 150, - 'moikoinen': 80, - 'raision keskusta': 150, + 'moikoinen': 100, + 'raisio': 150, 'kukola': 50, - 'kaistarniemi': 50, + 'kaistarniemi': 75, 'papinsaari': 80, 'oriniemi': 50, 'pikisaari': 50, @@ -84,21 +75,21 @@ 'kohmo': 80, 'kupittaa': 70, 'kupittaa as': 120, - 'kauppatori': 1e15, + 'kauppatori': inf, 'lentoasema': 50, 'runosmäki': 50, 'lieto': 100, 'lieto as': 200, 'ilmarinen': 50, 'vahto': 50, - 'ruskon keskusta': 200, - 'oriketo': 60, + 'rusko': 200, + 'oriketo': 50, 'harittu': 40, - 'jäkärlä': 80, - 'moisio': 100, - 'paattinen': 100, - 'kaarinan keskusta': 200, - 'naantalin keskusta': 200, + 'jäkärlä': 150, + 'moisio': 150, + 'paattinen': 25, + 'kaarina': 200, + 'naantali': 200, 'uittamo': 50, 'piikkiö': 100, 'paimio': 100, @@ -116,7 +107,6 @@ 'suikkila': 50, 'raunistula': 50, 'räntämäki': 50, - 'moisio': 25, 'pääskyvuori': 100, 'logomo': 100, 'rymättylä': 50, @@ -140,8 +130,8 @@ 'satakunnantie': 25, 'hepokulta': 25, 'nättinummi': 25, - 'nummenmäki': 25, - 'kurala': 25, + 'nummenmäki': 10, + 'kurala': 10, 'itäharju': 25, 'vasaramäki': 25, 'pohjola': 25, @@ -162,18 +152,18 @@ 'port arthur': 25, } - if 'kauppatori' not in reitti: + if 'kauppatori' not in route: priorities['länsikeskus'] = priorities['skanssi'] = priorities['kauppatori'] - from_place = reitti[0] - destination = reitti[-1] + from_place = route[0] + destination = route[-1] reitti_arvot = {} f = lambda i: i**-0.3 - factor = 1 / max(f(i + 1) for i in range(len(reitti))) - while priorities.get(reitti[-1], 0) < 0: - del reitti[-1] - destination = reitti[-1] - for i, stop in enumerate(reitti): + factor = 1 / max(f(i + 1) for i in range(len(route))) + while priorities.get(route[-1], 0) < 0: + del route[-1] + destination = route[-1] + for i, stop in enumerate(route): # muunna indeksi siten että myöhemmät alueet korostuvat i = f(i + 1) * factor # ota prioriteetti huomioon, jotkin alueet ovat tärkeämpiä kyltissä kuin toiset @@ -187,7 +177,7 @@ # muodosta sign-tiedot järjestettynä reittiarvon mukaan weights = sorted([ (stop, reitti_arvot[stop], i) \ - for i, stop in enumerate(reitti) \ + for i, stop in enumerate(route) \ if reitti_arvot[stop] >= 1 ], key = lambda stop: -stop[1]) if long: @@ -211,21 +201,18 @@ # muodostetaan sign.. sign = [paino[0] for paino in weights] to_place = sign[-1] - nearby_municipalities = {'Turku', 'Raisio', 'Naantali', 'Kaarina', 'Lieto'} - if from_place != to_place: - municipality_from = municipalities_per_region.get(from_place) - municipality_to = municipalities_per_region.get(to_place) - if municipality_from and municipality_to and municipality_from not in nearby_municipalities | {municipality_to} and municipality_to not in nearby_municipalities: - def convert_region(region): - municipality = municipalities_per_region.get(region, region) - if municipality != municipality_from: - return municipality - else: - return region - sign = [convert_region(region) for region in sign] - # supista nimet tarvittaessa - if len(' - '.join(sign)) > 20: - sign = [abbreviations.get(place, place) for place in sign] + #nearby_municipalities = {'Turku', 'Raisio', 'Naantali', 'Kaarina', 'Lieto'} + #if from_place != to_place: + # municipality_from = municipalities_per_region.get(from_place) + # municipality_to = municipalities_per_region.get(to_place) + # if municipality_from and municipality_to and municipality_from not in nearby_municipalities | {municipality_to} and municipality_to not in nearby_municipalities: + # def convert_region(region): + # municipality = municipalities_per_region.get(region, region) + # if municipality != municipality_from: + # return municipality + # else: + # return region + # sign = [convert_region(region) for region in sign] old_sign = sign.copy() sign = [] for place in old_sign: