Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#2 Re : Café mathématique » À l'intention de l'administrateur. » 07-02-2026 15:57:57

[suite du précédent]

Retour complet sur mon précédent message. En résumé :

  • Il n’existe pas aujourd’hui de convertisseur FluxBB > phpBB 3.3 prêt à l’emploi.

  • Les outils qui existaient sont soit morts, soit obsolètes.

  • La migration est possible, mais requiert la création du script ou une chaîne de conversion en plusieurs étapes.

  • Les sources officielles le confirment (section convertisseurs phpBB, absence d’outil listé).

Morale de l'histoire : toujours se méfier de ce que racontent les IA, dont les sources d'information peuvent être obsolètes sans qu'elles le sachent puisque la mise à jour des dites sources n'a jamais été effectuée. Par exemple, la dernière version du convertisseur FluxBB > phpBB 3.x dont j'ai parlé plus haut date d'entre 11 et 15 ans, donc antérieurement à la sortie de phpBB 3.0 en 2015. Il relève des obligations de l'humain de rafraîchir la mémoire de l'IA, parce qu'elle ne le fera pas de sa propre initiative.

#3 Re : Café mathématique » À l'intention de l'administrateur. » 07-02-2026 14:40:27

[suite du précédent]

Bonne nouvelle ! Je n'y croyais pas mais j'ai quand même posé la question à ChatGPT : est-il possible d'opérer la migration d'une base de données de FluxBB vers un forum phpBB 3.3 ?

Je résume la réponse à ce qui peut intéresser tout le monde, parce que pour les aspects techniques c'est Fred qui devra poser lui-même la question à l'IA :

  • Ton doute est logique [migration impossible] mais pas fondé.

  • FluxBB → phpBB est une migration connue, faisable et déjà pratiquée, précisément via une reconstruction de la base, pas une conversion “magique”.

  • On ne « convertit » jamais la base FluxBB vers phpBB. On recrée une base phpBB neuve, puis on importe les données FluxBB dedans. C’est exactement ce que phpBB appelle un convertisseur.

  • Convertisseur FluxBB → phpBB : script officiel / communautaire ; lit la base FluxBB ; mappe les données vers phpBB ; les catégories/forums, membres, sujets, messages, permissions, bbcodes, mots de passe, sont conservés à l'identique.

  • Ce genre de migration a été fait sur des forums comptant des dizaines / centaines de milliers de messages, sans perte de contenu.

  • Conclusion : "La migration FluxBB → phpBB 3.3 n’est pas une conversion directe de la base, mais une reconstruction via un convertisseur éprouvé. Le contenu (comptes, messages, sujets) est récupérable sans demander aux membres de se réinscrire. Le vrai travail est surtout organisationnel, pas une impossibilité technique."

#4 Re : Café mathématique » À l'intention de l'administrateur. » 07-02-2026 14:06:18

Bonjour,

Avec un forum phpBB 3.x il aurait été facile de résoudre le problème. Avec FluxBB c'est beaucoup plus délicat, comme ChatGPT vient de me l'apprendre :

  • Pas de vrai système de groupes dynamiques “nouveaux utilisateurs”.

  • Pas de permissions fines par seuil de messages.

  • Pas de filtre natif “liens interdits avant X messages”.

  • Pas d’extensions modernes maintenues.

ChatGPT ajoute : "Les spammeurs humains adorent FluxBB pour ça.".

