Created
February 20, 2024 08:38
-
-
Save chovanecm/770ec9c64c93784c7ddc7b25f38718ae to your computer and use it in GitHub Desktop.
PID Fare
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# Testovací cesty jsou nadefinované od řádku 18. | |
# Úplně dole je pak výstup výpočtu | |
# | |
from fare import Trip | |
from fare.calculator.fare_calculator import calculate_best_fare | |
from fare.fare_rules.pid.tickets import tickets | |
start_time="10:00"; | |
def t(time): | |
hours, minutes = time.split(":") | |
return int(hours) * 60 + int(minutes) | |
def t2(minutes): | |
return f"{minutes // 60:02}:{minutes % 60:02}" | |
def test_calculate_best_fare(): | |
trips = ( | |
# Vyrazím tramvají v čase "0" (počátek), v 5. minutě dorazím na Nádraží Libeň | |
Trip(t("10:00"), t("10:05"), "P", "Palmovka - Nádraží Libeň"), | |
# v 11. minutě nastoupím do vlaku a mířím do Úval, projíždím různá pásma | |
Trip(t("10:11"), t("10:16"), "0", "Praha-Libeň - Praha-Běchovice (úsek v pásmu 0)"), | |
Trip(t("10:16"), t("10:21"), "B", "Praha-Běchovice Gr. - Praha-Klánovice Gr. (úsek v pásmu B)"), | |
Trip(t("10:21"), t("10:25"), "1", "Praha-Klánovice Gr. - Úvaly (úsek v pásmu 1)"), | |
# V Úvalech chvíli pobudu, pak se vracím do Klánovic | |
Trip(t("11:40"), t("11:48"), "1", "Úvaly - Praha-Klánovice Gr."), | |
# Na úsek Klánovice - Úvaly je nutné mít jízdenku na pásmo 1 i pásmo B, takže do technického deníku cest zanesu obojí | |
Trip(t("11:48"), t("11:48"), "B", "Praha-Klánovice Gr. - Praha-Klánovice (technický virtuální úsek pro vynucení pásma B)"), | |
# po cca 10 hodinách pokračuji do Běchovic | |
Trip(t("21:35"), t("21:38"), "B", "Praha-Klánovice - Praha-Běchovice Gr."), | |
Trip(t("21:38"), t("21:38"), "0", "Praha-Běchovice Gr. - Praha-Běchovice (technický virtuální úsek pro vynucení pásma 0)") | |
) | |
trips2, used_tickets, price = calculate_best_fare(trips, tickets) | |
assert price == 90 | |
# debug only | |
tickets_and_trips = zip(used_tickets, trips2) | |
for ticket, trip_part in tickets_and_trips: | |
print(f"Jízdenka: {ticket['name']}, Cena: {ticket['price']}, Pokrývá:") | |
for trip in trip_part: | |
print(f" {t2(trip.start)} - {t2(trip.end)} {trip.desc}, Pásmo: {trip.zone}") | |
print() | |
print(f"Celková cena: {price}") | |
test_calculate_best_fare() | |
# | |
# Výsledek: | |
# | |
# Jízdenka: 6 pásem 2 hod, Cena: 60, Pokrývá: | |
# 10:00 - 10:05 Palmovka - Nádraží Libeň, Pásmo: P | |
# 10:11 - 10:16 Praha-Libeň - Praha-Běchovice (úsek v pásmu 0), Pásmo: 0 | |
# 10:16 - 10:21 Praha-Běchovice Gr. - Praha-Klánovice Gr. (úsek v pásmu B), Pásmo: B | |
# 10:21 - 10:25 Praha-Klánovice Gr. - Úvaly (úsek v pásmu 1), Pásmo: 1 | |
# 11:40 - 11:48 Úvaly - Praha-Klánovice Gr., Pásmo: 1 | |
# 11:48 - 11:48 Praha-Klánovice Gr. - Praha-Klánovice (technický virtuální úsek pro vynucení pásma B), Pásmo: B | |
# | |
# Jízdenka: Praha 30 min, Cena: 30, Pokrývá: | |
# 21:35 - 21:38 Praha-Klánovice - Praha-Běchovice Gr., Pásmo: B | |
# 21:38 - 21:38 Praha-Běchovice Gr. - Praha-Běchovice (technický virtuální úsek pro vynucení pásma 0), Pásmo: 0 | |
# | |
# Celková cena: 90 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment