En tenant compte de la forme du graphe, j'utilise uniquement la théorie des sets et je descends à 17ms. Et même à 4ms si je coupe à la première occurrence.
Posté par steph1978 .
En réponse au journal Advent of code 2024.
Évalué à 3.
Dernière modification le 23 décembre 2024 à 14:22.
Je parle pas de la partie 1, plutôt triviale.
Pour la partie 2, j'ai voulu ne pas succomber à la tentation d'utiliser d'une bibliothèque logicielle de graphes, genre Networkx.
J'ai implémenté un truc très peu optimal, rendu possible que par l'ajout d'un cache pour ne par ré-explorer un sous graphe en arrivant par un autre de ses noeuds.
J'ai perdu beaucoup trop de temps à chercher un bug qui n'existait pas car j'avais juste pas fait attention qu'il fallait séparer les noms des neouds par des virgules dans la réponse :/
Au final, 36s en python ; pas vraiment d'amélioration en compilant - 30s ; parce que ce n'est pas très calculatoire, juste très grand à explorer.
En corrigeant une petite bourde et en compilant le code, je descends à 33ms pour les deux parties.
Mais je suis bien tenté d'essayer d'implémenter ton algo …
J étais un peu déçu car je m attendais à une deuxième bien plus complexe
Je me suis fait la même réflexion : est-ce qu'il n'espérait pas que la partie 2 ne soit pas brute forçable mais en fait avec une pc un peut violent et en compilant le code, ça passe.
Il n'y a qu'une seule ligne intéressante : la fonction récursive.
En gros : pour une chaîne, si on trouve un préfixe valide, on refait un appel avec la chaîne amputée du préfixe. Si on arrive à une chaîne vide, on a pu faire le pattern demandé, sinon, non (la somme d'un générateur vide vaut 0).
Pour s'en convaincre, il faut regarder les différents cas.
si la chaîne est vide, elle peut trivialement être réalisée avec n’importe quelle règle (retourne Vrai ou 1)
si la chaîne ne commence par aucune des règles, elle ne peut pas être réalisé (retour Faux ou 0)
si plusieurs règles constituent un préfixe de la chaîne, il faut examiner toutes les pistes pour construire la sous-chaîne et sommer ces possibilités.
La combinatoire explosant très vite, on met les résultats en cache pour pouvoir les réutiliser. Plus la chaîne est petite, plus le cache fera effet, c'est à dire en bout de chaîne ; dans l'exemple "gbr" est réalisé de trois façons différente ("g-b-r","gb-r", "g-br") ; on met en cache "bgbr" -> 3 et on a plus à le recalculer.
Pour "rrbgbr", on sait qu'on peut faire "rrb" de deux façons ("r-rb" ou "r-r-b"), on a donc 3+3=6 façons de faire la chaîne complete. Plus on avance dans l'exercice, plus on a des bouts réutilisables.
Dans mon cas, il y a 841E12 branches valides ce qui serait impossible à explorer ; mais avec le cache, seulement 53E3 appels à f et 18E3 entrées dans le cache.
Et pour se construire un environnement de dev par projet, je conseille asdf, quelque soit le langage. À combiner avec un virtualenv en ce qui concerne python.
Si c'est pour exécuter, il est tout à fait possible (contrairement aux FUD "inexactitudes" régulièrement diffusées par les fanboys utilisateurs d'autres langages) de construire un exécutable python.
Pour ma part, j'utilise PyInstaller. Avec un exemple ici qui construit un exécutable autonome pour visidata.
Si c'est pour intégrer dans un autre projet alors il faut packager pour pypi.org, de manière à ce que les utilisateurs puissent faire un pip install ma_belle_bibliotheque_logicielle. Avec un exemple ici qui est une ligne de commande pour lufi. En particulier regarder le contenu des fichier "setup.py" et "publish.sh".
Cyber : Le terme réfère à une abstraction englobante et multidisciplinaire des concepts et usages relatifs aux technologies informatiques
Donc oui on peut employer ce préfixe.
Ce qui me gène dans "cyber attaque" ce n'est pas uniquement la sémantique, mais aussi que ce terme est monté en épingle par les medias (les fameux chinois du FBI) et réutilisé par les politiques pour dire "vous voyer tous ces terroristes en puissance sur internet" et justifier la surveillance générale et par défaut.
Donc le terme "vol de données" me paraît plus mesuré.
J'ai plutôt l'impression qu'on atteint les limites de cette technologie et que la suite n'est pas près de venir. Analyse parfaitement subjective entièrement basée sur le doigt mouillé™
On peut jouer sur les mots mais si le gars avait les accès, qu'il a dumpé la DB et est parti avec, je ne qualifierai pas ça d'une cyber attaque. C'est une fuite de données ; cela doit inquiéter la sécurité qui doit prendre des mesures pour que cela ne puisse pas se reproduire mais ce n'est pas une "attaque".
Si on va par là, si ton gamin pique un billet dans ton porte feuille, tu subis quoi ? un braquage ?
[^] # Re: Jour 25
Posté par steph1978 . En réponse au journal Advent of code 2024. Évalué à 2.
Le problème étant très simple aujourd'hui, je me suis permis une résolution en C pour tenter de faire de la perf.
Mais j'arrive péniblement à 2ms.
En même temps pour seulement lire chaque caractère de l'input (inlined), ça prend déjà 520µs ; du coup, je vois pas trop quoi améliorer …
[^] # Re: Debian ne pip plus ?
Posté par steph1978 . En réponse au journal La galère de Python en déploiement. Évalué à 6.
La bonne pratique est de toujours créer un virtualenv pour un projet.
On utilise pas le profile user et surtout pas le profile du système.
[^] # Re: jour 23 - cracra
Posté par steph1978 . En réponse au journal Advent of code 2024. Évalué à 4.
En tenant compte de la forme du graphe, j'utilise uniquement la théorie des sets et je descends à 17ms. Et même à 4ms si je coupe à la première occurrence.
Je sais il est tard mais bon je pouvais pas rester avec un prod aussi lent.
# jour 23 - cracra
Posté par steph1978 . En réponse au journal Advent of code 2024. Évalué à 3. Dernière modification le 23 décembre 2024 à 14:22.
Je parle pas de la partie 1, plutôt triviale.
Pour la partie 2, j'ai voulu ne pas succomber à la tentation d'utiliser d'une bibliothèque logicielle de graphes, genre Networkx.
J'ai implémenté un truc très peu optimal, rendu possible que par l'ajout d'un cache pour ne par ré-explorer un sous graphe en arrivant par un autre de ses noeuds.
J'ai perdu beaucoup trop de temps à chercher un bug qui n'existait pas car j'avais juste pas fait attention qu'il fallait séparer les noms des neouds par des virgules dans la réponse :/
Au final, 36s en python ; pas vraiment d'amélioration en compilant - 30s ; parce que ce n'est pas très calculatoire, juste très grand à explorer.
[^] # Re: jour 19 - on souffle
Posté par steph1978 . En réponse au journal Advent of code 2024. Évalué à 5.
En corrigeant une petite bourde et en compilant le code, je descends à 33ms pour les deux parties.
Mais je suis bien tenté d'essayer d'implémenter ton algo …
[^] # Re: 18ème jour
Posté par steph1978 . En réponse au journal Advent of code 2024. Évalué à 4.
Je me suis fait la même réflexion : est-ce qu'il n'espérait pas que la partie 2 ne soit pas brute forçable mais en fait avec une pc un peut violent et en compilant le code, ça passe.
# jour 19 - on souffle
Posté par steph1978 . En réponse au journal Advent of code 2024. Évalué à 4.
Cela faisait longtemps que la solution ne tenait plus en quelques lignes, et que la partie 2 ne pétait pas complètement la partie 1.
Aujourd'hui, avec du récursif et du cache, ça tient en 4 lignes.
Il n'y a qu'une seule ligne intéressante : la fonction récursive.
En gros : pour une chaîne, si on trouve un préfixe valide, on refait un appel avec la chaîne amputée du préfixe. Si on arrive à une chaîne vide, on a pu faire le pattern demandé, sinon, non (la somme d'un générateur vide vaut 0).
Pour s'en convaincre, il faut regarder les différents cas.
La combinatoire explosant très vite, on met les résultats en cache pour pouvoir les réutiliser. Plus la chaîne est petite, plus le cache fera effet, c'est à dire en bout de chaîne ; dans l'exemple "gbr" est réalisé de trois façons différente ("g-b-r","gb-r", "g-br") ; on met en cache "bgbr" -> 3 et on a plus à le recalculer.
Pour "rrbgbr", on sait qu'on peut faire "rrb" de deux façons ("r-rb" ou "r-r-b"), on a donc 3+3=6 façons de faire la chaîne complete. Plus on avance dans l'exercice, plus on a des bouts réutilisables.
Dans mon cas, il y a 841E12 branches valides ce qui serait impossible à explorer ; mais avec le cache, seulement 53E3 appels à f et 18E3 entrées dans le cache.
# trop bien
Posté par steph1978 . En réponse au message J'ai créé une visualisation et une description interactive d'iptables. Évalué à 3.
ça mérite un journal
# gitlab
Posté par steph1978 . En réponse au message solution wiki basée sur repo Git. Évalué à 2.
Un wiki gitlab est un repo git.
git clone git@mongitlab.net:monorg/monprojet.wiki.git
# pertes
Posté par steph1978 . En réponse au lien Tumblr to move its half a billion blogs to WordPress. Évalué à 3.
3M de blog, 30M$ de perte. 10$/blog/an ; ça me parait vraiment beaucoup.
Surtout que j'imagine qu'ils mettent de la pub et que donc ça peut rapporter.
[^] # Re: Utiliser = exécuter ou intégrer ?
Posté par steph1978 . En réponse au message Livrer un environnement Python. Évalué à 4.
Et pour se construire un environnement de dev par projet, je conseille asdf, quelque soit le langage. À combiner avec un virtualenv en ce qui concerne python.
# Utiliser = exécuter ou intégrer ?
Posté par steph1978 . En réponse au message Livrer un environnement Python. Évalué à 4. Dernière modification le 17 décembre 2024 à 13:08.
Si c'est pour exécuter, il est tout à fait possible (contrairement aux
FUD"inexactitudes" régulièrement diffusées par lesfanboysutilisateurs d'autres langages) de construire un exécutable python.Pour ma part, j'utilise PyInstaller. Avec un exemple ici qui construit un exécutable autonome pour visidata.
Si c'est pour intégrer dans un autre projet alors il faut packager pour pypi.org, de manière à ce que les utilisateurs puissent faire un
pip install ma_belle_bibliotheque_logicielle
. Avec un exemple ici qui est une ligne de commande pour lufi. En particulier regarder le contenu des fichier "setup.py" et "publish.sh".[^] # Re: Blog
Posté par steph1978 . En réponse au lien En finir avec Doctolib. Évalué à 5.
Apple et Meta ne font pas de cloud publique mais tu peux ajouter alibaba, oracle, ibm, lidl.
Mais j'adore l'image des likes et des shorts.
# si on peut pas jouer
Posté par steph1978 . En réponse au journal Sortie de Bim! en version 3 pour les fêtes. Évalué à 3.
c'est qu'il n'y a personne en ligne ?
[^] # Re: jour 16
Posté par steph1978 . En réponse au journal Advent of code 2024. Évalué à 3.
Oui, en BFS, c'est pas rapide : 7s pour les deux parties.
# jour 16
Posté par steph1978 . En réponse au journal Advent of code 2024. Évalué à 4.
Un classic parcours de graphe, vive didi dijkstra.
[^] # Re: Il y a un truc qui me gène dans cet article ( définition d'une cyber-attaque)
Posté par steph1978 . En réponse au lien Ces petits éléments accréditent que la fuite de Free vient d'une complicité interne, depuis le début. Évalué à 3. Dernière modification le 14 décembre 2024 à 15:24.
Donc oui on peut employer ce préfixe.
Ce qui me gène dans "cyber attaque" ce n'est pas uniquement la sémantique, mais aussi que ce terme est monté en épingle par les medias (les fameux chinois du FBI) et réutilisé par les politiques pour dire "vous voyer tous ces terroristes en puissance sur internet" et justifier la surveillance générale et par défaut.
Donc le terme "vol de données" me paraît plus mesuré.
[^] # Re: J'avoue j'adore !
Posté par steph1978 . En réponse au lien Vidéo : Quand l'Intelligence Artificielle fabrique des bâtiments. Évalué à 2.
J'ai plutôt l'impression qu'on atteint les limites de cette technologie et que la suite n'est pas près de venir. Analyse parfaitement subjective entièrement basée sur le doigt mouillé™
[^] # Re: Il y a un truc qui me gène dans cet article ( définition d'une cyber-attaque)
Posté par steph1978 . En réponse au lien Ces petits éléments accréditent que la fuite de Free vient d'une complicité interne, depuis le début. Évalué à 1.
On peut jouer sur les mots mais si le gars avait les accès, qu'il a dumpé la DB et est parti avec, je ne qualifierai pas ça d'une cyber attaque. C'est une fuite de données ; cela doit inquiéter la sécurité qui doit prendre des mesures pour que cela ne puisse pas se reproduire mais ce n'est pas une "attaque".
Si on va par là, si ton gamin pique un billet dans ton porte feuille, tu subis quoi ? un braquage ?
[^] # Re: 13ème jour
Posté par steph1978 . En réponse au journal Advent of code 2024. Évalué à 4.
J'ai fait la première partie en brute force mais impossible pour la partie 2 alors j'ai aussi pivoté vers un solver (sympy).
[^] # Re: 12ème jour
Posté par steph1978 . En réponse au journal Advent of code 2024. Évalué à 2. Dernière modification le 13 décembre 2024 à 21:27.
En poussant fort en python, je suis descendu à
Mais en utilisant des set. L'idée d'utiliser le bit de poids fort est très habile.
[^] # Re: Toute ressemblance ...
Posté par steph1978 . En réponse au lien « DOGE » : la dernière pitrerie libertarienne d’Elon Musk . Évalué à 2.
Si tu confonds sarcasme et irrationalité, tu dois avoir beaucoup de faux positifs. Pas vraiment un super pouvoir alors…
[^] # Re: Résumé
Posté par steph1978 . En réponse au lien Un fabricant de figurines fait tomber itch.io. Évalué à 4.
En résumé, ils ont pris la grosse tête.
[^] # Re: 9ème jour
Posté par steph1978 . En réponse au journal Advent of code 2024. Évalué à 2.
Moi j'ai fait le bourrin, comme tous les jours depuis de début de ce calendrier, je crois :)
Pas contre comme c'est hyper calculatoire, il y a de gros gain en compilant le code, jit ou aot.
On est loin des µs quand même :/
# asciidoc + pandoc
Posté par steph1978 . En réponse au message Reformater un fichier asciidoc ?. Évalué à 2.
J'ai eu à faire ça.
Dis nous si tu aboutis à quelque chose.