Rutes de transport ================== Una empresa de transports emmagatzema la informació d'una *ruta* en *llistes de rutes* a on el primer element és un string amb el nom del conductor, el segon una llista d'strings amb les ciutats que s'han de visitar a la ruta i el tercer un enter amb la distància total de kilòmetres de la ruta. Per exemple: .. code-block:: python ["Pau", ["Barcelona", "València", "Alacant"], 350] També es disposa d'una llista de *ciutats restringides* (strings), és a dir, ciutats que no es vol visitar en aquest moment per algun motiu (restriccions trànsit, contaminació, etc.). Considerem que una ruta *no és vàlida* si ha de visitar alguna ciutat dins la llista de ciutats restringides. Desa les següents funcions al fitxer :file:`rutes.py`. #. Dissenya la funció :func:`ruta_no_valida` que donada una ruta i una llista de ciutats restringides retorna 0.0 si la ruta és vàlida o un float *arrodonit a dos decimals* amb la distància total de kilòmetres de la ruta si no ho és. En el cas de que la ruta visiti quatre o més ciutats, la distància s'haurà d'incrementar en un 10% per possibles incidències. Els següents doctests mostren exemples del que ha de fer la funció: .. literalinclude:: test-ruta-no-valida.txt :language: python3 :lines: 3-16 .. note:: Disposes de més tests al fitxer :download:`test-ruta-no-valida.txt` #. A més, es disposa d'una *llista de rutes* a on cada element és una subllista com les indicades anteriorment que representa una ruta. Per exemple: .. code-block:: python [["Pau", ["Barcelona", "València", "Alacant"], 350], ["Marta", ["Madrid", "Saragossa"], 320], ["Joan", ["Bilbao", "Santander", "Gijón"], 500]] Dissenya la funció :func:`conductors_lliures` que donada una llista de rutes i una llista de ciutats restringides, retorna una nova llista amb els conductors assignats a rutes no vàlides. Cada element de la llista serà una tupla amb dos elements, el nom del conductor i la distància total de kilòmetres de la ruta. La llista estarà ordenada de forma ascendent per distància i, en cas d'empat, alfabèticament per nom. Aquesta funció **ha de cridar** a la funció :func:`ruta_no_valida`. Els següents doctests mostren exemples del que ha de fer la funció: .. literalinclude:: test-conductors-lliures.txt :language: python3 :lines: 3-14 .. note:: Disposes de més tests al fitxer :download:`test-conductors-lliures.txt` Disposeu de solucions al fitxer :download:`rutes.py`