On va pouvoir partir en expédition dans la jungle. Enfin, demain. Peut-être. Pour le moment, comme nous avons beaucoup d'expérience avec ces machins, les lutins nous ont refilé un transmetteur pété, il faut le réparer.
On va pouvoir partir en expédition dans la jungle. Enfin, demain. Peut-être. Pour le moment, comme nous avons beaucoup d'expérience avec ces machins, les lutins nous ont refilé un transmetteur pété, il faut le réparer.
# En Python
Posté par 🚲 Tanguy Ortolo (site web personnel) . Évalué à 4.
Le fait que mes fonctions mangent un itérable de chaînes vient des fonctions utilitaires que j'ai codées pour intégrer ça facilement. Ici, ça donne quelque chose d'un peu artificiel puisqu'il n'y a qu'une ligne à lire.
Je ne suis pas du tout satisfait par le fait de transformer à chaque fois un bout glissant de la chaîne d'entrée en un ensemble. J'aimerais bien faire quelque chose d'un peu mieux optimisé, mais je n'ai rien de probant en tête.
[^] # Re: En Python
Posté par alkino . Évalué à 2.
J'ai simplement fait un ring buffer :
[^] # Re: En Python
Posté par 🚲 Tanguy Ortolo (site web personnel) . Évalué à 3.
Ça n'optimise rien du tout, si ?
Je veux dire, nous avons tous deux la ligne entière en mémoire, mais là où j'en prends à chaque fois une tranche pour la convertir en ensemble et regarder sa longueur, tu enfonces un par un chacun de ses caractères dans une file à taille limitée, que tu convertis en ensemble pour regarder sa longueur.
Quoique, ça évite une copie de chaîne à chaque étape, c'est ça ? La file à taille limitée étant persistante et ne copiant qu'un caractère à chaque fois.
[^] # Re: En Python
Posté par Yth (Mastodon) . Évalué à 3.
Franchement, je ne fais pas mieux.
Toute optimisation semble compliquer terriblement le code.
Et vu la taille des données…
C'est quoi la citation à propos des optimisations trop tôt dans le code ? :)
[^] # Re: En Python
Posté par steph1978 . Évalué à 2.
Pas mieux
[^] # Re: En Python
Posté par steph1978 . Évalué à 4.
Ma première solution était à base de deque et n'utilisait pas set. L'idée étant que si tu as dédoublonné la fenêtre précédente, et tu as un nouveau caractère, seul celui-ci peu créer un doublon. Donc au lieu de tout dédoublonner (set), tu dédoublonnes que par rapport à ce nouveau caractère.
Voici:
Mais honnêtement, c'est bien plus compliqué pour pas grand chose.
Faudrait faire du profilage cpu et ram pour comparer mais sur la taille de mon input et avec la commande
time
, rien de visible. Et je crains que construire un set de 14 caractères ne soit pas plus coûteux que de manipuler la deque et et le filter.# un bout de AWK
Posté par steph1978 . Évalué à 4. Dernière modification le 06 décembre 2022 à 20:14.
Finalement une solution en AWK, pas si moche quand on a pas de "set".
# en Go
Posté par Colargol . Évalué à 2.
Je suis à la bourre, j'ai pris du retard sur le n°5. J'ai trouvé celui ci plus facile, solution en Go (fonction principale) :
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.