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).

#1 Re : Cryptographie » L'énigme du pouvoir magique » 30-01-2014 14:30:26

Cher LEG,

LEG a écrit :

Son problème , si il doit être résolu de façon mathématique , ou être transformé en math je pense qu'il fallait le préciser,

Le simple fait d'avoir été posté sur un forum de math dans la rubrique crypto devrait suffire, mais je suis complètement d'accord que quand on n'est pas familier avec la discipline, on peut se méprendre. Cependant, il a réalisé (post #18) que son énoncé pouvait être lu de travers et a ajouté (peut-être maladroitement) son intention.
C'est comme si quelqu'un postait un problème, qu'il y avait une solution triviale et qu'en lui faisant remarquer il corrigeait une erreur dans l'énoncé, le précédent énoncé est invalidé non pas par fourberie mais parce qu'il ne correspondait pas à son intention.

mais en soi, cela n'a aucune importance car si c'est impossible il reste les autres solutions....

Car ce n'est pas la peine de chercher des solutions ; qui ne conviennent pas après coup....

Non ! C'est comme si je postais dans la rubrique énigme en disant "J'ai un gâteau de densité uniforme aux formes bizarroïdes décrites ci-après [...], comment le découper au couteau en deux parties de masses égales" et que tu me répondais : "je coupe en deux, je les met sur une balance, puis je recoupe le plus gros morceau, etc ...". Aurais-je vraiment dû préciser que je voulais une solution mathématique ?

Et un résultat d'impossibilité théorique est très intéressant.

Ou alors que Gloumme redéfinisse exactement son problème....ce qu'il veut exactement.

Tu rajoutes "Existe-t-il un protocole cryptographique répondant au problème suivant" au début de son premier message et le tour est joué.

Quant au programmeur, j'ai bien dit: ils écrivent le programme ensemble donc pas de quatrième personne; et la big machine c'est un ordinateur commun avec leur trois mots de pass, afin de récupérer la solution...

Si tu veux vraiment débattre sur le problème pratique : Mais qui à fourni l'ordinateur ? Qui en est administrateur ?

protocole nucléaire

...

#2 Re : Cryptographie » L'énigme du pouvoir magique » 30-01-2014 02:04:41

Au passage,

Barbichu a écrit :

- Si X et Y (par exemple) décident de se faire confiance ils possèdent à eux deux la totalité de l'information, il n'y a alors pas de solution qui permette à Z d'avoir accès au pouvoir magique. Il faut donc supposer qu'ils se méfient l'un de l'autre et prouver qu'ils n'ont pas moyen de s'échanger l'information tous les deux sans avoir à communiquer de l'information à Z.