Il termine par

  • Oui, FluxBB est abandonné.

  • Oui, c’est une cible idéale pour le spam.

  • Non, il n’y a pas de solution propre et durable pour empêcher les liens par les nouveaux inscrits.

  • La seule vraie réponse long terme = changer de moteur [c'est-à-dire changer de type de forum].

Le problème majeur des forums lorsqu'il est question de migration vers une autre technologie c'est leur base de données. Il est quasi impossible de l'adapter au format du nouveau moteur. Peut-être qu'un programmeur PHP professionnel (si ça existe encore) pourrait concevoir un script capable de remplir la base du forum phpBB 3.3 (le nouveau) à partir des données du forum FluxBB (l'actuel). Je n'en suis pas certain, mais Fred peut toujours orienter ses recherches d'une solution dans ce sens.

Pour ce qui est de la sauvegarde de la base de données pour parer à une éventuelle perte, la meilleure solution est un hébergeur qui effectue une sauvegarde quotidienne des bases de données de ses clients. Chez OVH, par exemple, on dispose des 30 sauvegardes effectuées quotidiennement au cours du dernier mois. Il est possible de restaurer l'une d'elles en quelques clics.

Bon courage !

#5 Re : Café mathématique » Sujet du BAC D 1980 en mathématiques » 12-12-2025 01:18:59

Fred84,

Ce serait sympa de préciser que jcs a déjà fourni une réponse à ta question : https://les-mathematiques.net/vanilla/d … nt_2551158

parce qu'on ne sait jamais, elle pourrait intéresser quelqu'un d'autre. :-)

PS : voir aussi le PDF posté par jean-éric plus bas dans la même page.

#6 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » 15 boules à classer » 27-11-2025 18:45:17

renèb a écrit :

Je vais essayer de comprendre l’algorithme employé.

Reprenons les sous-listes de mon précédent message : [[4,5,6], [1,2,3], [13,14,15], [7,8,9], [10,11,12]].

Imagine que tu aies 5 files d’attente, chacune devant un guichet.
Chaque file est déjà ordonnée : les personnes les plus petites (valeurs les plus faibles) sont en tête.

Exemple :
File A : [4, 5, 6]
File B : [1, 2, 3]
File C : [13, 14, 15]
etc.

Tu veux créer une seule file globale, du plus petit au plus grand, mais tu ne peux voir que la première personne de chaque file. Tu procèdes en posant 5 papiers sur une table, chacun indiquant la "taille" (la valeur) de la première personne de chaque file : 4, 1, 13, 7, 10. Parmi ces 5, la plus petite est 1 (file B[0]) $\rightarrow$ tu la déplaces vers ta file finale. Puis tu remplaces le contenu de ce papier par la valeur de la personne suivante dans la même file (file B[1] = 2). Ensuite tu répètes :

  • Regarder les 5 premiers (bien sûr, seulement ceux encore actifs),

  • Prendre le plus petit,

  • L'ajouter à la file finale puis le remplacer par le suivant dans sa file (s’il en reste).

Le tas ( heapq ) fait ça automatiquement : il garde toujours le plus petit élément accessible sur le dessus, et se réorganise à chaque ajout/retrait.

Maintenant tu vas me demander ce qu'est un tas et comment il s'organise. Ou plus précisément, qu'est-ce qu'un tas min ( min-heap ) ?  Un tas min est une structure de données qui stocke des éléments de façon organisée, avec une seule règle stricte : l’élément le plus petit est toujours "en haut" (sur le dessus), ce qui permet de le récupérer instantanément. Mais contrairement à une liste triée, tout le reste n’est pas entièrement ordonné ; seule la position du minimum est garantie, ce qui veut dire que le tas min est suffisamment organisé pour que le minimum soit toujours au sommet.

Dire que "le tas se réorganise automatiquement" signifie qu'à chaque ajout ou retrait, il réajuste ses éléments en coulisses pour que le plus petit soit toujours le premier disponible, sans que toi tu aies à trier quoi que ce soit. C'est la raison pour laquelle on utilise la librairie heapq. Tout ce qu'elle fait n'est pas public, ce que tu vois de l'algorithme ne suffirait pas à effectuer le tri. Si tu veux savoir comment min-heap procède – ou si tu veux en créer une implémentation personnelle – tu dois chercher des explications sur ce qu'il fait exactement.

#7 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » Comment trouver la boule la plus lourde ? » 26-11-2025 13:14:24

Bonjour,

Une poutre d’équilibre désigne un appareil de gymnastique (la longue poutre sur laquelle on marche et exécute des figures). L'appareil utilisé pour comparer deux masses est tout simplement une balance.

#8 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » 15 boules à classer » 20-11-2025 15:23:24

Bonjour,

Je n'ai pas tout lu mais je suppose que le problème revient à utiliser l'algorithme de file d'attente de tas (ou de file d'attente prioritaire) pour réunir 5 sous-listes de 3 entiers triés en une liste unique triée. On obtient le résultat en 15 itérations :

import heapq

sous_listes = [[4,5,6], [1,2,3], [13,14,15], [7,8,9], [10,11,12]]

# Initialisation du tas : (valeur, index_liste, index_element)
heap = []
for i, sous_liste in enumerate(sous_listes):
    if sous_liste:  # s'assurer qu'elle n'est pas vide
        heapq.heappush(heap, (sous_liste[0], i, 0))

resultat = []
while heap:
    valeur, i, j = heapq.heappop(heap)
    resultat.append(valeur)
    # Si la sous-liste a un prochain élément
    if j + 1 < len(sous_listes[i]):
        heapq.heappush(heap, (sous_listes[i][j + 1], i, j + 1))

print(resultat)   # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

Chercher de la documentation en français sur cet algorithme n'est pas chose aisée (c'est sans doute une question de prompt), mais on en trouve en anglais.

