Esprit du vinaigre

Des réactions acides à une actualité qui ne manque pas de sel

Le 11 mai 2005

Attention avant de tricher

Faites ce jeu un jour avec des amis : pariez l'apéro sur le fait que le premier chiffre (celui le plus à gauche) du nombre d'habitants d'une commune prise au hasard dans l'annuaire est 1, 2, 3 ou 4.

Quel intérêt me direz-vous ? Ce chiffre peut être n'importe lequel entre 1 et 9 et donc vous avez 4 chances sur 9 (44%) d'avoir raison et 56% d'avoir tort. Eh bien, si j'étais vous, je tenterais quand même le coup : parce que vous avez presque 70% de chances de gagner !

Un autre jour, pariez sur le premier chiffre de la superficie d'une commune prise au hasard dans le dictionnaire. Et là, pariez qu'il se trouve dans l'intervalle 1-3 plutôt que dans l'intervalle 7-9. Vos chances sont de 60% dans le premier cas et de seulement 15% dans le second.

En fait, c'est un phénomène assez étrange, mais quand on prend des séries de chiffres, la répartition statistique du premier chiffre n'est pas équitable. D'après la légende, c'est un astronome (Newcomb) qui a trouvé ça en 1881 en constatant que certaines pages des tables de logarithmes étaient plus usées que d'autres (ou variante, que le premier tome était plus utilisé que le deuxième qui lui même était plus utilisé que le troisième).

Il édicte donc une loi assez empirique : la probabilité que le premier chiffre d'un nombre pris dans un ensemble quelconque de données "naturelles" soit X est égal à log (1 + 1/X).

