Tue, 29 Aug 2017 17:34:09 +0300
Ruotsi
5 | 1 | #!/usr/bin/env python3 |
27 | 2 | |
3 | replacements = { | |
4 | "Ylioppilaskylä-Itä": "Ylioppilaskylä", | |
5 | "Ylioppilaskylä-Länsi": "Ylioppilaskylä", | |
6 | "Caribia": "Ylioppilaskylä", | |
7 | "Jokila": "Lieto", | |
8 | "Piispala": "Lieto", | |
9 | 'Saaro': 'Ruissalo', | |
10 | 'Silvola': 'Vahto', | |
11 | 'Hemmola': 'Vahto', | |
12 | 'Paasniittu': 'Ruskon keskusta', | |
13 | 'Kahari': 'Ruskon keskusta', | |
14 | 'Kemiö': 'Kemiönsaari', | |
15 | 'Kasnäs': 'Kemiönsaari', | |
46
548b526ded3b
Lisätty Naantalin pikatie ja Logomo-alueet, korjattu Perno ja Pansio
Teemu Piippo <teemu@hecknology.net>
parents:
45
diff
changeset
|
16 | 'Pernon telakka': 'Perno', |
27 | 17 | } |
18 | ||
19 | # nimiä joista voidaan joustaa tarvittaessa | |
20 | abbreviations = { | |
21 | 'Raision keskusta': 'Raisio', | |
22 | 'Ruskon keskusta': 'Rusko', | |
23 | 'Naantalin keskusta': 'Naantali', | |
24 | 'Kaarinan keskusta': 'Kaarina', | |
25 | 'Kauppakeskus Mylly': 'Mylly', | |
26 | } | |
27 | ||
28 | def simplify_name(name): | |
29 | name = replacements.get(name, name) | |
30 | name = abbreviations.get(name, name) | |
31 | return name | |
32 | ||
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
33 | def reduce_schedule(reitti, trip_length, whole = False): |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
34 | length = ((trip_length / 600) + len(reitti)) / 2 |
5 | 35 | if not reitti: |
36 | return '' | |
22 | 37 | eksoalueet = { |
38 | 'Turku', 'Naantali', 'Lieto', 'Aura', 'Kaarina', 'Pargas', 'Marttila', 'Somero', 'Koski Tl', 'Tarvasjoki', | |
39 | 'Kaivopuisto', | |
40 | } | |
5 | 41 | have_already = set() |
42 | i = 0 | |
43 | while i < len(reitti): | |
44 | if reitti[i] in replacements: | |
45 | reitti[i] = replacements[reitti[i]] | |
46 | if reitti[i] in have_already: | |
47 | del reitti[i] | |
48 | else: | |
49 | have_already.add(reitti[i]) | |
50 | i += 1 | |
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
51 | priorities = { |
5 | 52 | 'Ihala': 150, |
53 | 'Kauppakeskus Mylly': 200, | |
54 | 'Kuninkoja': 80, | |
45
ddf7c58091ef
Ota se friskala pois kyltistä
Teemu Piippo <teemu@hecknology.net>
parents:
44
diff
changeset
|
55 | 'Moikoinen': 80, |
44 | 56 | 'Raision keskusta': 150, |
5 | 57 | 'Kukola': 50, |
58 | 'Kaistarniemi': 50, | |
59 | 'Papinsaari': 50, | |
60 | 'Oriniemi': 50, | |
61 | 'Pikisaari': 50, | |
43 | 62 | 'Häppilä': 20, |
45
ddf7c58091ef
Ota se friskala pois kyltistä
Teemu Piippo <teemu@hecknology.net>
parents:
44
diff
changeset
|
63 | 'Haarla': 80, |
5 | 64 | 'Ylioppilaskylä': 50, |
65 | 'Halinen': 70, | |
21 | 66 | 'Kakskerta': 200, |
5 | 67 | 'Pansio': 50, |
68 | 'Räntämäki': 10, | |
69 | 'Verkahovi': 20, | |
70 | 'Skanssi': 200, | |
71 | 'Vaala': 20, | |
72 | 'Varissuo': 60, | |
73 | 'Kohmo': 80, | |
74 | 'Kupittaa': 70, | |
75 | 'Kauppatori': 1e15, | |
76 | 'Lentoasema': 50, | |
77 | 'Runosmäki': 50, | |
78 | 'Lieto': 100, | |
22 | 79 | 'Lieto as': 200, |
6 | 80 | 'Ilmarinen': 50, |
5 | 81 | 'Vahto': 50, |
82 | 'Ruskon keskusta': 200, | |
27 | 83 | 'Oriketo': 50, |
5 | 84 | 'Harittu': 40, |
85 | 'Jäkärlä': 50, | |
86 | 'Paattinen': 100, | |
87 | 'Kaarinan keskusta': 200, | |
88 | 'Naantalin keskusta': 200, | |
89 | 'Uittamo': 50, | |
6 | 90 | 'Piikkiö': 100, |
91 | 'Paimio': 100, | |
31
60045b362d71
- Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents:
27
diff
changeset
|
92 | 'Pargas': 100, |
60045b362d71
- Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents:
27
diff
changeset
|
93 | 'Nagu': 100, |
27 | 94 | 'Yli-Maaria': 70, |
5 | 95 | 'Saramäki': 50, |
96 | 'Tarvasjoki': 100, | |
97 | 'Marttila': 100, | |
98 | 'Koski Tl': 100, | |
99 | 'Katariina': 50, | |
100 | 'Länsikeskus': 50, | |
101 | 'Kaanaa': 100, | |
102 | 'Satava': 50, | |
6 | 103 | 'Suikkila': 50, |
104 | 'Raunistula': 50, | |
105 | 'Räntämäki': 50, | |
106 | '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
|
107 | 'Pääskyvuori': 100, |
22 | 108 | 'Rautatieasema': 50, |
46
548b526ded3b
Lisätty Naantalin pikatie ja Logomo-alueet, korjattu Perno ja Pansio
Teemu Piippo <teemu@hecknology.net>
parents:
45
diff
changeset
|
109 | 'Logomo': 100, |
20
3199e289ae62
- Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents:
16
diff
changeset
|
110 | 'Rymättylä': 50, |
22 | 111 | "Sauvo": 500, |
112 | "Kemiönsaari": 500, | |
44 | 113 | 'Suovuori': 300, |
45
ddf7c58091ef
Ota se friskala pois kyltistä
Teemu Piippo <teemu@hecknology.net>
parents:
44
diff
changeset
|
114 | 'Eerikvalla': 50, |
ddf7c58091ef
Ota se friskala pois kyltistä
Teemu Piippo <teemu@hecknology.net>
parents:
44
diff
changeset
|
115 | 'Petäsmäki': 50, |
ddf7c58091ef
Ota se friskala pois kyltistä
Teemu Piippo <teemu@hecknology.net>
parents:
44
diff
changeset
|
116 | 'Tortinmäki': 50, |
ddf7c58091ef
Ota se friskala pois kyltistä
Teemu Piippo <teemu@hecknology.net>
parents:
44
diff
changeset
|
117 | 'Aura': 100, |
ddf7c58091ef
Ota se friskala pois kyltistä
Teemu Piippo <teemu@hecknology.net>
parents:
44
diff
changeset
|
118 | 'Friskala': -1, |
5 | 119 | } |
120 | ||
121 | if 'Kauppatori' not in reitti: | |
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
122 | priorities['Länsikeskus'] = priorities['Skanssi'] = priorities['Kauppatori'] |
5 | 123 | |
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
124 | from_place = reitti[0] |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
125 | destination = reitti[-1] |
5 | 126 | reitti_arvot = {} |
22 | 127 | f = lambda i: i**-0.3 |
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
128 | factor = 1 / max(f(i + 1) for i in range(len(reitti))) |
45
ddf7c58091ef
Ota se friskala pois kyltistä
Teemu Piippo <teemu@hecknology.net>
parents:
44
diff
changeset
|
129 | while priorities.get(reitti[-1], 0) < 0: |
ddf7c58091ef
Ota se friskala pois kyltistä
Teemu Piippo <teemu@hecknology.net>
parents:
44
diff
changeset
|
130 | del reitti[-1] |
ddf7c58091ef
Ota se friskala pois kyltistä
Teemu Piippo <teemu@hecknology.net>
parents:
44
diff
changeset
|
131 | destination = reitti[-1] |
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
132 | for i, stop in enumerate(reitti): |
5 | 133 | # 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
|
134 | i = f(i + 1) * factor |
5 | 135 | # 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
|
136 | i *= priorities.get(stop, 1) |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
137 | reitti_arvot[stop] = i |
5 | 138 | # 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
|
139 | if from_place in reitti_arvot: |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
140 | reitti_arvot[from_place] = 0 |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
141 | # varmista että destination tulee kylttiin |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
142 | reitti_arvot[destination] = 1e10 |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
143 | # muodosta sign-tiedot järjestettynä reittiarvon mukaan |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
144 | weights = sorted([ |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
145 | (stop, reitti_arvot[stop], i) \ |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
146 | for i, stop in enumerate(reitti) \ |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
147 | if reitti_arvot[stop] >= 1 |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
148 | ], key = lambda stop: -stop[1]) |
5 | 149 | # enintään neljä tulee kylttiin |
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
150 | weights = weights[:3] |
22 | 151 | # jos kolmas kylttiarvo ei ole tarpeeksi merkittävä suhteessa reitin pituuteen niin otetaan se pois |
152 | try: | |
45
ddf7c58091ef
Ota se friskala pois kyltistä
Teemu Piippo <teemu@hecknology.net>
parents:
44
diff
changeset
|
153 | if weights[2][0] != destination and weights[2][1] < (725 / length ** 0.8): |
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
154 | del weights[2] |
22 | 155 | except IndexError: |
156 | pass | |
157 | try: | |
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
158 | 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
|
159 | del weights[1] |
22 | 160 | except IndexError: |
161 | pass | |
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
162 | # 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
|
163 | weights = sorted(weights, key = lambda paino: paino[2]) |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
164 | # muodostetaan sign.. |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
165 | sign = [paino[0] for paino in weights] |
5 | 166 | # supista nimet jos mahdollista |
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
167 | def finalise(sign, abbreviation_level = 0): |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
168 | if abbreviation_level > 0: |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
169 | sign = [abbreviations.get(paikka, paikka) for paikka in sign] |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
170 | return sign |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
171 | result = finalise(sign) |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
172 | for i in range(len(sign) - 1): |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
173 | if sign[i + 1].startswith(sign[i]): |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
174 | del sign[i] |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
175 | if len(' - '.join(sign)) > 20: |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
176 | result = finalise(sign, abbreviation_level = 1) |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
177 | if whole: |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
178 | result = [from_place] + result |
45
ddf7c58091ef
Ota se friskala pois kyltistä
Teemu Piippo <teemu@hecknology.net>
parents:
44
diff
changeset
|
179 | if not result: |
ddf7c58091ef
Ota se friskala pois kyltistä
Teemu Piippo <teemu@hecknology.net>
parents:
44
diff
changeset
|
180 | result = [destination] |
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
181 | short_from_place = replacements.get(from_place, from_place) |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
182 | if ( |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
183 | short_from_place != result[-1] |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
184 | 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
|
185 | and result[-1] in eksoalueet | {'Kauppatori'} |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
186 | ): |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
187 | 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
|
188 | return result |