si X et Y s'allient (sans pour autant se faire confiance !), ils peuvent se mettre d'accord pour communiquer b' (un mot inventé) au lieu de b (leur secret commun), ainsi, si Z est honnête, il n'aura rien et X et Y auront le pouvoir.
(Cette attaque marche d'ailleurs sur la solution (non mathématique) de White et Tibo).

Supposer que deux personnes ne peuvent pas s'allier me semble être une hypothèse un peu forte...

#3 Re : Cryptographie » L'énigme du pouvoir magique » 30-01-2014 01:36:36

Cher LEG,

avant de poster ma réponse d'hier j'ai lu toutes les interventions précédentes dans cette discussion, et ... permet moi d'être en désaccord le plus total avec toi. Les solutions de White et Ribo n'ont absolument aucun intérêt mathématique (ce qui ne diminue en rien leurs capacités de stratèges), contrairement à ce que gloume cherche à avoir : une solution purement mathématique et donc physiquement inviolable.

post #18, gloume a écrit :

J'aimerais trouver une solution qui élimine toute possibilité de s'emparer des codes manquants par la force physique, et qui empêche l'échange si un ou plusieurs des acteurs mentent sur la nature ou la quantité des infos qu'ils possèdent.

D'où le choix de ce forum pour poser ma question... j'imaginais plutôt une solution qui se terminerait par quelque chose du genre: "... et à la fin on a construit un bloc chiffré, que chacun des 3 acteurs peut alors décrypter grâce à sa clé privée"

Nul besoin de te moquer (c'est ainsi que j'interprète le post #19) des rectifications apportées par l'auteur même du problème ! Ses contraintes sont loin d'être aberrantes et les résultats que l'on peut obtenir sont effectivement parfois surprenants, c'est ce qui fait la beauté de la cryptographie. Comme Fred, le problème de gloume m'évoque un problème célèbre (et surprenant) en crypto, mais un autre : celui des Protocoles Zero-Knowledge.

Si jamais tu as besoin d'arguments en faveur d'une solution mathématique, pose-toi les questions suivantes : à qui appartient ta "Big machine" et qui a écrit le compilateur Basic ? Les trois intervenants doivent-ils savoir programmer ? en assembleur ? qui a écrit le manuel ? Si j'invitais mes amis Y et Z à ma maison, avec la solution de White et Tibo, je pourrais avoir le pouvoir magique et ils n'auraient rien.

Non, une solution telle qu'attendu par gloume est censée être indépendante de telles contraintes physique et la seule différence entre un humain et une machine dans l'histoire est la puissance de calcul, qui doit rester limitée pour les opérations licites et hors-de-portée du plus grand super-calculateur du monde pour les opérations illicites.


Donc, disais-je, vu comme un problème de cryptographie, l'énoncé proposé par gloume me parait suffisamment bien spécifié et très intéressant. La réponse apportée n'est pas un programme (encore moins si on spécifie sur quel machine et avec quel langage) mais un protocole. Comme un algorithme, il s'agit d'une suite d'actions à effectuer, mais par plusieurs personnes.

Pour évaluer la correction d'un protocole, on suppose que tout le monde est honnête, et on vérifie mathématiquement que tout le monde à accès au savoir auquel il a droit.
Pour évaluer sa sûreté, on se met à la place d'un des intervenant du protocole, disons X, et on suppose que Y et Z (et la machine ou opérateur ou personne intermédiaire) sont malhonnêtes, et on essaye de prouver que le protocole garanti que Y et Z n'auront jamais l'accès à la connaissance de X. On doit aussi vérifier la sûreté pour Y et Z, (mais si le protocole est bien écrit, il sera probablement symétrique en X, Y et Z et on pourra se contenter de vérifier pour X).

Bien sûr tout problème n'admet pas forcement de protocole sûr comme solution, et je n'ai pour l'instant aucune assurance que le problème de gloume ait une solution. Par contre, je commence par le réduire (éliminer l'utilité de la quatrième personne) et faire des hypothèses supplémentaires assez naturelles sans lequel le problème n'a manifestement plus de solution.

Cordialement,

#4 Re : Cryptographie » L'énigme du pouvoir magique » 29-01-2014 02:42:33

Bonsoir,

j'ai quelques remarques :
- Si le quatrième interlocuteur est malhonnête, il peut décider de partager tout ses secrets avec l'un des participants. On peut donc supposer l'absence de cette personne extérieure.
- Si X et Y (par exemple) décident de se faire confiance ils possèdent à eux deux la totalité de l'information, il n'y a alors pas de solution qui permette à Z d'avoir accès au pouvoir magique. Il faut donc supposer qu'ils se méfient l'un de l'autre et prouver qu'ils n'ont pas moyen de s'échanger l'information tous les deux sans avoir à communiquer de l'information à Z.

Cordialement,

#5 Re : Entraide (supérieur) » isomorphisme de groupe » 29-01-2014 02:32:38

Bonsoir, un autre anneau principal classique est [tex]K[X][/tex] pour tout corps (commutatif) [tex]K[/tex].

#6 Re : Café mathématique » Doit-on assouplir les règles de BibM@th ? » 29-01-2014 01:25:01

Chers bibmatheux, chères bibmatheuses, bonne année et bonne santé.

Je repasse vite fait dépiler deux ou trois messages sur ce forum et voilà que je trouve une discussion envenimée. J'ai donc relu les règles du forum et je dois avouer qu'encore une fois je les trouve très bien car elle dédouanent les personnes qui aident, et leur permettent de ne pas perdre leur temps.

Cela étant dit, je n'y ai pas trouvé de règles contraignant les possibilités des gens qui répondent aux messages d'aide. Ceci fait que le post récent de totomm qui est à l'origine de ce fil de discussion ne va pas formellement contre les règles.
Bien sûr, son post, comme ceux de quelques autres auteurs, semblent parfois défier l'autorité en place en donnant des réponses à des gens qui ne respectent pas les règles, ce qui est mal vu, à raison.

Faut-il durcir les règles alors, pour en inclure quelques unes interdisant de telles interventions ? Je pense que non. Libre à n'importe qui de perdre son temps en répondant à quelqu'un qui ne repassera jamais. Et je pense que quelqu'un qui ne fait pas l'effort de chercher ne se sentira pas obligé juste parce que quelqu'un sur Bibmath lui a dit qu'il ne répondrait pas, il ira voir sur un autre forum où l'on balance les réponses sans se soucier de la pédagogie. Donc je ne vois pas d'autre mal que le défi de l'autorité en place.

Pour conclure, je pense que les règles sont bien comme elles sont et qu'un rappel comme ce thread est nécessaire de temps en temps pour rappeler aux intervenants pas très pédagogues l'esprit de ce forum.

Bien bibmatheusement,

#7 Re : Programmation » Système réducteur » 15-11-2013 22:05:59

Bonjour freddy,
j'ai passé quelques heures à réfléchir au problème et pour l'instant je ne trouve pas mieux que les solutions déjà postée (qui au passage ne donnent pas de garantie sur la minimalité de la solution). Je ne compte pas y réfléchir beaucoup plus car j'ai d'autres chats à fouetter, désolé.
A+

#8 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » Les épouses » 05-11-2013 21:49:00

Bonjour,

le Saint-Nectaire, très peu pour moi, mais soit je fais une erreur, soit il y en a une dans l'énoncé, soit ce problème est beaucoup plus compliqué qu'il n'y parait.
Voici une solution complète sous certaines hypothèses (notamment qu'il y a une typo dans l'énoncé, dans le cas contraire c'est un début de solution).

Texte caché

Quelqu'un ayant acheté [tex]x[/tex] S.N. payera un prix total de [tex]x^2[/tex] (prix en euros, sous entendu à partir de maintenant).

Soit [tex]x[/tex] le nombre de S.N. acheté par une femme donnée et [tex]y[/tex] celui acheté par son mari, on a la relation [tex]y^2 = 63 + x^2[/tex] (chaque homme ayant payé 63 de plus que son épouse).
On a donc [tex](y - x)(x + y) = 63[/tex] et [tex]x < y[/tex] (*).
Faisons la supposition (1) que x et y sont entiers (sinon, c'est là que le problème devient plus compliqué).

Puisqu'il existe exactement trois façons de factoriser 63 en paire de deux entiers [tex]\{1, 63\}, \{3, 21\}, \{7, 9\}[/tex], il y a exactement trois solutions [tex](x, y)[/tex] au système (*) qui sont respectivement [tex](31, 32)[/tex], [tex](9, 12)[/tex] et [tex](1, 8)[/tex].

Et là on se rend compte qu'entre un homme (y) et une femme (x) il y a nécessairement une différence de nombre de S.N. achetés de
- 1, 3 ou 7 si ils sont mariés
- 1, 3, 7, 23, 31, -19, 11, -23 ou -1 sinon.

Du coup il ne peut pas y avoir de différence de 33 S.N. achetés entre Nérosson et Gertrude, si la supposition (1) est correcte.

Supposons (2) que ce soit une erreur d'énoncé et que ce soit D à la place de 33. On sait déjà que:
- Berthe et Yoshi ne sont pas mariés,
- Yoshi a acheté 12 S.N. et sa femme 9,
- Berthe a acheté 1 S.N et son mari 8.
En connaissant D, on connaîtra le même type d'information sur Nérosson et Gertrude.
- Si D vaut 3, 7 ou 11 on ne peut pas conclure, faute d'information,
- Si D vaut 1, alors on a les couples N-G, Y-M et F-B,
- Si D vaut 23, alors on a les couples N-M, Y-G et F-B,
- Si D vaut 31, alors il n'y a pas de solution (Freddy serait le seul à avoir acheté 8 S.N. aurait deux femmes : Berthe et Gertrude),
- On pourrait faire de même avec D négatif, mais on va supposer (3) que Nérosson a vraiment acheté plus de S.N. que Gertrude.

Par hypothèse de "typo minimale" (4), on va dire que D = 23. Et que la solution est Nérosson-Mauricette, Yoshi-Gertrude et Freddy-Berthe. Parce qu'alors Nérosson aurait nécessairement acheté 32 S.N., sa femme 31 et Gertrude 9 et son mari 12. Le mari de Berthe n'est ni Nérosson, ni Yoshi c'est donc Freddy qui a donc acheté 8 S.N. Le mari de Gertrude est donc nécessairement Yoshi, et il reste Mauricette pour Nérosson.

Où est l'erreur et quelles hypothèses sont justes ?

A+

#9 Re : Cryptographie » RSA 2048 bit, bruteforcing et fonction de hachage » 03-11-2013 14:39:31

Bonjour Emi !

Je n'ai jamais entendu l'expression "fonction inviolable" (mais je ne sais pas tout), on parle en général plutôt de "fonction à sens unique". Oui, on a des processeurs qui font quelques milliards d'opérations par secondes, mais peu importe le nombre de milliards en fait, comme nous allons le voir.

Pour commencer, une clé RSA 2048 bits, ça comporte 2048 chiffres binaires (par définition de bit) et donc environ 600 chiffres décimaux, mais oublions la base 10 si tu veux bien. Pour comprendre pourquoi exclure les petits nombres ne permet pas de gagner beaucoup de temps, commençons par un peu de dénombrement.

Il y a [tex]2^n[/tex] nombres de exactement n bits.
Il y a [tex]2^{n+1} - 1[/tex] nombres de au plus n bits.
Petite observation: il y a donc à peu près autant de nombres de exactement [tex]n[/tex] bits (il y en a [tex]2^n[/tex]) que de nombres de au plus [tex]n-1[/tex] bits (il y en a [tex]2^n - 1[/tex]).

D'après le théorème des nombres premiers, qui donne leur répartition asymptotique, il y a environ [tex]\frac{2^n}{n \cdot ln(2)}[/tex] nombres premiers de au plus [tex]n-1[/tex] bits et à peu près autant de nombres premiers de exactement [tex]n[/tex] bits. Donc éliminer les petits nombres premiers est encore négligeable.


Pour RSA:
Prenons un cas très défavorable pour la sécurité de la clé : supposons que l'on sache qu'elle est le produit de deux nombres premiers de exactement 1024 bits. C'est défavorable car on a décidé qu'on connaissait le nombre de chiffres des facteurs.
Des nombres premiers de 1024 bits, il y en a environ [tex]\frac{2^{1024}}{1024 ln(2)} \geq 2^{1014}[/tex]. En supposant que tu puisses énumérer la liste de ces nombres premiers sans calcul (ce qui est une hypothèse très forte), si tu veux tester tous les produits de nombres premiers de 1024 bits, il te faudra faire environ [tex]\frac{2^{1014} \times 2^{1014}}{2} = 2^{2027}[/tex] multiplications. Supposons que tu sois équipée d'un processeur 2048 bit i.e. faisant des opérations arithmétiques sur 2048 bit en un tic d'horloge (pour info, le processeur de ton ordinateur traites les nombres 32 bits ou 64 bits). Il te faut alors un tic d'horloge pour tester chaque possibilité, donc [tex]2^{2027}[/tex] tics pour essayer toutes les combinaisons.

Résumons :
Une année c'est un peu moins de [tex]2^{25}[/tex] secondes. Une machine moderne est cadencée à environ [tex]2^{32}[/tex] tics par seconde (approximation pour 4Ghz), sans compter les multi-coeurs. Tu as besoin de [tex]2^{2027}[/tex] tics pour tester toutes les combinaisons.

Avec [tex]2^{300}[/tex] (des milliards de milliards de ... de milliards de) machines modernes travaillant en parallèle sur la même clé il faudrait donc environ [tex]2^{2027 - 25 - 332} = 2^{1670}[/tex] années pour essayer toutes les combinaisons, ce qui est bien au delà du temps qui reste à l'univers d'après certaines théories.

Dans tout cela, il faut bien sûr garder à l'esprit qu'on parle d'attaque en force brute uniquement. Il y a d'autres approches (en particulier la factorisation en produit de nombres premiers), et il convient d'évaluer la sécurité d'un système en fonction des diverses approches connues.

Pour MD5:
Je te laisse dénombrer le nombre de possibilités à stocker en utilisant les méthodes ci-dessus. L'idée du rainbow table est de faire un compromis entre temps et mémoire en faisant des chaînes et en ne stockant que la première et la dernière entrée. L'occupation de la mémoire est alors réduite à "nombres de possibilités"/"taille moyenne des chaînes". Cela dit, je ne m'y connais pas beaucoup plus en rainbow-tables et MD5.

En espérant t'avoir éclairé,
A+

#10 Re : Café mathématique » Définition de "démonstration" » 30-10-2013 23:18:59

Salut tibo,

tibo a écrit :

Suite finie d’assertions dont les premières sont des assertions postulées (des axiomes) ou des assertions déjà démontrées, la dernière assertion est le théorème et le passage d'un rang au suivant doit suivre des règles logiques.
Reste à définir ces règles mais il y en a trop je pense ^^

En fait il n'y en a pas tant que cela. Il y a de nombreux systèmes logiques avec plus ou moins de règles, plus ou moins d'axiomes, suivant des formulations plus ou moins élaborées. L'un des premiers à avoir étudié la question formellement est Gottlob Frege, puis ont suivi Hilbert, Whitehead, Russel, Gentzen…

Dans un système basé sur une axiomatisation, parfois appelé système à la Hilbert, il faut très peu de règles pour assembler les axiomes (au choix, mais il faut au moins inclure les axiomes du calcul des prédicats) et former de nouveaux théorèmes: le modus ponens et la règle de généralisation.

Il y a d'autres façons de présenter les choses, notamment la déduction naturelle et le calcul des séquents. On peut bien sûr aussi poser des axiomes dans des systèmes baées sur ces formulations, mais c'est parfois plus élégant de ne pas en poser, les règles de déductions étant suffisantes pour commencer à générer des théorèmes.

Il y a des systèmes plus expressifs que d'autres (B est plus expressif que A si tout ce que je peux déduire dans A, je peux le déduire dans B). Par exemple, si je prend les axiomes d'Euclide avec les règles du calcul des prédicats, tout ce que je peux en déduire, je peux en fait le déduire en théorie des ensembles.
Personnellement, j'utilise au quotidien une théorie des types (implémentée par Coq), qui est une extension du lambda calcul et qui peut-être présenté comme un calcul des séquents.

Si tu t'intéresses à ce sujet, c'est toute une branche de la logique, à l'interface entre les mathématiques et l'informatique théorique qui s'ouvre à toi : il s'agit de la théorie de la démonstration.

A+

#11 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » Répartition des nombres premiers et multiple de 5 » 29-10-2013 15:17:53

Salut yoshi,

yoshi a écrit :

C'est l'instinct du joueur d'échecs : chercher le mat !
C'est l'instinct du prof de maths : vouloir convaincre !
C'est peut-être que, dans une vie antérieure, j'ai été missionnaire ?
As-tu lu "Chiens perdus sans colliers" de Gilbert Cesbron (sous-titré, à sa parution en 1995, "un curé chez les loubards" ?).
Tout est lié !

Je n'ai pas lu cet ouvrage, mais je pense que je peux comprendre ton entêtement, … cela-dit :
- tu connais bien mieux les echecs que moi, mais il me semble que si on arrive trois fois dans la même position, on peut déclarer une partie nulle,
- pour enseigner il faudrait que madgel veuille apprendre quelque chose de qui que ce soit, ce dont je ne suis pas convaincu,
- je ne peux pas commenter sur tes vies antérieures. :-)

yoshi a écrit :

madgel a été fort mal traité dans un forum (ilemaths) : il y a été traité d'illuminé ! Ce n'était pas convenable - même si je peux comprendre leur exaspération - et s'est fait envoyé sur les roses plus ou moins sèchement, dans les autres où il est aussi passé.
Je n'ai pas fermé la discussion car il n'y a que des évidences réhabillées en nouveautés : pas "dangereux" comme la profession de foi [tex]\mathbb{R}[/tex] est dénombrable et d'autres...

J'ai l'impression que tu ne lui rends pas service à l'écouter, à le comprendre et à le reprendre. Je peux me tromper, mais je pense qu'il n'est pas là pour apprendre ou comprendre, et que si tout le monde prenait uniquement le temps de lui dire de revenir quand il aura appris suffisement de maths pour communiquer, il finirait par s'ennuier et commencerait à se remettre en question, car c'est pour moi son seul salut dans le monde des maths. (Et les plus brillants chercheurs que j'ai rencontré se remettent régulièrement en question).

De plus je ne vois pas en quoi il serait moins "dangereux" que les illuminés de "[tex]\mathbb{R}[/tex] est dénombrable" (dont certains sont juste victimes d'une incompréhension du paradoxe de Skolem, qu'il n'ont pas les outils pour comprendre et qu'ils interprètent à la manière de philosophes de comptoirs). En effet, si il peut déclencher une discussion de presque 200 posts, c'est la porte ouverte aux Don Quichottes…

A+

#12 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » Répartition des nombres premiers et multiple de 5 » 29-10-2013 14:46:48

Bonjour,

Géomètre a écrit :

Une démonstration est […]

Je trouve que de savoir ce qu'est une démonstration n'est pas facile, en revanche c'est un sujet passionnant. C'est  aussi l'un des (rares ?) domaines où je ne suis pas agnostique. Personnellement j'aime bien la page wikipédia Démonstration, et j'attire en particulier votre attention sur les deux phrases suivantes :
"On rédige une démonstration pour être lue et convaincre les lecteurs, et le niveau de détail nécessaire n'est pas le même suivant les connaissances de ceux-ci. Cependant avec l'avènement des ordinateurs et des systèmes d'aide à la démonstration, certains mathématiciens contemporains rédigent des démonstrations qui sont amenées à être vérifiées par des programmes."

A+

#13 Re : Café mathématique » algorithme d'optimisation » 28-10-2013 19:06:36

Bonjour Marc-Antoine, Yoshi,

yoshi a écrit :

Nous avons de temps en temps un dénommé Barbichu qui passe et au point question Maths (issu de Cachan) et programmation.
Il a à plusieurs reprises évoqué ici même le langage Coq : il me semble que c'est peut-être là, la réponse à ta question...

[…]

Sinon, en quelques cas précis, on doit pouvoir faire la preuve d'un algorithme qui doit rendre un résultat chiffré, en lui fournissant une variable (ou plus) et en faisant le boulot pas à pas "à la main"...

Avant d'aller faire de la preuve formelle assistée par ordinateur il y a du paysage à visiter. On peut commencer à parler de correction d'algorithme sur papier. Dans les incontournable, il y a la Logique de Hoare. À partir de là on peut aussi s’intéresser à des aspects plus spécifiques des langages de programmation (utilisation de la mémoire, sémantique opérationnelle, dénotationnelle, etc …), ou à des aspects spécifiques aux algorithmes qu'on étudie.

Quant à l'étude informatisé de correction de programmes, il y a les ancêtres tels que la méthode B et des tentatives plus modernes telles que Why3 et beaucoup d'autres que je ne cite pas.
Bien sûr Coq permet aussi d'aborder le problème, mais n'est pas vraiment spécialisé dans la preuve de programme.

A+

#14 Re : Programmation » [Python] Fonction qui définit une fonction » 28-10-2013 18:53:17

Bonjour Charmander,

Charmander a écrit :

Mais je ne suis pas sûr que ma syntaxe est bonne car lorsque j'exécute le programme puis je rentre par exemple polynome(5) ça m'affiche fonction "polynome" non définie.

Ton programme est tout à fait correct, tu ne l'as juste pas bien utilisé !


def getPoly(l):
    def polynome(x):
        S = 0
        for i in range(len(l)):
            S += l[i] * (x ** i)
        return S
    return polynome

P = getPoly([1,2]) # P est la fonction polynomiale 1 + 2x
P(2)
 

Remarque qu'un code utilisant la méthode de Horner sera plus efficace :


def horner(l):
    def polynome(x):
        S = 0
        for a in reversed(l):
            S = S * x + a
        return S
    return polynome

P = horner([1,2]) # P est la fonction polynomiale 1 + 2x,  calculé par la méthode de Horner cette fois-ci.
P(2)
 

Quant à l'utilisation de python comme langage fonctionnel c'est tout à fait possible mais pas vraiment "dans le style python", mais chacun ces goûts, et moi j'aime bien.

A+

#15 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » Répartition des nombres premiers et multiple de 5 » 28-10-2013 18:12:21

Bonjour à tous !

Incroyable ! je suis persuadé qu'il fût une époque où yoshi aurait modéré ce fil de discussion dès le post #12. Il aurait été fort dommage tellement ce troll est divertissant. Je n'ai pourtant pas pour habitude de nourrir ces derniers, mais plusieurs interventions m'y poussent. En particulier, après que Géomètre ait eu le déplaisir de voir bafouer les probabilités qui lui tiennent tellement à cœur, voilà que la "logique" et la "démonstration mathématique" le sont !

@madgel
Logique, Démonstration, Mathématiques… ne te réfugie pas derrière ces mots pour cacher ton manque d'éducation dans chacune de ces disciplines, si tant est qu'on puisse les délimiter aussi clairement. La critique est quasiment unanime autour de toi, remets toi en question maintenant ! Je ne peux nier qu'une bonne dose de créativité doit être déployée pour résoudre des problèmes ouverts, mais il faut canaliser et structurer sa pensée avant de communiquer ses idées aux autres, c'est d'ailleurs une part fondamentale du travail d'un chercheur (en mathématiques, en logique, en informatique et probablement en général, mais je ne peux être sûr que pour mes domaines). Dans ce fil de discussion, ce sont tes interlocuteurs qui ont fait et continuent de faire ce travail à ta place. Or une fois structuré, l'on se rend compte de la trivialité de ton propos vis à vis des connaissances actuelles.

Pour conclure, Géomètre t'as bel et bien fait un commentaire constructif que je me permets de réitérer : apprends les maths au lieu de gâcher ton temps et ton enthousiasme en trivialités et en ce qui ressemble à du gribouillage à mes yeux. Reviens quand tu auras appris et maîtrisé le vocabulaire adopté par les mathématiciens. Ça fait mal au cœur de voir quelqu'un gâcher son potentiel en se battant contre des moulins à vent.


@nerosson
Ce long discours m'amène moi aussi à la même réponse, univoque, que les autres à ta question en gras : "non". Quant à ton intervention "de bécasseau" nerosson, elle fait partie pour moi des plus intéressantes parmi ces 169 posts. Et si techniquement tu n'es peut-être pas au top (ce que je ne sais pas), tes interventions sont toujours plus pertinentes que ce que tu ne sembles penser.

J'ai d'ailleurs envie de réagir au sujet de "l'offense au prestige des maths". C'est marrant comme j'oublie vite à quel point mon point de vue sur cette question s'est complètement inversé en 10 ans. La logique permet effectivement de structurer le raisonnement. Cela dit les propriétés d'objets même très simples peuvent être arbitrairement compliquées (voire impossible si la formulation du problème est suffisamment précise !) à trouver et à prouver, et les nombres premiers sont loin d'en être un exemple isolé. Pour moi, c'est justement ça la beauté des maths : que l'on puisse structurer avec des règles si simples des choses arbitrairement compliquées. Et c'est pour ça que je travaille aujourd'hui sur la formalisation du raisonnement.


@yoshi : quelle persévérance ! Mais pourquoi ?

#16 Re : Café mathématique » Mise en page Latex » 23-02-2013 12:44:47

Bonjour kvf300,
Attention, GNU/TeXmacs n'est pas un éditeur LaTeX ! Il s'agit d'un logiciel avec son propre langage, permettant de mélanger des étapes de calcul formel, numérique ou graphique et de la mise en page. Il permet également de produire un document LaTeX automatiquement à partir de ton document TeXmacs (il ne faut alors pas éditer le LaTeX qui doit rester généré automatiquement par TeXmacs), et tu peux aussi convertir directement ton document TeXmacs en pdf.
- Soit tu considères que c'est bien le logiciel que tu veux, et alors il faut que tu lises sa documentation bien spécifique (et que tu abandonnes celle de LaTeX). Sache que très peu de gens pourront t'aider car il n'y a pas beaucoup d'expert TeXmacs dans le monde. Moi non plus je n'y connais pas grand chose, alors que j'ai déjà rencontré son auteur et deux ou trois autres personnes qui l'utilisent.
- Soit tu voulais vraiment faire du LaTeX (tu pourrais alors réutiliser les fichiers de Fred). Dans ce cas, puisque tu sembles être sous Linux (je me trompe ?), je conseille l'utilisation de kile (disponible via ton gestionnaire de paquet préféré ou cette url) pour les débutants. Tu peux aussi t'aventurer avec emacs, mais je pense qu'il est dur d'apprendre simulatenement à se servir d'un éditeur avancé comme emacs et d'un langage comme LaTeX.
Cordialement,

#17 Re : Programmation » [Python] Appartenance d'un element à une liste [Résolu] » 06-02-2013 19:16:06

Salut,

Garulfo a écrit :

[...] Pour ta version « impérative », [...]
[...] Le fait que tu les trouves plus lisibles [...]
[...] Maintenant c'est fort possible que ça ne répondait pas exactement à l'exercice de Bibi. [...]

Trois extraits qui m'indiquent que tu as probablement mal lu mon message (ou trop vite) ou mal interprété, ou les deux (ou les trois). Ou alors c'est moi.

Pour le reste de ton message, je reviendrai dessus plus tard.
(J'aime bien ce genre de débat.)

Bonne soirée,

#18 Re : Programmation » [Python] Appartenance d'un element à une liste [Résolu] » 04-02-2013 23:13:07

Salut Garulfo,

je suis plutôt d'accord sur le fond, tes programmes sont en effet plus concis, plus abstrait (et plus lisibles pour moi, mais je ne sais pas si ce sera le cas de Bibi ou de totomm, je ne connais pas leur formation) et répondent à la question initiale, mais je dois m'indigner sur la forme.

Déjà, python n'est pas un langage fonctionnel (même si certaines composantes du langages permettent de faire de la programmation fonctionnelle) et les listes n'y sont pas des objets persistants. Je ne vois pas en quoi la structure de la liste python est "récursive" : elle s'apparente plus au tableau mutable à longueur variable qu'à un type algébrique. Enfin --- mais c'est un détail de vocabulaire j'imagine --- les solutions que tu proposes n'ont rien de récursives (au mieux map et reduce sont peut-être implantées récursivement, mais ce ne sont pas nos oignons en temps qu'utilisateur).

NB : Par contre, il est vrai qu'il y a quelques structures persistantes en python : tuple et frozenset par exemple.
Il y a aussi la construction lambda en python, alors tant qu'à faire autant réécrire ton programme de manière encore plus concise (et plus élégante à mon goût) :


inL = lambda e, L: reduce(lambda b, l: b or e in l, L, False)
 

(Au passage tu avais fait une erreur : l'élément initial pour le reduce doit être False)

Pour finir sur quelque chose de constructif, voici une fonction récursive (vraiment cette fois-ci) pour tester appartenance à un itérable dont les éléments peuvent être des itérables dont les éléments peuvent être des itérables ... en style impératif :


from collections import Iterable

def inL(e, L):
    if e == L: return True
    if isinstance(L, Iterable):
        for l in L:
            if inL(e, l): return True
    return False
 

ou bien style fonctionnel (qui n'est pas forcement très compréhensible ni élégant, dans ce cas ci) :


from collections import Iterable

def inL(e, L):
    e_in = lambda b, l: b or e == l or \
        (reduce(e_in, l, False) if isinstance(l, Iterable) else False)
    return e_in(False, L)
 

A+

#19 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » Enigme culinaire ! » 01-02-2013 19:12:28

Bonsoir,

Si on ne considère que les mariages hétérosexuels, il est à noter que suivant interprétation de "beau-frère" il y a deux solutions minimales; amatheur donne l'une des deux. (Notez aussi qu'il n'y en a pas 4, alors qu'il y a deux occurrences de "beau-frère" dans l'énoncé !)

Si on considère également les mariages homosexuels (d'un point de vue purement logique, je ne veux pas amener de débat politique sur ce forum), il y a deux nouvelles solutions (une variante pour chacune des deux solutions du cas hétérosexuel).

dans la solution de amatheur, il suffit de remplacer ...

"ton frère et ta sœur ont épousé les enfants de ta tante paternelle" par "ton frère a épousé le fils de ta tante paternelle".

A+
Edit :
1. j'ai naturellement exclu les mariages entre frères et soeurs (ou demi-, cf 2.)
2. je n'ai pas pris en compte les familles recomposées. Donc je n'ai pas d'utilisation de beau-père comme "nouveau mari de la mère", mais uniquement "mari de la soeur du père" ou "frère de la femme du père (= la mère puisqu'il n'y a pas de familles recomposées)"..
Peut-être que je referai l'étude en prenant ça en compte.
3. par minimal j'entends "qui n'est plus une solution si on enlève quelqu'un en gardant les mêmes relations pour les gens qui restent". Par exemple on peut donner à freddy 50 frère et soeurs si l'on veut, mais comme la plupart ne sont pas utiles au problèmes, on peut les ignorer. Mais on ne probablement pas en ignorer trop. Une solution minimale parle du minimum de gens possible tout en satisfaisant les contraintes. Alors qu'il y a une infinité de solutions, il n'y en a qu'un nombre fini de minimales (en tout cas ici).

Edit2 :
Rendons à Cesar, ... Il s'agit de la solution de amatheur et non celle de nerosson

#20 Re : Cryptographie » Les secrets de freddy et yoshi » 31-01-2013 16:47:20

Re,

yoshi a écrit :

Oh, mais, tu n'es pas en cause et d'ailleurs, j'ai seulement vaguement lu ton prog : trop d'anglais pour moi (déformation professionnelle pour toi), ce n'est pas que je ne peux pas comprendre : simplement, ça me colle des boutons, comme chaque fois que l'anglais prend le pas sur le français !

Je comprends tout à fait ton aversion. De mon point de vue, ayant l'habitude de programmer en anglais, et les mots clés du langage (if, then, else, while, do, not, and, or, return, for, ...) et les objets de la bibliothèque standard étant tous en anglais, écrire les noms de variables ou de fonction en fançais produit un mélange franglais que je trouve insupportable à lire. De plus, par habitude encore (même si la situation a évolué depuis l'époque où c'était obligatoire), je ne mets que des caractères ascii dans mon code, or j'éprouve régulièrement ce besoin de distinguer les verbes sous forme active de ceux sous forme passive. Typiquement, une variable nommée "trouve" désigne-t-elle "trouve" (l'action de trouver) ou "trouvé" (le fait d'avoir trouvé), cette nuance est parfois cruciale pour la lisibilité et l'anglais permet de le faire assez simplement avec son "-d" (sauf pour certains verbes irréguliers). Au moins je sais distinguer "find" de "found", par exemple.

Le compromis que je suis prêt à faire, c'est de mettre les commentaires en français. Cela dit, je ne le ferais que si tu prévoyais alors de lire mon code (ou si ça incitait d'autres personnes à le lire). Auquel cas, je peux non seulement traduire les commentaires en français mais également en ajouter pour expliquer un peu mieux son fonctionnement.

a+

#21 Re : Cryptographie » Les secrets de freddy et yoshi » 31-01-2013 15:08:12

Cher yoshi,

yoshi a écrit :

Bravo Messieurs, je reste béat d'admiration devant vos capacités et votre vitesse d'exécution : chapeau bas, mais c'est assez démoralisant.
Moi, j'en suis (presque) toujours au même point, et ça ne sert donc plus à rien que je me casse la tête : je ne veux pas connaître vos méthodes et solutions quand même.
Je reprendrai le travail de temps en temps au gré de mes envies... je continuerai à lire la prose nerossonienne, mais ne participerai plus : ça m'évitera de passer de mauvaises nuits.

:(
Je suis désolé d'avoir contribué à te démoraliser. J'avoue que si je n'avais pas trouvé la solution avant quelle soit publiée, j'aurais probablement abandonné aussi. Connaissant le texte clair, il n'est pas aussi amusant de casser un chiffre, alors si en plus des solution ont été puliées ... Cela dit, tu étais sur la bonne pente. La prochaine fois, je tournerais 7 jour ma souris sur le forum avant de poster une solution :).

A+

#22 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » Les mafiosi et la cocaine » 31-01-2013 14:54:19

Salut freddy,

tu m'as demandé mon avis sur ton raisonnement, je suppose que tu parles de celui du message #50 et je te réponds.

Je pense que tu as oublié la règle suivante, dite "de cruauté".

Fred (#9) a écrit :

* les mafiosi sont cruels : à gain égal, ils tueront l'ainé!


Cela implique plusieurs erreurs dans ton raisonnements. Je vais le corriger point par point. Ce faisant, je vais en fait retomber sur les raisonnements que Nico-invité et Fred ont donnés il y a bien longtemps.

freddy a écrit :

Donc dans l'ordre décroissant des âges : A, B, C, D et E.

S'il reste D & E : D doit tout donner à E pour rester en vie.

Non: Que D lui donne tout ou non, E le tuera (suivant la règle de cruauté).

freddy a écrit :

S'il reste C, D & E : D sait qu'il n'aura rien. Donc soit il accepte de tuer C et de favoriser E, soit il accepte que C garde tout.

Non, E n'a pas le choix : s'il veut rester en vie, il doit accepter la proposition de C dans tous les cas, lui donnant la majorité et le pouvoir de tout garder.

freddy a écrit :

S'il reste B, C, D & E : D  & E savent que C gardera tout si B meurt. Donc ils n'ont rien à espérer. C voudrait éliminer B, mais il est minoritaire. Donc B peut tout garder.

Presque ... en effet, B ne peut obtenir les faveurs de C, car même si il lui donnait tout, C le tuerait par pure cruauté. B doit donc nécessairement obtenir l'approbation de D et E. Pour cela, suivant la règle de cruauté, il doit leur proposer strictement plus que ce qu'ils auraient si C prenait la main. Il propose donc 1kg pour D et 1kg pour E et garde 510kg pour lui même.

freddy a écrit :

Considérons A, B, C, D et E : fort de l'analyse ci dessus, seul B veut l'éliminer pour tout prendre. Mais C, D & E n'ont aucun intérêt à s'allier à lui, puisqu'ils n'en tireront rien. Donc ils sont d'accord, volens nolens, pour tout laisser à A.

Pour que A obtienne les faveurs:
- de B, il doit lui proposer strictement (suivant la règle de cruauté) plus que 510kg, donc au moins 511kg
- de C, il doit lui proposer strictement plus que 0kg, donc au moins 1kg
- de D, il doit lui proposer strictement plus que 1kg, donc au moins 2kg
- de E, il doit lui proposer strictement plus que 1kg, donc au moins 2kg
Il choisi parmi ces personnes les deux qui lui coûtent le moins cher, il a donc deux possibilité:
- soit C : 1kg et D : 2kg
- soit C : 1kg et E : 2kg.
Dans ces deux cas, il peut garder le reste, soit 509kg.

A+

#23 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » nerosson le borgne ? » 31-01-2013 11:56:28

Salut,

Hé voila je rechute ...

la réponse

nerosson et totomm pouvant observer les deux autres disques, ils peuvent chacun voir soit 2 blancs, soit 1 blanc et 1 rose.
Le seul cas où l'un des deux peut trouver est celui où il voit 1 blanc et 1 rose (en effet, un seul disque rose étant disponible dans le jeu, si celui-ci était attribué, il ne pourrait avoir qu'un blanc de le dos). N'ayant pas leur langue dans leur poche, si l'un des deux avait trouvé, il n'aurait pas manqué d'ouvrir sa boite à musique pour chanter sa victoire. En 10 longues minutes, aucun de deux ne l'a fait. freddy, fort de cette information en déduit que les deux autres voient 2 blancs, il porte donc le disque blanc, de même que ses deux compagnons, qui eux ne le savent pas.

A+

#24 Re : Cryptographie » Les secrets de freddy et yoshi » 30-01-2013 22:03:34

Re,

yoshi a écrit :

il y a bien une combinaison donnant 120... mais tu n'as peut-être pas encore fait les bonnes hypothèses.
Il faudrait résoudre un truc du genre ax + b(x+1)=120

Bah, via la "force brute", ça ne va pas chercher bien loin... [...]

En passant par la force un peu moins brute tu peux chercher les x tels que
[tex]120 \textrm{ mod } x \leq 120 / x[/tex] (i.e. le reste de la division de 120 par x doit être plus petit que le quotient)
En effet, comme [tex]a x + b (x + 1) = (a + b) x + b[/tex], avec [tex]a[/tex] et [tex]b[/tex] "libres" et positifs, la seule contrainte est que [tex]b \leq a + b[/tex].
J'utilise une variante de cette idée dans mon programme.

yoshi a écrit :

Il faut juste 2à 3 s le temps de l'affichage.
Cela dit : rien ne colle avec mon hypothèse du Y en tête de 2e gondole
Je veux simplement avoir confirmation de ceci :
Les lettres : D E F R E D D Y A Y O S H I sont bien en tout début du texte clair, i.e donc bien en têtes de colonnes ?

Ça dépend si la clé est plus grande ou plus petite que 14, mais la reponse est

Texte caché

oui, toutes ces lettres sont en tête de colonnes

yoshi a écrit :

Les colonnes ayant 1 lettre de plus que les autres, sont bien regroupées toutes ensemble au début, pas à la fin, ni intercalées ?

Oui.

yoshi a écrit :

[EDIT] Tiens Barbichu de retour...
Evidemment, il a trouvé...
Ca en fait 2...
Je sens que je vais être la 253e roue du carrosse : "j'aurais jamais dû m'éloigner de mon arbre..."  :-((

Je regarde le forum de temps à autres, mais comme je n'ai pas trop le temps je ne réponds pas, de peur de mettre le doigt dans l'engrenage. Cette fois-ci le problème m'a particulièrement emballé, du coup, pour une fois, je me suis lancé.

A+

#25 Programmation » [Python] déchiffrement "interactif" pour le secret de freddy et yoshi » 30-01-2013 19:58:47

Barbichu
Réponses : 0

Bonsoir,

Voici mon premier jet de code qui marche pour résoudre le problème énoncé ici : le secret de freddy et yoshi.
Ce programme se veut interactif : on entre une solution partielle, le programme la complète, on devine des lettres et ainsi de suite.

Toutefois, je n'ai pas fait de boucle d'interaction, je conseille l'usage de ipython.
Une fois ipython lancé dans le bon dossier, faites, par exemple,


run code.py
process(example, \"de freddy a yoshi\", range(2,100))
 

où code.py est le nom du fichier sous lequel vous aurez sauvé mon code.

Les deux fonctions principales sont decipher et process. La première donne la liste des tailles de clés possible et les solutions associée (mais sous formes numériques, donc illisibles). La deuxième ne donne que les solutions possibles.


debug_level = True

def debug (msg):
    if debug: print(msg)

example  = "HSELO CLTNT LANYR OVCRC LUTOU SDLOI QOCSE TLROO OOIET VOIRO ESSOT"
example += "SOAMT ENOIE AEMTU CLURE PQEIE AETAE ETEET NOOPN EBNSC RIFOR TEERT"
example += "UIIDN IMIIR DMETO EXIDO UDNYN ORFSN DLNUN RIOSA NEEEC EPIEI ETMIU"
example += "ESEIN SIFNI SINPE VOAER GTRAE PIEEA IPVBS SRCII LNIUI FOROS ALTAB"
example += "UNNRS NDENE NSOSE IEEEN RFBTN LSRST AT"

def dfs (init, next):
    """ dfs algorithm for *trees*
    init is the intial node
    next(x) returns the list of nodes that are the children of x and some selected nodes
    """

    stack = [init]
    # explored = set(init)
    result = []
    while len(stack) > 0:
        elt = stack.pop()
        (nexts, r) = next(elt)
        result += r
        for s in nexts:
            # if s not in explored:
            #     explored.add(s)
            stack.append(s)
    return result

ordA = lambda c: ord(c) - ord("A")
chrA = lambda i: chr(i + ord("A"))

def debug_letters (l):
    for i in range(26):
        if len(l[i]) > 0:
            debug("%s : %s" % (chrA(i), l[i]))

def decipher (ciphertext, message, defaultks = []):
    # pretreatment of the ciphertext
    ciphertext = "".join(ciphertext.upper().split())
    csize = len(ciphertext)
    # indexing letters of the ciphertext
    letter = []
    for _ in range(26): letter.append(set())
    for i in range(csize): letter[ordA(ciphertext[i])].add(i)

    debug_letters(letter)

    # pretreatment of message
    message = "".join(message.upper().split())
    message += "_" * (csize - len(message))
    message = message[0:csize]

    # we view the dicypherring as a dfs on the following tree:
    # each node is a state consisting of:
    # + the next position in the cleartext message
    # + the list of the indexes in the ciphertext of the first
    #   element of each row of the cleartext
    # + the set of possible key size
    # there is a vertext between A and B if B is a possible refinement of B

    ks = frozenset(range(2, csize + 1)) # possible key sizes
    if len(defaultks) > 0: ks = ks.intersection(defaultks)

    bounds = [(0,0)] # memoisation of rectangles bounds
    for k in range(1, csize + 1):
        bounds.append((csize / k, csize % k))
   
    debug ("bounds memo : %s" % bounds)

    def next (state):
        (p, prev_perm, prev_ks) = state

        if p >= csize:
            return ([], [state])

        c = message[p] # c is the next constraint
        if c == "_": # if c is unknown, do not perturb
            return ([(p+1, prev_perm + (-1,), prev_ks)], [])

        nextstates = []
        debug("retained keys : %s" % (prev_ks))
        debug("letter %s, position %s, with perm %s" % (c, p, prev_perm))
        for q in letter[ordA(c)]:
            debug("  (letter %s) at %s" % (c, q))
            if q in prev_perm: continue
            perm = prev_perm + (q,)
            ks = set(prev_ks)
            for k in prev_ks:
                (n, d) = bounds[k]
                (ip, jp) = (p / k, p % k)
                (u, v) = (0, 0)
                if jp <= d + 1: u = 1
                if jp == d + 1: v = 1

                # special case of first character: it must be on the first line of the cleartext
                if (q == 0 and ip != 0) or (jp == k - 1 and 0 not in perm):
                    ks.remove(k)
                    continue

                # kperm indexes (by its position in the ciphertext)
                # the first elements of each column of the cleartext
                kperm = list(perm)[0:k]
                conflict = False
                for r in range(p + 1):
                    (ir, jr) = (r / k, r % k)
                    if kperm[jr] >= 0:
                        if perm[r] >= 0 and kperm[jr] + ir != perm[r]:
                            conflict = True
                            break
                    else: kperm[jr] = perm[r] - ir
                if conflict:
                    ks.remove(k)
                    continue
               
                pos = filter(lambda x: x >= 0, kperm)
                pos.sort()
                if 0 not in pos: pos = [0] + pos
                holes = k - len(pos) # number of unknown positions left
                irreg = d # number of irregularities left

                pos.append(csize)
                for x in range(len(pos) - 1):
                    diff = pos[x + 1] - pos[x]
                    diffh = diff / n
                    diffi = diff % n
                    if diffh == 0:
                        ks.remove(k)
                        break
                    if pos[x] in kperm:
                        if kperm.index(pos[x]) < d:
                            if diffi == 0 or (jp >= d and diffi > 1):
                                ks.remove(k)
                                break
                    holes -= (diffh - 1)
                    irreg -= diffi
                    if holes < 0 or irreg < 0:
                        ks.remove(k)
                        break

            if len(ks) > 0:
                nextstates.append((p + 1, perm, (frozenset(ks))))

        return (nextstates, [])

    result = dfs((0, tuple(), ks), next)

    return result

def cleartext (state, ciphertext):
    # pretreatment of the ciphertext
    ciphertext = "".join(ciphertext.upper().split())
    csize = len(ciphertext)
    (p, perm, ks) = state
    results = []
    for k in ks:
        (n, d) = (csize / k, csize % k)
        result = ["_"] * csize
        ok = True
        for j in range(k):
            u = 0
            if j < d: u = 1
            kperm = list(perm)
            for i in range(n + u):
                if kperm[i * k + j] >= 0:
                    kperm[j] = kperm[i * k + j] - i
                    break
            if kperm[j] >= 0:
                for i in range(n + u):
                    result[i * k + j] = ciphertext[kperm[j] + i]
        if ok: results.append("".join(result))
    return results

def process (ciphertext, message, ks = []):
    result = decipher(ciphertext, message, ks)
    return map (lambda s: cleartext(s, example), result)

if __name__ == '__main__':
    debug("main")
    debug("for example, run method process on the example:")
    debug("process(example, \"de freddy a yoshi\", range(2,100))")
 

A+

Pied de page des forums