busroute.py

changeset 71
d2e19670b772
parent 68
382dd85b83a2
child 72
65408ed066b3
--- 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:

mercurial