On a enfin retrouvé nos Lutinelfes !
Dans le verger magique aux fruits étoilés.
Super !
Sauf que quand on a déréglé le Volcan pour survivre et sauver les éléphants, en ouvrant les valves de vapeur, ben… On a déréglé le volcan, donc là il n'est pas en éruption.
Oups…
Les fruits vont pas bien pousser !
Les Elfes vont malgré tout planter leurs arbustes dans les cendres volcaniques, et pour ça s'éparpiller gaiement jusqu'à être bien isolés les uns des autres.
Pour ça ils tournent en rond, et n'avancent que si la voie est vraiment bien libre dans une direction.
On s'arrête quand les elfes sont contents et ne bougent plus.
Youpi !
- Yth.
# Mes conseils...
Posté par Yth (Mastodon) . Évalué à 2.
Ne pas modifier un set() pendant qu'on itère ce même set().
Vérifier notre index d'itération, des fois qu'il indique la dernière itération a avoir vue des changements plutôt que la première itération où personne n'a bougé.
Après 3h à traquer un bug pourri (j'ai vraiment le cerveau en rade), une simple simulation avec une jolie modélisation fonctionne sans lourdeur, pas de données extraordinaires ni de surcharge CPU ici, juste de la méthode, des intersections d'ensembles, et une jolie image.
Hein que c'est pourrave et qu'on voit pas vite les effets du bidule quand ça fonctionne sur deux rounds de validation ?
Bref :
for elf in elves.copy()
pour faire vite.Ou mieux :
[^] # Re: Mes conseils...
Posté par Yth (Mastodon) . Évalué à 2. Dernière modification le 23 décembre 2022 à 13:34.
Simple, propre, impossible de se planter, tout est clair, tout est sur-validé. Et ça fonctionne.
Mon bug c'est parce que j'avais fait une boucle pour afficher du debug.
Sinon j'aurais pas fait de boucle, et utiliser des set.difference/update comme dans le code présenté…
Pfff…
Ah, oui, partir sur une classe dérivée de tuple pour les Elfes, c'est évidemment pour pouvoir utiliser les fonctions d'ensemble, très simples et efficaces, sans avoir à coder quoi que ce soit de compliqué, ou réinventer la roue !
[^] # Re: Mes conseils...
Posté par Yth (Mastodon) . Évalué à 2.
Et une autre image pour valider visuellement les résultats de test, avec la solution finale du test au round 20.
[^] # Re: Mes conseils...
Posté par Yth (Mastodon) . Évalué à 2.
Et les données initiales qui donnent le résultat vu plus haut après 881 itérations !
[^] # Re: Mes conseils...
Posté par alkino . Évalué à 2.
Chanceux, j'étais à 992 secondes !
[^] # Re: Mes conseils...
Posté par Eric P. . Évalué à 1. Dernière modification le 24 décembre 2022 à 01:14.
889 rounds pour moi.
Et mon programme prend moins de 2s.
Il n'est pas tres different des votres, mais je stocke les coordonnees des Elfs dans un dictionary a la place d'un set, car la plupart des acces se font a key connue. Je me suis dit qu'un acces par key serait plus rapide qu'un 'in' sur un set qui parcourerait le set.
Ce qui est en fait faux, d'apres https://wiki.python.org/moin/TimeComplexity
Le set etant implemente comme un hash table, en moyenne un in dans un set est en O(1).
Cela dit mon implementation etant presque instantanee je n'ai rien eu a faire pour la partie 2.
Excusez l'absence d'accents dans mes commentaires, j'habite en Australie et n'ai pas de clavier francais sous la main.
# ready, set, python
Posté par steph1978 . Évalué à 4. Dernière modification le 23 décembre 2022 à 18:15.
Pas si difficile aujourd'hui mais j'ai butté sur à peut prêt toutes les instructions
- ah si un elf peut bouger partout alors il ne bouge pas ?!
- ah les directions changent a chaque tour ?!
- mais qu'est ce qu'il se passe au bord ?
- ah la grille est infinie ?!
Ce dernier point m'a contraint à changer ma conception : d'une matrice à un set. Moins sympa pour débuguer mais nécessaire quand on ne connaît pas les limites du jeu. Finalement un code plus simple car pas de gestion de dépassement, et utilisation des fonctions de set (appartenance, union, différences) et des list comprehension un peu partout. Et accessoirement beaucoup plus rapide : 1025 round en 8s pour le tout.
python, 60 loc
[^] # Re: ready, set, python
Posté par steph1978 . Évalué à 5.
En image
J'arrive pas à comprendre en partant de l'input et de règles pourquoi ça se propage pas uniformément mais privilégie la direction en bas à droite.
# Dans l'ensemble, c'est plus simple que l'an dernier
Posté par syj . Évalué à 2.
Dans l'ensemble, ils sont tous beaucoup plus simple que l'an dernier.
Environ 1h40 après 12h de voiture + ma crève qui ne me lâche pas, on va dire que çà aurait pu être pire.
Dans l'ensemble , il n'y a rien de compliqué aujourd'hui. Il faut juste conserver à l'esprit toutes les petites règles qui ne sont pas flag en gras dans la description.
Résultat, j'ai perdu 30min à comprendre que quand il n'y a pas d'Elf autour. Il ne bouge pas.
La deuxième partie, elle ne rajoute rien de dur, je m'attendais à une règle genre distance, ou un truc qui faisait exploser la volumétrie.
Mais non rien, j'ai juste lancé mon programme pas du tout optimisé en me disant il va falloir que je trouve une opti.
Je n'ai pas eu le temps de finir d'écrire la première opti que j'avais déjà la solution.
1min20 pour 1014 round
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.