by Pavel » 16 Dec 2020, 23:12
Tituya wrote:Maintenant on veut les explications de chacun !

La plupart du temps, mon processus de développement a été assez chaotique. Les premières versions de mes scripts n'étaient pas très bien structurées. J'ai essayé d'ajouter et de supprimer des lignes de code, et j'ai imprimé et analysé les labyrinthes que mes scripts n'avaient pas réussi à résoudre.
J'ai commencé par implémenter les algorithmes que je pensais nécessaires pour résoudre ce labyrinthe:
- pour trouver les chemins les plus courts j'ai implémenté l'algorithme de remplissage par diffusion (flood-fill, https://www.youtube.com/watch?v=Zwh-QNlsurI). A ma connaissance, cet algorithme est très souvent utilisé pour naviguer dans des labyrinthes. Par exemple dans les compétitions de robots micromouse.
- pour identifier les corniches potentiellement dangereuses, j'analyse les corniches voisines et les voisines des voisines
- pour identifier la corniche avec la plus grande probabilité d'avoir Léviathan, je prends la corniche qui a plus de corniches voisines déjà visitées
Vers la fin du concours, j'ai plus ou moins débogué la plupart de mon code et j'ai réussi à trouver un algorithme relativement bien structuré qui fonctionne pas trop mal:
- mettre à jour les informations disponibles
- identifier la clé, les corniches potentiellement dangereuses et Léviathan
- calculer les poids de toutes les corniches (la clé et la porte ont les poids les plus élevés, les corniches sûres ont des poids plus élevés que les corniches dangereuses, etc)
- aller vers la corniche avec le poids le plus élevé
- si la corniche de destination n'est pas sûre et que le héros a une flèche, et qu'une corniche avec la plus forte probabilité d'avoir Léviathan est identifiée, alors attaquer Léviathan
Cet algorithme explore d'abord en profondeur les corniches sûres. Je n'ai utilisé aucun appel récursif car je pense que Python n'est pas optimisé pour ça.
Voici un diagramme de cet algorithme:

Vu les résultats de ce défi, je dirais que la plupart de cet algorithme fonctionne bien à l'exception des calculs de poids pour les puits. J'espère pouvoir améliorer cette partie en m'inspirant du code de CrimsonDeus.
Je tiens aussi à mentionner les parties les plus amusantes pour moi de ce défi:
- tester mes scripts sur TI-Nspire CX II (j'ai adoré l'aspect jeu vidéo de ce défi)
- prendre le contrôle mental des chauves-souris
Last edited by Pavel on 17 Dec 2020, 15:26, edited 6 times in total.