busroute.py

Tue, 20 Jun 2017 10:32:50 +0300

author
Teemu Piippo <teemu@hecknology.net>
date
Tue, 20 Jun 2017 10:32:50 +0300
changeset 26
69cc75506d4f
parent 24
e6bdb9c54096
child 27
f89504285945
permissions
-rw-r--r--

-

5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
1 #!/usr/bin/env python3
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
2 def reduce_schedule(reitti, trip_length, whole = False):
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
3 length = ((trip_length / 600) + len(reitti)) / 2
12
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
4 def abstract_sign(sign):
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
5 abstractions = {
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
6 'Moikoinen': 'Hirvensalo',
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
7 'Maanpää': 'Hirvensalo',
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
8 'Papinsaari': 'Hirvensalo',
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
9 'Häppilä': 'Hirvensalo',
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
10 'Friskala': 'Hirvensalo',
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
11 'Kukola': 'Hirvensalo',
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
12 'Oriniemi': 'Hirvensalo',
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
13 'Haarla': 'Hirvensalo',
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
14 'Lauttasaari': 'Hirvensalo',
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
15 'Pikisaari': 'Hirvensalo',
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
16 'Pernon telakka': 'Perno',
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
17 }
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
18 try:
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
19 start = sign.index('Kauppatori')
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
20 except ValueError:
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
21 return sign
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
22 result = []
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
23 for i, place in enumerate(sign):
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
24 if i >= start:
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
25 abstract_place = abstractions.get(place, place)
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
26 if abstract_place not in result:
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
27 result.append(abstract_place)
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
28 else:
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
29 result.append(place)
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
30 return result
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
31 if not reitti:
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
32 return ''
22
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
33 eksoalueet = {
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
34 'Turku', 'Naantali', 'Lieto', 'Aura', 'Kaarina', 'Pargas', 'Marttila', 'Somero', 'Koski Tl', 'Tarvasjoki',
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
35 'Kaivopuisto',
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
36 }
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
37 replacements = {
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
38 "Ylioppilaskylä-Itä": "Ylioppilaskylä",
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
39 "Ylioppilaskylä-Länsi": "Ylioppilaskylä",
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
40 "Caribia": "Ylioppilaskylä",
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
41 "Jokila": "Lieto",
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
42 "Piispala": "Lieto",
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
43 'Saaro': 'Ruissalo',
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
44 'Silvola': 'Vahto',
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
45 'Hemmola': 'Vahto',
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
46 'Paasniittu': 'Ruskon keskusta',
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
47 'Kahari': 'Ruskon keskusta',
22
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
48 'Kemiö': 'Kemiönsaari',
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
49 'Kasnäs': 'Kemiönsaari',
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
50 }
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
51 have_already = set()
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
52 i = 0
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
53 while i < len(reitti):
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
54 if reitti[i] in replacements:
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
55 reitti[i] = replacements[reitti[i]]
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
56 if reitti[i] in have_already:
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
57 del reitti[i]
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
58 else:
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
59 have_already.add(reitti[i])
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
60 i += 1
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
61 priorities = {
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
62 'Ihala': 150,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
63 'Kauppakeskus Mylly': 200,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
64 'Kuninkoja': 80,
22
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
65 'Moikoinen': 35,
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
66 'Raision keskusta': 100,
6
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
67 'Friskala': 20,
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
68 'Kukola': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
69 'Kaistarniemi': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
70 'Papinsaari': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
71 'Oriniemi': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
72 'Pikisaari': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
73 'Häppilä': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
74 'Haarla': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
75 'Ylioppilaskylä': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
76 'Halinen': 70,
21
6a0394d5a159 Yleistä päivittelyä
Teemu Piippo <teemu@hecknology.net>
parents: 20
diff changeset
77 'Kakskerta': 200,
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
78 'Pansio': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
79 'Räntämäki': 10,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
80 'Verkahovi': 20,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
81 'Skanssi': 200,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
82 'Vaala': 20,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
83 'Varissuo': 60,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
84 'Kohmo': 80,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
85 'Kupittaa': 70,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
86 'Kauppatori': 1e15,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
87 'Lentoasema': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
88 'Runosmäki': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
89 'Lieto': 100,
22
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
90 'Lieto as': 200,
6
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
91 'Ilmarinen': 50,
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
92 'Vahto': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
93 'Ruskon keskusta': 200,
6
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
94 'Oriketo': 30,
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
95 'Harittu': 40,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
96 'Jäkärlä': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
97 'Paattinen': 100,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
98 'Kaarinan keskusta': 200,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
99 'Naantalin keskusta': 200,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
100 'Uittamo': 50,
6
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
101 'Piikkiö': 100,
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
102 'Paimio': 100,
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
103 'Pargas': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
104 'Yli-Maaria': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
105 'Saramäki': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
106 'Tarvasjoki': 100,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
107 'Marttila': 100,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
108 'Koski Tl': 100,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
109 'Katariina': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
110 'Länsikeskus': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
111 'Kaanaa': 100,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
112 'Satava': 50,
6
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
113 'Suikkila': 50,
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
114 'Raunistula': 50,
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
115 'Räntämäki': 50,
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
116 'Moisio': 25,
13
55241f0e1079 Rajattu Pääskyvuoren ja Varissuon alueet ja lisätty Pääskyvuoren prioriteettia. Nyt Pääskyvuori näkyy niissä P2:n kylteissä jotka menevät Pääskyvuoreen
Teemu Piippo <teemu@hecknology.net>
parents: 12
diff changeset
117 'Pääskyvuori': 100,
22
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
118 'Rautatieasema': 50,
20
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 16
diff changeset
119 'Rymättylä': 50,
22
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
120 "Sauvo": 500,
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
121 "Kemiönsaari": 500,
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
122 }
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
123
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
124 if 'Kauppatori' not in reitti:
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
125 priorities['Länsikeskus'] = priorities['Skanssi'] = priorities['Kauppatori']
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
126
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
127 # nimiä joista voidaan joustaa tarvittaessa
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
128 abbreviations = {
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
129 'Raision keskusta': 'Raisio',
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
130 'Ruskon keskusta': 'Rusko',
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
131 'Naantalin keskusta': 'Naantali',
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
132 'Kaarinan keskusta': 'Kaarina',
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
133 'Kauppakeskus Mylly': 'Mylly',
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
134 }
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
135
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
136 from_place = reitti[0]
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
137 destination = reitti[-1]
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
138 reitti_arvot = {}
22
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
139 f = lambda i: i**-0.3
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
140 factor = 1 / max(f(i + 1) for i in range(len(reitti)))
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
141 for i, stop in enumerate(reitti):
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
142 # muunna indeksi siten että myöhemmät alueet korostuvat
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
143 i = f(i + 1) * factor
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
144 # ota prioriteetti huomioon, jotkin alueet ovat tärkeämpiä kyltissä kuin toiset
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
145 i *= priorities.get(stop, 1)
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
146 reitti_arvot[stop] = i
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
147 # nollaa lähtöpaikan arvo ettei se mitenkään tule kylttiin
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
148 if from_place in reitti_arvot:
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
149 reitti_arvot[from_place] = 0
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
150 # varmista että destination tulee kylttiin
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
151 reitti_arvot[destination] = 1e10
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
152 # muodosta sign-tiedot järjestettynä reittiarvon mukaan
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
153 weights = sorted([
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
154 (stop, reitti_arvot[stop], i) \
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
155 for i, stop in enumerate(reitti) \
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
156 if reitti_arvot[stop] >= 1
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
157 ], key = lambda stop: -stop[1])
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
158 # enintään neljä tulee kylttiin
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
159 weights = weights[:3]
22
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
160 # jos kolmas kylttiarvo ei ole tarpeeksi merkittävä suhteessa reitin pituuteen niin otetaan se pois
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
161 try:
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
162 if weights[2][0] != destination and weights[2][1] < (1000 / length ** 1.15):
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
163 del weights[2]
22
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
164 except IndexError:
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
165 pass
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
166 try:
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
167 if weights[1][0] != destination and weights[1][1] < (500 / length ** 1.15):
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
168 del weights[1]
22
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
169 except IndexError:
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
170 pass
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
171 # lajitellaan painoarvot uudestaan reittijärjestykseen jotta sign tulee oikeinpäin
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
172 weights = sorted(weights, key = lambda paino: paino[2])
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
173 # muodostetaan sign..
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
174 sign = [paino[0] for paino in weights]
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
175 #sign = abstract_sign(sign)
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
176 # supista nimet jos mahdollista
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
177 def finalise(sign, abbreviation_level = 0):
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
178 if abbreviation_level > 0:
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
179 sign = [abbreviations.get(paikka, paikka) for paikka in sign]
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
180 return sign
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
181 result = finalise(sign)
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
182 for i in range(len(sign) - 1):
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
183 if sign[i + 1].startswith(sign[i]):
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
184 del sign[i]
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
185 if len(' - '.join(sign)) > 20:
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
186 result = finalise(sign, abbreviation_level = 1)
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
187 if whole:
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
188 result = [from_place] + result
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
189 short_from_place = replacements.get(from_place, from_place)
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
190 if (
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
191 short_from_place != result[-1]
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
192 and abbreviations.get(short_from_place, short_from_place) in eksoalueet | {'Kauppatori'}
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
193 and result[-1] in eksoalueet | {'Kauppatori'}
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
194 ):
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
195 result = ['Turku' if k == 'Kauppatori' else k for k in result]
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
196 return result

mercurial