#9 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » Le chocolat caché » 16-11-2025 02:06:20

Roro a écrit :

Si tu fais allusion au 10-10 dans la suite évoquée alors c'est que tu n'as pas compris ce qu'il expliquait...

Bonjour Roro,

Oui, c'est bien de ça dont je parlais. Ce n'est pas un défaut de compréhension, c'est que j'avais tout simplement lu le commentaire de Ernst en diagonale, et ce 10 10 me semblant rédhibitoire je ne suis pas allé plus loin.

#10 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » Le chocolat caché » 15-11-2025 12:59:32

Fred a écrit :

... le soir, en rentrant du travail, vous déplacez le chocolat dans une boite adjacente.

Ernst a écrit :

... avec la stratégie 2-3-4-5-6-7-8-9-10-10-9-8-7-6-5-4-3-2 ...

Cherchez l'erreur.

#11 Re : Café mathématique » Collatz - Besoin d'explications » 10-11-2025 17:29:43

@lamexstyle,

J'ai expliqué à ChatGPT que $3 \, D-1$ revient à effectuer une division par 2 de $3\,y+1$, qu'il faut ensuite corriger par

$(3 D-1) \, 2^{1-u}=\dfrac{3\,y+1}{2} \times \dfrac{2}{2^u}=\dfrac{3\,y+1}{2^u}$

c'est-à-dire la forme canonique du successeur impair $y_{i+1}$ du terme impair $y_i$ dans une suite de Collatz. Cette substitution n'a donc aucune utilité. Voici comment ChatGPT rectifie le tir :

--------------------------------------------------------
On veut introduire une nouvelle variable $D$ pour représenter un état équivalent, mais sans se retrouver à corriger ensuite les puissances de 2. Au lieu de définir $D=\frac{y+1}{2}$ (ce qui crée implicitement une division par 2), on définit simplement :

$D=y+1$

C’est une bijection entre les entiers impairs $y$ et les entiers pairs $D$.

On remplace $y=D−1$ dans la transformation :

$y_{i+1}=\dfrac{3\,(D-1)+1}{2^u}=\dfrac{3\,D-2}{2^u}$

Et voilà : aucune “demi-division” implicite, tout est clair.

Ex : $y=75,D=76,3D-2=226,u=1 \Rightarrow y_{i+1}=113$. C'est cohérent avec Collatz.

On peut écrire directement la relation entre deux D-valeurs successives :

$D_{i+1}=y_{i+1}+1=\dfrac{3\,D_i-2}{2^u}+1$

Cette formule est parfaitement cohérente, sans divisions implicites et sans facteur $2^{1-u}$ à "rétablir".
--------------------------------------------------------

Je ne vois pas à quoi elle peut servir, mais tu en fais ce que tu veux.

#12 Re : Café mathématique » Collatz - Besoin d'explications » 07-11-2025 17:35:59

Octonox a écrit :

J'ai bien peur que si tu lui demandes de définir les termes, ChatGPT ne s'amuse à t'en créer à chaque fois de nouveaux, et que l'on ne s'en sorte pas.

C'est le comportement typique d'une IA : elle n'a pas le droit de jeter l'éponge face à une problème qu'elle est incapable de résoudre, alors elle ajoute encore et encore des couches d'absurdités, jusqu'à ce que le client abandonne, comprenant que c'est sans espoir. Le moment arrive où l'IA, en auto-entretenant un narratif fallacieux, finit par perdre complètement de vue le problème originel et par halluciner dans chacune de ses réponses. En d'autres termes, plus elle accumule les erreurs, plus elle en crée de nouvelles. Dans ce cas il n'y a qu'une seule chose à faire : supprimer la conversation et en créer une nouvelle pour "réinitialiser" l'IA. Ou mieux, changer d'IA pour avoir un autre son de cloche. C'est ce que je conseille de faire à @lamexstyle.

