2024-03-13
Je n'ai pas fait de note hier, mais il a fallu résoudre un bug sur la modale de fin. Je ne passais plus les bons paramètres à la fonction qui vérifie si les stations sont reliées entre elles. Plus de tests, ça aurait pu être bien ou TS, mais bon …
Aujourd'hui, je vais m'attaquer au fait d'afficher les lignes de métro dans la bonne couleur. Je tombe sur cette page wikipédia, la source est vraiment sympa, j'aime bien ce genre de document.
Est-ce que j'ajoute l'info dans json des lignes ? Cela a pour conséquence de modifier le script
extract-lines
pour qu'il ajoute les couleurs.
Sinon j'ajoute l'info dans la class map qui gère ça. La deuxième solution me paraît suffisante.
J'ajoute la liste de couleur, je change une ligne de code et ça fonctionne, j'aime beaucoup. J'envoie direct en prod.
Dans la todo, le prochain sujet, c'est le cout de changement de ligne dans l'algo de Dijkstra. C'est parti !
Créons un jeu de test, j'imagine un par exemple de prendre la 13 qui passe par Saint-Lazare, et remonter jusqu'à Brochant. Si on part de Saint-Lazare, on peut prendre la 13 ou la 14 puis 13. En prenant la 13 ça donne :
- Saint-Lazare
- Liège
- Place de Clichy
- La Fourche
- Brochant
En prenant la 14 puis 13 ça donne :
- Saint-Lazare
- Pont Cardinet
- Porte de Clichy
- Brochant
Donc admettons que je vienne de Miromesnil, dans les deux cas je suis dans la 13, puis l'algo actuel me dirait de prendre la 14, puis re 13. Ce qui donne : En prenant la 13 ça donne 6 stations :
- 13 - Miromesnil
- 13 - Saint-Lazare
- 13 - Liège
- 13 - Place de Clichy
- 13 - La Fourche
- 13 - Brochant
En prenant la 14 puis 13 ça donne 5 stations :
- 13 - Miromesnil
- 13->14 - Saint-Lazare
- 14 - Pont Cardinet
- 14->13 - Porte de Clichy
- 13 Brochant
Voilà mon jeu de test.
Ensuite, comment faire, je pense qu'à la création du graph, au lieu de simplement retourner la distance pour la station adjacente, je peux aussi ajouter la ligne. Ensuite au moment, où l'algo calcule les nodes suivants, si la ligne est différente, alors j'ajoute un cout de 1 par exemple.
Le code écrit est mine de rien un peu compliqué, je demande à ChatGPT de le passer en TS, ça sera plus simple pour changer les signatures. Il m'a très bien fait ça, maintenant, j'ajoute mon intuition.
J'hésite pour l'argument de
computeSmallestStationsPath
entre un cout de changement de ligne (un nombre)
ou juste un booléen qui active ou non cette feature.
Comme ça, rapidement, je ne vois pas de cas où je voudrais un cout différent de X, donc je vais partir sur un booléen.
D'ailleurs ce coût est-ce qu'il est bien de 1 ?
L'exemple de mon test d'au-dessus est intéressant :
On est à "Notre-Dame de Lorette" et on veut aller à "Brochant". Notre-Dame de Lorette est sur la 12, et Brochant est sur la 13. Le plus naturel serait de faire un changement de ligne de 12->13 à Saint-Lazare, mais avec un coût de 0 ou de 1 l'algo retourne toujours :
"Notre-Dame de Lorette",
"Trinité d'Estienne d'Orves",
"Saint-Lazare",
"Pont Cardinet",
"Porte de Clichy",
"Brochant",
VS
"Notre-Dame de Lorette",
"Trinité d'Estienne d'Orves",
"Saint-Lazare",
"Liège",
"Place de Clichy",
"La Fourche",
"Brochant",
Cout total : 7 vs 7, mais l'algorithme retourne toujours le premier.
Si je prends un cout de 2, alors l'algo retourne le deuxième chemin, car j'obtiens : 8 pour 12->13 vs 9 pour 12->14->13.
Je vais me renseigner sur comment fonctionne les algos de CityMapper, ou autres.