Ma solution prend:
epignet@dell> time bin/pypy 2022/day24.py
trip1=249 trip2=246 trip3=240 (trip1+trip2+trip3)=735
bin/pypy 2022/day24.py 5.65s user 0.07s system 99% cpu 5.748 total
5.65s pour la partie 2.
J'utilise une liste de dictionaires pour ma grille, le dictionnaire etait le nombre de chaque caractere dans la case.
J'utilise un deque pour mon BFS.
Ce que j'ai fait pour optimiser au maximum, c'est:
python -m cProfile 2022\day24.py
qui ma dit que c'etait ma fonction qui retourne les cases libres autour de moi, qui etait la ou je passais le plus de temps. Du coup j'ai precalcule si chaque case etait libre au moment de mettre a jour les blizzards, pour ne pas avoir a le faire pour chaque essai.
Chaque essai consiste juste a est verifier les cases libres autour de soi et ajouter a un deque, ce qui est ultra rapide si les cases libres sont precalculees.
J'ai fait la partie 2 apres le repas de reveillon - eh oui il est 21:46 a Sydney a l'heure ou j'ecris, c'est peut-etre les quelques verres de Champagne qui m'ont fait un peu galerer sur un bug bete (je recalculais la grille une fois de trop apres chaque trajet) mais la partie 2 n'ajoutait pas de difficulte.
Excusez l'absence d'accents dans mes commentaires, j'habite en Australie et n'ai pas de clavier francais sous la main.
# Sympa
Posté par Eric P. . En réponse au message Avent du Code, jour 24. Évalué à 4.
Bien joue!
Ma solution prend:
epignet@dell> time bin/pypy 2022/day24.py
trip1=249 trip2=246 trip3=240 (trip1+trip2+trip3)=735
bin/pypy 2022/day24.py 5.65s user 0.07s system 99% cpu 5.748 total
5.65s pour la partie 2.
J'utilise une liste de dictionaires pour ma grille, le dictionnaire etait le nombre de chaque caractere dans la case.
J'utilise un deque pour mon BFS.
Ce que j'ai fait pour optimiser au maximum, c'est:
python -m cProfile 2022\day24.py
qui ma dit que c'etait ma fonction qui retourne les cases libres autour de moi, qui etait la ou je passais le plus de temps. Du coup j'ai precalcule si chaque case etait libre au moment de mettre a jour les blizzards, pour ne pas avoir a le faire pour chaque essai.
Chaque essai consiste juste a est verifier les cases libres autour de soi et ajouter a un deque, ce qui est ultra rapide si les cases libres sont precalculees.
J'ai fait la partie 2 apres le repas de reveillon - eh oui il est 21:46 a Sydney a l'heure ou j'ecris, c'est peut-etre les quelques verres de Champagne qui m'ont fait un peu galerer sur un bug bete (je recalculais la grille une fois de trop apres chaque trajet) mais la partie 2 n'ajoutait pas de difficulte.
Excusez l'absence d'accents dans mes commentaires, j'habite en Australie et n'ai pas de clavier francais sous la main.