Mais il ne faut pas non plus accabler l'IA de tous les maux. Beaucoup de gens (probablement la majorité) sont incapables de lui expliquer clairement le problème qu'ils lui demandent de solutionner, si bien que les réponses d'IA erronées sont probablement plus fréquentes qu'on ne le croit.

@lamexstyle,

Dans le panneau latéral gauche de ChatGPT tu peux cliquer sur "Explorer" pour obtenir une liste des GPTs, qui sont des "versions personnalisées de ChatGPT créées pour des usages spécifiques". En haut de la page figure un champ de recherche, dans lequel tu peux par exemple taper "maths". Je n'ai jamais essayé mais je pense que l'environnement sera plus propice à l'obtention de réponses sensées.

Dans le même panneau tu as également un lien nommé "Wolfram", qui fait bien sûr référence à Mathematica. Comme j'en possède moi-même une copie (version 12.1) je n'ai jamais testé ce lien, mais je pense que là encore tu obtiendras des réponses pertinentes à des problèmes spécifiques, en tout cas des réponses beaucoup plus fiables que celles de la version courante de ChatGPT. A titre d'exemple, voici ce que j'ai tapé dans Mathematica :

$T(y)=\dfrac{3\,y+1}{2^u}/.\,y\rightarrow2\,D-1//$FullSimplify

Ce qui signifie : "Remplacer $y$ par $2\,D-1$ dans l'expression qui précède, puis simplifier au maximum". La réponse a été ce que j'ai posté dans mon précédent message.

$T(y)=(3 D-1) \, 2^{1-u}$

ChatGPT ne te l'a pas proposé, sinon tu aurais compris une chose importante. Exemple numérique avec $y=13$ et $D=(13+1)/2=7$ :

Mathematica simplifie toujours un résultat avant de l'afficher. Ainsi, lorsqu'il tombe sur

$3\,D-1=20$, il affiche $2^2 \times 5$

et comme ensuite on multiplie par $2^{1-u}$, il calcule $2^{2+(1-u)}=2^{3-u}$, et affiche $5 \times 2^{3-u}$, où 5 est le successeur de 13 dans une suite de Collatz, obtenu après 3 divisions par 2 de $3 \times 13+1=40$.

Pour en revenir à ce qui précède, qu'aurais-tu donc compris ? De manière tout à fait empirique, en répétant les exemples numériques, que $3 \, D-1$ vaut la moitié de $3\,y+1$, autrement dit qu'il est égal à $\dfrac{3\,y+1}{2^1}$. C'est la définition même de la suite compressée : $3\,y+1$ étant par définition pair, il est divisible au moins une fois par 2 ; en effectuant systématiquement cette division on réduit de manière conséquente le nombre de termes de la suite.

Je reprends le changement de variable que tu as établi :

$D=(y+1)/2 \Rightarrow y=2D-1$

On veut démontrer que $3\,D-1=(3\,y+1)/2$ :

$\dfrac{3\,y+1}{2}=\dfrac{3\,(2\,D-1)+1}{2}$

On développe le numérateur :

$3\,(2\,D-1)+1=6\,D-3+1=6\,D-2$

Donc :

$\dfrac{3\,y+1}{2}=\dfrac{6\,D-2}{2}=3\,D-1$

Conclusion : au lieu de ce prétendu changement de variable propre à révolutionner le problème de Collatz, ChatGPT aurait dû te conseiller d'étudier les suites compressées. Au moins tu n'aurais pas perdu ton temps.

#13 Re : Café mathématique » Collatz - Besoin d'explications » 06-11-2025 13:23:46

On recommence.

$T(y)=\dfrac{3\,y+1}{2^{\nu_2(3y+1)}}$ , que je préfère noter $\dfrac{3\,y+1}{2^u} \quad y$ entier impair $\quad (1)$

$D=(y+1)/2 \Rightarrow y=2D-1$

$T(y)=\dfrac{3\,(2D-1)+1}{2^u}=(3 D-1) \, 2^{1-u} \quad (2)$

Exemple avec $y=13,D=7$ :

Dans (1) : $T(y)=5$ avec $u=3$ (on a divisé 3 fois par 2).

