busroute.py

Tue, 20 Jun 2017 09:39:42 +0300

author
Teemu Piippo <teemu@hecknology.net>
date
Tue, 20 Jun 2017 09:39:42 +0300
changeset 23
3a495bc4b7b5
parent 22
3d094a804af8
child 24
e6bdb9c54096
permissions
-rw-r--r--

optimointia

5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
1 #!/usr/bin/env python3
22
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
2 def supista_reitti(reitti, ajomatka, kokonainen = False):
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
3 length = ((ajomatka / 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
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
61 prioriteetit = {
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:
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
125 prioriteetit['Länsikeskus'] = prioriteetit['Skanssi'] = prioriteetit['Kauppatori']
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
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
128 helpot_supistukset = {
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
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
136 # jos ei nyt millään vaan mahdu muuten...
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
137 vakavat_supistukset = {
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
138 'Kauppatori': 'Tori',
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
139 'Ylioppilaskylä': 'Yo-kylä',
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
140 }
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
141
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
142 lähtö = reitti[0]
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
143 määränpää = reitti[-1]
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
144 reitti_arvot = {}
22
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
145 f = lambda i: i**-0.3
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
146 jakaja = max(f(i + 1) for i in range(len(reitti)))
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
147 for i, pysäkki in enumerate(reitti):
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
148 # muunna indeksi siten että myöhemmät alueet korostuvat
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
149 i = f(i + 1) / jakaja
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
150 # ota prioriteetti huomioon, jotkin alueet ovat tärkeämpiä kyltissä kuin toiset
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
151 i *= prioriteetit.get(pysäkki, 1)
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
152 reitti_arvot[pysäkki] = i
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
153 # nollaa lähtöpaikan arvo ettei se mitenkään tule kylttiin
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
154 if lähtö in reitti_arvot:
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
155 reitti_arvot[lähtö] = 0
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
156 # varmista että määränpää tulee kylttiin
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
157 reitti_arvot[määränpää] = 1e10
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
158 # muodosta kyltti-tiedot järjestettynä reittiarvon mukaan
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
159 painot = sorted([
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
160 (pysäkki, reitti_arvot[pysäkki], i) \
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
161 for i, pysäkki in enumerate(reitti) \
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
162 if reitti_arvot[pysäkki] >= 1
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
163 ], key = lambda pysäkki: -pysäkki[1])
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
164 # enintään neljä tulee kylttiin
22
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
165 painot = painot[:3]
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
166 # 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
167 try:
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
168 if painot[2][0] != määränpää and painot[2][1] < (1000 / length ** 1.15):
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
169 del painot[2]
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
170 except IndexError:
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
171 pass
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
172 try:
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
173 if painot[1][0] != määränpää and painot[1][1] < (500 / length ** 1.15):
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
174 del painot[1]
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
175 except IndexError:
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
176 pass
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
177 # lajitellaan painoarvot uudestaan reittijärjestykseen jotta kyltti tulee oikeinpäin
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
178 painot = sorted(painot, key = lambda paino: paino[2])
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
179 # muodostetaan kyltti..
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
180 kyltti = [paino[0] for paino in painot]
22
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
181 #kyltti = abstract_sign(kyltti)
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
182 # supista nimet jos mahdollista
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
183 def viimeistele(kyltti, supistus_taso = 0):
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
184 if supistus_taso > 0:
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
185 kyltti = [helpot_supistukset.get(paikka, paikka) for paikka in kyltti]
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
186 if supistus_taso > 1:
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
187 kyltti = [vakavat_supistukset.get(paikka, paikka) for paikka in kyltti]
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
188 return kyltti
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
189 tulos = viimeistele(kyltti)
22
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
190 for i in range(len(kyltti) - 1):
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
191 if kyltti[i + 1].startswith(kyltti[i]):
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
192 del kyltti[i]
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
193 if len(' - '.join(kyltti)) > 20:
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
194 tulos = viimeistele(kyltti, supistus_taso = 1)
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
195 if len(' - '.join(kyltti)) > 70:
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
196 tulos = viimeistele(kyltti, supistus_taso = 2)
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
197 if kokonainen:
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
198 tulos = [lähtö] + tulos
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
199 lyhyt_lähtö = replacements.get(lähtö, lähtö)
22
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
200 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'}:
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
201 tulos = ['Turku' if k == 'Kauppatori' else k for k in tulos]
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
202 return tulos

mercurial