En 1931, un mathématicien, Frank Benford, après avoir étudié des milliers de données (des longueurs de fleuves, des cours de bourse, des recensements démographiques, des constantes physiques, ...) confirme la formule édictée par Newcomb et la rend célèbre. Enfin, cette formule a été démontrée en 1996 par Terence Hill (un homonyme de l'acteur, je suppose).

Dans le tableau ci-dessous, voici les probabilités théoriques prévues par la loi de Benford et les fréquences réelles des premiers chiffres pour les populations, les superficies et les nombres de logements des communes françaises.

Chiffre initial Proba Pop. Superf. Nbre log
1 30.1% 30.7% 33.5% 30.0%
2 17.6% 18.5% 14.8% 16.7%
3 12.5% 12.6% 10.0% 11.9%
4 9.7% 9.1% 8.5% 9.6%
5 7.9% 8.2% 7.8% 7.2%
6 6.7% 6.4% 7.3% 7.0%
7 5.8% 5.6% 6.6% 6.4%
8 5.1% 4.7% 5.9% 5.3%
9 4.6% 4.0% 5.6% 4.8%

Il y a des séries de nombres où l'on arrive intuitivement à appréhender cette loi. Par exemple, si on choisit une maison quelconque dans une rue au hasard et qu'on regarde le premier chiffre du numéro de la maison. S'il y a 19 maisons dans la rue, il y a 10 fois plus de maisons qui commence par le chiffre 1 que par 2, 3 ou 9. S'il y a 59 maisons dans la rue, les chiffres 6, 7 8 et 9 seront 10 fois moins nombreux que les autres. Il faut une rue de 99 maisons pour que le chiffre 9 rattrape son retard. Et puis quand on passe à des rues à 100 ou 200 maisons, à nouveau les petits chiffres prennent de l'avance sur les gros. Et à moins qu'il n'y ait que des grandes rues, les petits chiffres seront donc plus nombreux que les gros.

Alors, il y a bien sûr des ensembles de chiffres sur lequels cela ne marche pas : comme les numéros de téléphone en France qui commencent tous par zéro. Mais sur la plupart des ensembles de données réelles, cela fonctionne plutôt bien.

Certains se servent même de ces résultats pour traquer des fraudes. Imaginez un inspecteur qui analyse les volumes de vente des différents articles d'une grande surface. Si le gérant veut frauder, il va remplacer les véritables chiffres de vente par des chiffres pris au hasard. Et là, mauvaise surprise pour lui, la loi de Benford ne s'applique pas pour les nombres aléatoires. D'où une distorsion dans la répartition des chiffres à gauche qui va mettre la puce à l'oreille de l'inspecteur.

On est bien sûr dans le domaine de la probabilité et il se peut tout à fait que des résultats non truqués ne s'accordent pas avec la loi de Benford. Mais cette méthode est effectivement utilisée (du moins aux USA) pour traquer les fraudes à l'assurance ou dans des enquêtes boursières.

Et vous savez maintenant ce qu'il vous reste à faire si ... non, rien. Je n'ai rien dit !

Posté à 12:20 - Sciences - Commentaires [1] - Rétroliens [0] - Permalien [#]

Le 21 décembre 2004

Les langages ésotériques

Même si vous n'êtes pas informaticien, vous vous doutez bien que les langages utilisés pour faire des programmes informatiques essayent d'être "parlants" pour celui qui les écrit et celui qui les lit. On trouve donc des instructions du type :
if genre = "M" then write "Bonjour Monsieur"
else if genre = "Mle" then write "Bonjour Mademoiselle"
else write "Bonjour Madame"
Peu importe à quoi ça sert ... mais sachez que les programmes écrits dans les langages informatiques courants sont dans cet esprit là. Il y a cependant une autre école qui consiste à inventer les langages informatiques les plus obscurs possibles et dont voici un échantillon non exhaustif.


Le langage Brainfuck

Il se compose de 8 commandes > < + - . , [ ]

Voici le début d'un programme qui donne la liste des nombres premiers (2 3 5 7 11 13 ...) :
>++++++++[<++++++++>-]<++++++++++++++++.[-]
>++++++++++[<++++++++++>-]<++++++++++++++.[-]
>++++++++++[<++++++++++>-]<+++++.[-]
>++++++++++[<++++++++++>-]<+++++++++.[-]
>++++++++++[<++++++++++>-]<+.[-]
>++++++++++[<++++++++++>-]<+++++++++++++++.[-]
>+++++[<+++++>-]<+++++++.[-]
>++++++++++[<++++++++++>-]<+++++++++++++++++.[-]

Brainfuck est probablement le langage ésotérique qui a eu le plus de descendants dont certains ont des noms évocateurs comme DoubleFuck ou Fuckfuck.


Le langage NULL

Encore un langage tordu ; les 14 instructions sont les 14 premiers nombres premiers : 2 3 5 7 11 13 17 19 23 29 31 37 41 43

Je n'ai pas réussi à trouver de programme écrit dans ce langage


Le langage COW

12 instructions très bovines : moo mOo moO mOO Moo MOo MoO MOO OOO MMM OOM oom

Exemple : génération de la suite dite de Fibonnaci (1 1 2 3 5 8 13 21 ...)
MoO moO MoO mOo MOO OOM MMM moO moO MMM mOo mOo moO MMM mOo MMM moO moO MOO MOo mOo MoO moO moo mOo mOo moo


Le langage Unlambda

Les symboles sont : ` s i k r v c d e et un symbole double .*

Toujours la suite de Fibonnaci (décidément, on a l'impression qu'ils ne savent faire que ça)
```s``s``sii`ki
  `k.*``s``s`ks
``s`k`s`ks``s``s`ks``s`k`s`kr``s`k`sikk
  `k``s`ksk


Le langage Intercal

Celui-ci est tellement compliqué que même les textes expliquant son vocabulaire et sa syntaxe sont incompréhensibles. On remarque seulement qu'il s'agit d'un programme où l'on demande poliment des actions à l'ordinateur. Voici un début de programme en Intercal
(10) PLEASE DON'T GIVE UP
(1) DO .2 <- '?.1$#64'~'#0$#65535'
DO .2 <- '&"'.1~.2'~'"?'?.2~.2'$#32768"~"#0$#65535"'"$".2~.2"'~#1
DO .3 <- '?#91$.1'~'#0$#65535'
DO .3 <- '&"'#91~.3'~'"?'?.3~.3'$#32768"~"#0$#65535"'"$".3~.3"'~#1
DO (11) NEXT
DO (2) NEXT
DO (12) NEXT
(11) DO (13) NEXT
PLEASE FORGET #1
DO (12) NEXT
(13) DO (14) NEXT
PLEASE FORGET #2
DO (12) NEXT
(14) DO STASH .1
DO .1 <- .3
DO (1000) NEXT
DO .1 <- .3
DO .2 <- #1
PLEASE DO (1000) NEXT
DO RETRIEVE .1
PLEASE RESUME .3


Le langage APL

Ce langage a eu une très grande popularité pour les recherches en mathématiques car il permettait de manipuler simplement des notions assez complexes. Mais c'était au prix de petits autocollants qu'il fallait coller sur son clavier pour pouvoir avoir accès aux caractères étranges d'APL ! Regardez un programme en APL pour permutter les disques des tours de Hanoï.


Le langage TMMLPTEALPAITAFNFAL

Il ne s'agit pas à proprement parler d'un langage, mais d'un moteur de génération d'un langage par jour. L'acronyme signifiant The Multi-Million Language Project To End All Language Projects And Isn't That A Fine Name For A Language. Il se base sur la syntaxe du langage Basic et donne chaque jour, la liste des instructions autorisées de la journée ainsi que la plage des caractères utilisables.


Le langage Malbolge

Celui-ci dédaigne la base binaire de l'informatique actuelle pour se placer dans un système en base 3, avec donc des trits à la place des bits. Il faut dire, à sa décharge, que ce langage n'a pas été créé par un être humain, mais par un programme informatique. De plus, il y a un décalage entre la description théorique du langage et sa mise en application et personne n'arrive vraiment à expliquer où se trouve l'erreur. Voici un court programme écrit en Mabolge et que les connaisseurs reconnaîtront sans peine !
(=<`:9876Z4321UT.-Q+*)M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk**
 hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/.zHGwEDCBA@98543W10/.R,+O<


Le langage GOTO++

Et pour finir après tous ces langages anglo-saxon, voici un langage français bien que son nom ne l'indique pas. La plupart de ses instructions contiennent le mot magique GOTO qui rappellera de bons souvenirs aux anciens aficionados du BASIC : GOTOPRINTDUTEXTE, GOTOPASMALIN, GOTOCHEPA, GOTOFIN, GOTOMODULE, GOTONONNULPOURLESNULS, GOTOUNIVERSPARALLELEouizzz, AUTOGOTOZ, REGOTO, ...
Mais on a aussi des instructions plus spécifiques : OUQUILESTLETEXTE, ENTRETONTEXTE, BEBEPINGOUIN, ProtegeonsLaNature, PrendsUnMorceau, Rxmplacxr, Quelleheureestil, ...

costaud entier i=&j MULTIPLICATION *(14) / &i sup *(0) / i=-*(1)
#!  ic = &i nimportequoitochances
  tmpu = &resultat MULTIPLICATION &ic
  tmpd = &Tableau<&i> MULTIPLICATION ?10000
  tmp  = &tmpu + &tmpd
  tmpt = &i MULTIPLICATION ?2
  tmpt =- ?1
  resultat = &tmp : &tmpt
  Tableau<&i> = &tmp RESTEDELADIVISIONPAR &tmpt!#
  tmp= }&resultat MULTIPLICATION &i{+}&Tableau<&i> MULTIPLICATION *(10000){
  resultat=&tmp : }}*(2) MULTIPLICATION &i{-*(1){
  Tableau<&i>=&tmp RESTEDELADIVISIONPAR }}*(2) MULTIPLICATION &i{-*(1){
 faiblard
Le site GOTO++


D'autres ressources sur ces programmes un peu hallucinants ici : The Esoteric Programming Languages Ring ou là List of esoteric programming languages

Note : Bien que farfelus, beaucoup de ces langages apportent des avancées significatives dans les théories sur l'informatique et les "machines pensantes" et se basent sur des notions mathématiques de la théorie des langages extrêmement complexes.

Posté à 14:54 - Sciences - Commentaires [3] - Rétroliens [0] - Permalien [#]

Le 21 septembre 2004

Les lois informatiques immuables

Nous avons tous eu affaire, un jour ou l'autre, à un programme qui ne fonctionne pas ou un ordinateur qui se plante juste au moment où on veut enregistrer les 8 heures de saisie non-stop dans Word©. Dans ces cas-là, nous nous mettons à hurler à l'encontre de l'ordinateur, du programme et même des informaticiens de m... qui ne savent même pas programmer correctement leur p... de machine de b... de m...

Puis nous tombons dans un profond abattement avant de tout saisir à nouveau.

Mais savez-vous que ces bugs, ces erreurs, ces plantages ne sont pas de la faute des programmeurs. Ils sont dûs à l'application systématique et absolue de lois universelles dont ils ne sont pas responsables, mais qu'ils subissent eux aussi de plein fouet. Voici quelques-unes de ces lois :


Première loi de l'écriture de programmes informatiques :
Tout programme, quel qu'il soit, est obsolète dès qu'il est commercialisé.

Deuxième de l'écriture de programmes informatiques :
Tout nouveau programme coûte plus cher, fonctionne plus lentement et est plus complexe à utiliser que l'ancien qu'il remplace.

Troisième loi de l'écriture de programmes informatiques :
Si un programme est très utile, il devra être changé par un autre.

Quatrième loi de l'écriture de programmes informatiques :
Si un programme est inutile, il est nécessaire d'écrire sa documentation.

Cinquième loi de l'écriture de programmes informatiques :
Tout programme lors de son exécution aura tendance à utiliser toutes les ressources disponibles de l'ordinateur.

Sixième loi de l'écriture de programmes informatiques :
L'utilité d'un programme est inversement proportionnelle à la taille des documents qu'il génère.

Septième de l'écriture de programmes informatiques :
La complexité d'un programme s'accroît jusqu'à ce qu'elle dépasse les capacités du programmeur qui en assure le développement.


Troisième loi de Greer :
Un programme informatique fait ce que vous lui dites de faire, pas ce que vous voudriez qu'il fasse.

Cinquième postulat de Troutman :
Si le programme a été étudié pour rejeter toute entrée erronée, le premier crétin ingénieux trouvera un moyen de faire accepter des mauvaises valeurs par le programme.

Deuxième loi de Kerrington :
À la source de chaque erreur imputée à l'ordinateur, on découvrira au moins 2 erreurs humaines, en comptant bien sûr l'erreur qui consiste à imputer la faute à l'ordinateur.

Quatrième précepte de Zarkov :
Si on met n'importe quoi dans un ordinateur, la seule chose qu'on peut en tirer, c'est n'importe quoi.
Mais ce 'n'importe quoi', en étant passé par une machine coûtant très cher, est comme qui dirait 'anobli', et personne n'ose plus le critiquer.

Neuvième décret de Parot :
Les ordinateurs ne sont pas intelligents. Mais ils pensent qu'ils le sont.

Cinquième postulat d'Everat :
Les erreurs indétectables sont en nombre infini, contrairement aux erreurs détectables dont le nombre est très limité.

Sixième postulat d'Everat :
Faire disparaître un message d'erreur est une illusion : le programmeur n'a simplement pas encore trouvé celui qui l'a remplacé.

Loi des Mises à Jour (anonyme) :
Une application pleinement satisfaisante est toujours complétée, quelques temps après, par une mise à jour buggée.

Remarque de McLuhan :
Grâce à l'ordinateur, on peut faire plus rapidement des choses qu'on n'aurait pas eu besoin de faire sans ordinateur.

Attention de Cupertino
Un ordinateur vous accueille au travail par un "Bienvenue" et une musique et vous dit que la journée de travail est finie par "Erreur système - Ordinateur bloqué".

Posté à 15:16 - Sciences - Commentaires [0] - Rétroliens [0] - Permalien [#]
« Accueil  1