Dans (2) : $T(y)=5 \cdot 2^{3-u}$. La seule possibilité est $u=3$, sinon $T(y)$ serait pair aussi longtemps que l'exposant est >= 0.

On s'attendait bien sûr à obtenir le même résultat, mais ce qui change est que dans (2) on n'a pas besoin de compter le nombre de divisions par 2, l'exposant de 2 nous le donne.

Essayons avec $y=53,D=27$ :

Dans (1) : $T(y)=5$ avec $u=5$

Dans (2) : $T(y)=5 \cdot 2^{5-u}$

Maintenant avec $y=149,D=75$ :

Dans (1) : $T(y)=7$ avec $u=6$

Dans (2) : $T(y)=7 \cdot 2^{6-u}$

C'est un résultat très intéressant. Il faudrait voir si on trouve des contre-exemples.

#14 Re : Café mathématique » Collatz - Besoin d'explications » 05-11-2025 18:08:16

lamexstyle a écrit :

J’ai donc esquissé différentes représentations des nombres de Collatz. En voulant formaliser l’une d’entre elle, j’aurais mis en évidence certaines relations mathématiques. En demandant à l’IA ce que ces relations pouvaient avoir comme conséquence, il m’a proposé quelques plans d’action.

Tu écris

$T(y)=\dfrac{3y+1}{2^{\nu_2(3y+1)}}$

Dans le contexte de Collatz on s'attend à ce que $T(y)$ soit le successeur impair de $y$ impair. Pas du tout ! Comme $y=2D-1$ et que $D$ est un terme impair dans une suite de Collatz (d'ailleurs les termes pairs n'ont rien à faire dans ton tableau), $T(y)$, dont la forme est celle du successeur impair de $y$, n'est plus du tout celui de $D$.

A la fin tu écris

$T(y)=\mathrm{oddize}(3D-1)$

Dans une suite impaire de Collatz on obtient les termes impairs successifs $D_0,D_1,D_2,...$ en calculant $D_{i+1}=\dfrac{3D_i + 1}{2^{\nu_2(3D_i+1)}}$. Toi tu aboutis à la conclusion que $D_{i+1}=\dfrac{3D_i-1}{2^{\nu_2(3D_i-1)}}$. Difficile dans ces conditions d'obtenir une suite de Collatz qui ne parte pas en vrille dès les premiers termes !

Si dès le départ tu avais écrit $T(D)=\dfrac{3D+1}{2^{\nu_2(3D+1)}}$ , l'IA ne se serait pas plantée. Quand tu poses une question à une IA tu dois lui fournir le contexte le plus précis possible, parce qu'elle pondra toujours ce qui dans sa "représentation du problème" répond le mieux à ta question. Conséquence : description et/ou données fausses ou confuses = solution fausse. Ce n'est pas la faute de l'IA.

Pourrais-tu expliquer à quelles représentations des nombres de Collatz tu fais allusion, ainsi que les relations mathématiques que tu as mises en évidence ?

#15 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » $56$ divise $n$ » 05-11-2025 00:29:21

Fred a écrit :

[Edit Fred] Message supprimé car sans rapport avec la question posée.[/edit]

Quelques principes de droit public :

  • Le droit à la défense : toute personne accusée publiquement a le droit fondamental à la défense, c’est-à-dire à demander que des preuves soient produites ou examinées pour réfuter des accusations, que ce soit lors d'une procédure judiciaire ou dans le cadre d'une accusation publique informelle.

  • Le droit de réponse (droit de réplique ou rectification publique) : dans certains contextes médiatiques ou publics (presse, médias), la personne mise en cause publiquement peut exiger qu’une réponse soit publiée dans le même espace pour apporter ses propres éléments ou version des faits. Ce droit vise à rétablir la vérité devant le même auditoire.

#16 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » $56$ divise $n$ » 04-11-2025 18:07:43

[Edit Fred] Message supprimé car sans rapport avec la question posée.[/edit]

#17 Re : Café mathématique » Automate de Collatz » 04-11-2025 02:23:20

@lamexstyle,

Page précédente j'ai mentionné comment calculer les prédécesseurs $p_i$ impairs du terme $n$ impair d'une suite de Collatz, où $p_0$ est le plus petit d'entre eux. Je reviens dessus pour l'expliquer autrement que par du code Python :

$u=3 - n \; \mathrm{mod} \; 3$

Si $u=3$ alors $n$ est un multiple de 3 : on abandonne.

$p_0= \dfrac{n \cdot 2^u - 1}{3}$

Les $p$ suivants sont obtenus par récurrence :

$p_i = 4 \; p_{i-1} + 1$

Pour reprendre l'exemple de $n=5$ on a :

$u=3 - 5 \; \mathrm{mod} \; 3=1$

$p_0= \dfrac{5 \cdot 2^1 - 1}{3}=3$

$p_1=4 \cdot 3+1=13$
$p_2=4 \cdot 13+1=53$
$p_3=4 \cdot 53+1=213$
etc.

Mais on peut également procéder comme suit, où $u$ est incrémenté de 2 à chaque itération afin de conserver sa parité :

$p_i = \dfrac{n \cdot 2^{\,u + 2i} - 1}{3}, \qquad i = 0, 1, 2, \dots$

#18 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » Les dates surprenantes ! » 03-11-2025 17:52:19

Visualisation

  • Histogramme du nombre d'années (en ordonnée) comptant le nombre de dates surprenantes sur un an (en abscisse), de l'an 1 à l'an 9999. Le maximum est de 33 dates sur 1 an. Environ 75 % des années n'en comptent aucune.

  • Graphique à barres du nombre de dates surprenantes par siècle, du 1er au 99ème.

  • Fichier Excel contenant les données du graphique à barres.

#19 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » Les dates surprenantes ! » 03-11-2025 01:27:17

Belle performance, mais personnellement je préfère le code proposé par Mistral. Il me paraît plus "humain", on peut le lire et le comprendre comme de la prose. Ton truc non, il me fait penser à ces robots pathétiques programmés pour faire croire qu'ils sont comme nous, alors qu'en réalité ils sont froids comme la mort.

#20 Re : Café mathématique » Automate de Collatz » 02-11-2025 19:03:44

lamexstyle a écrit :

J'ai clairement expliqué qu'avec n négatif, pour trouver un impair plus petit ayant le même lien, il ne fallait pas dépasser la borne.

Je suppose que ce que tu nommes "un impair positif plus petit ayant le même lien" est un entier plus petit que 3, par exemple, mais qui a le même successeur que lui (5). Ça signifierait que $L_{3, -1}=1/2$ n'est pas un prédécesseur de 5, pas plus que ne l'est un quelconque nombre rationnel obtenu avec $n<0$, mais qu'il existe quand même un entier plus petit que 3 et prédécesseur de 5, sans qu'on sache encore à quoi il ressemble. C'est bien ça ? Je ne me paie pas ta tête, il se trouve seulement que je ne comprends rien à ce dont tu parles. Tout ce que je vois est que $L_{r,n}$ renvoie des résultats erronés et que tu le nies.

#21 Re : Café mathématique » Automate de Collatz » 02-11-2025 17:39:56

Je t'ai déjà répondu page précédente : tu découvres des prédécesseurs à 3 alors qu'il n'en a aucun. Ou plutôt, ta formule
$$\textbf{Fratrie} : L_{r,n}=\dfrac{(3\,r+1)\,4^n-1}{3}$$
lui en trouve. A partir de ce constat, quel lien pourrait-il exister avec l'automate ?

#22 Re : Café mathématique » Automate de Collatz » 02-11-2025 17:05:15

Je ne voudrais pas jouer les trouble-fête mais je trouve que vos débats n'ont plus de lien que lointain avec le problème $3n+1$. Mais aussi avec l'automate de Collatz, sujet de ce fil.

#23 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » Les dates surprenantes ! » 02-11-2025 16:54:54

En termes de temps d'exécution, et en utilisant le précalcul + masques binaires, il semblerait que ce soit finalement Qwen qui ait la plus grosse. A cette échelle de temps le résultat est quelque peu fluctuant, mais il se situe entre 0.016 et 0.033 s. Par rapport aux 0.6 s de l'approche naïve, c'est vraiment impressionnant !

J'ai ensuite posé la question suivante à DeepSeek, GPT-5, Gemini et Mistral :

"Sur un forum j'ai été confronté au problème suivant : entre l'an 1000 et l'an 9999, quelles sont les dates au format 'jj.mm.aaaa' dont tous les chiffres sont distincts ? Il existe une approche naïve, qui consiste à parcourir les 9000 * 365 dates en convertissant chacune d'elles en set() puis en calculant sa longueur, mais en existe-t-il une autre plus efficiente ? Quelle devrait être la méthodologie mise en œuvre pour accélérer ce calcul ?"

DeepSeek a répondu la même chose que Qwen au début, et je n'ai pas insisté car il s'accrochait à sa solution. GPT-5 aussi, mais à mon grand étonnement, après lui avoir demandé s'il n'existait pas une approche du problème qui réduirait les 12 s d'exécution de sa solution, il a répondu : "Le truc qui change tout : représenter les chiffres par un bitmask (10 bits pour 0–9) et pré-filtrer les combinaisons (mois, jour) avec chiffres uniques, puis les croiser avec les années à chiffres uniques. Les tests d’“intersection de chiffres” deviennent alors de simples & binaires". Et son code s'exécutait en 0.067 s !

Gemini n'est pas tombé dans le piège de l'approche naïve mais m'a immédiatement proposé une solution consistant à identifier d'abord toutes les séquences de 8 chiffres distincts pouvant produire des dates valides. Son code, distinct de celui de Qwen (le second), parvient à trouver les 48 600 dates en 1.8 s, soit 3 fois plus que la méthode naïve. Je ne l'ai pas poussé plus loin.

Et enfin Mistral. C'est lui qui m'a le plus étonné. Son approche peut toujours être qualifiée de naïve mais elle se distingue néanmoins des autres, et il parvient à trouver les 48 600 dates en 0.324 s, ce qui selon mes critères est un excellent résultat, le tout dans un code très compact. D'ailleurs je le joins ci-dessous. Morale de l'histoire : ne jamais préjuger d'une IA (comme moi de GPT-5) mais s'en faire une idée au cas par cas. En tout cas, en matière de programmation web je trouve GPT-5 trop brouillon et lui préfère Qwen :

# Mistral

import time

def est_bissextile(annee):
    return (annee % 400 == 0) or (annee % 100 != 0 and annee % 4 == 0)

def jours_dans_mois(mois, annee):
    if mois == 2:
        return 29 if est_bissextile(annee) else 28
    elif mois in [4, 6, 9, 11]:
        return 30
    else:
        return 31

compteur = 0
t0 = time.time()
for aaaa in range(1000, 10000):
    annee_chiffres = set(str(aaaa))
    if len(annee_chiffres) != 4:
        continue  # Année invalide (chiffres répétés)
    for mm in range(1, 13):
        mois_chiffres = set(str(mm).zfill(2))
        if len(mois_chiffres) != 2 or not mois_chiffres.isdisjoint(annee_chiffres):
            continue  # Mois invalide
        max_jj = jours_dans_mois(mm, aaaa)
        for jj in range(1, max_jj + 1):
            jour_chiffres = set(str(jj).zfill(2))
            if len(jour_chiffres) != 2 or not jour_chiffres.isdisjoint(mois_chiffres | annee_chiffres):
                continue  # Jour invalide
            compteur += 1

print(f"⏱️  Calcul effectué en {time.time() - t0:.3f} secondes")
print(f"Nombre total de dates valides : {compteur}")

#24 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » Les dates surprenantes ! » 01-11-2025 16:29:20

Ernst a écrit :

... on passe à 0.036 s, yé !

Oui Ernst, c'est toi qui a la plus grosse.

[j'ai retiré ce passage, que je trouvais finalement débile]

#25 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » Les dates surprenantes ! » 01-11-2025 13:41:19

@Ernst,

Bravo pour l'efficacité de ton code (ou celui de chatGPT, ce qui m'étonnerait fortement parce qu'il ne correspond pas à son style). Temps d'exécution : 0,037 s pour obtenir le même résultat que le mien, à savoir 48 600 dates valides trouvées en 0,6 s.

Un reproche cependant : tu calcules les dates à partir de l'an 1. Or, aucune date jusqu'à l'an 1000 ne peut satisfaire aux exigences de l'énoncé, à savoir des dates de 8 chiffres. Tu compenses en ajoutant des zéros (comme l'année 0042), mais ça rend la découverte de dates valides d'autant plus improbables. C'est du reste la raison pour laquelle tu obtiens le même résultat que le mien : ton script n'a trouvé aucune date valide avant l'an 1000.

Pied de page des forums