Pistaches et Boulette (repost)

 https://commons.wikimedia.org/wiki/File:Pile_of_pistachios.jpg

(Un texte ultra-romancé mais véridique).

À 16 ans, une activité importante c’est de me faire contrôler par les keufs. Il faut dire que j’ai un look, euh... un look, comment dire… Bon j’ai un look, OK ?

Je ne comprends pas bien pourquoi les flics cherchent tout le temps à savoir qui je suis. Mais ça ne me dérange pas. Après tout j'ai 16 ans, moi aussi je cherche qui je suis. Je me trimbale avec un immense parka mi-kaki mi-Javel avec de grandes poches. Parfois ils veulent aussi savoir ce qu’il y a dans mes poches.


Des pistaches.

Dans mes poches il y a des pistaches. En tout cas ce jour-là à la gare Saint-Lazare, lors du contrôle d'identité. Des pistaches j'en ai des tas. Parce que mon grand-père fait la nuit à Rungis et m'en ramène par paquets kraft d'un kilo. Ou parfois des amandes, des cacahuètes.

Dans ma poche gauche il y a le paquet entamé. Dans la droite je mets les coquilles. Je ne jette pas par terre. Je grignote à longueur de journée. Il est midi, et donc les deux poches ont sensiblement le même volume.

Me contrôler mobilise trois flics. Un gosse de 16 ans pensez donc. Mais bon, j’ai un look, OK ? Ils souhaitent savoir qui je suis ; facile, je le leur dis. Ils souhaitent vérifier ; facile, je produits ma carte d’étudiant. Ils souhaitent savoir ce que j’ai dans mes poches.

- Des pistaches.

- C’est ça, prends-nous pour des cons.

- Et dans l’autre poche, t’as des pistaches aussi ?

- Non. Si. Enfin que les coquilles.

- Tu gardes les coquilles des pistaches ?

- Je ne jette pas par terre.

- Oh les gars, on est tombé sur un malin.

- Allez, le comique, tu nous vides tes poches direct !

Je sors le paquet de ma poche gauche. Je ne sais pas d’où viennent les pistaches de Pépé. Mais sur le kraft c’est inscrit dans un alphabet exotique. Le genre d’exotisme qui ne fait pas rêver la police.

Et là, je n’en reviens pas : un flic plonge la main dans le paquet et goûte une de mes pistaches. Direct ! Mes parents le payent avec leurs impôts et lui il me taxe une pistache. Et quand bien même ! C’est un inconscient ou quoi ? Et si c’était du Plutonium ? De la came ? De la mort aux vaches ?

Au point où j’en suis je demande s’ils veulent vérifier les coquilles. Je joins le geste à la parole et sors une pleine poignée de ma poche droite.

- Laisse tomber le comique on t’a assez vu.

- Et fait toi faire une carte d’identité.

- Ouais, parce qu’une carte d’étudiant ça suffit pas.

- (dans ma tête) Ben là ça a suffi non ?

Mais je n’ai pas envie de discuter.


Une boulette

Le soir tombe. Toutes mes pistaches sont boulottées. Dont une par un flic. Ma poche de droite est au max de son volume. Avant de rentrer à la maison j’avise une poubelle. J’enlève mon parkanarchiste et je secoue. Toutes les coquilles coulent dans la poubelle. Suivie d’une petite sphère en papier aluminium.

Oh putain la boulette !!!

La boulette de shit que ce mec sympa m’avait donné, fontaine Saint-Michel, il y a bien un mois :

- Essaye mon pote c’est super cool.

- Mais j’ai pas d’argent là. Tu veux des amandes ?

- Nan, prends cette boulette c’est cadeau, j’en ai autant que je veux.

Je n’avais pas essayé. À 16 ans, je travaillais à une tout autre addiction (les filles).

Et cette boulette, dont j’avais oublié jusqu'à l’existence, vivait depuis tout ce temps dans le fond de ma poche droite. En fait il avait raison le flic : une carte d’étudiant n’aurait pas suffi.

Un instant j’envisage une belle carrière de mule de gare. 500 g de shit dans chaque poche. Sous une fine couche de pistaches. Le plan parfait, que je ne trouverai jamais le temps de réaliser (les filles je vous dis).


Epilogue

Des décennies après, avec mon expérience de la vie, avec tout mon pouvoir de mémoire photographique, sémantique, sonore, émotionnelle, il me manque un détail clé de cette scène. Ce détail me taraude, me hante, me réveille transi dans l’effroi.

Sa coquille de pistache, le flic, il en a fait quoi ?

 

-- Metallurgeek

Chaussettes et Batraciens

Imaginez la situation suivante : vous disposez d'une liste de mots dans un fichier LIST. Vous disposez également d'un dictionnaire dans un fichier DICT. Et vous voulez savoir si tous les mots de LIST apparaissent bien dans DICT.

C'est un problème fréquent en informatique. LIST contient par exemple tous les batraciens et DICT contient tous les animaux. Demander si LIST est incluse dans DICT revient à demander si tous les batraciens sont des animaux.

Dans ce billet je montre deux méthodes en ligne de commande. La première méthode n'est pas efficace mais elle est compacte et facile à mémoriser. La seconde méthode est beaucoup plus efficace.


Méthode 1: grep me, grep me my friend


La première méthode utilise grep(*) dans sa variante fgrep qui cherche les termes littéraux plutôt que les regex. Voici la ligne de commande :

fgrep -vxf DICT LIST

Il faut un peu de temps - et sans doute quelques essais - pour se convaincre que ça réalise bien un test d'inclusion. Cette commande prend tous les mots de DICT et les retranche de LIST. Si au moins un mot est affiché c'est qu'il n'a pas été retranché. Donc il n'était pas dans DICT. Donc LIST n'est pas incluse dans DICT.

Cette solution est très compacte : une seule commande. En revanche la complexité est multiplicative. Je vous passe les détails de calcul, mais c'est mauvais.


Méthode 2: tri et décompte


L'idée est d'amalgamer DICT + DICT + LIST et de conserver seulement les termes uniques. Trois cas sont possibles. Cas 1 : un terme est dans DICT et dans LIST alors il se retrouve trois fois dans l'amalgame et on ne le conserve pas. Cas 2 : un terme est dans DICT mais pas dans LIST alors il se retrouve deux fois dans l'amalgame et on ne le conserve pas. Cas 3 : un terme est dans LIST mais pas dans DICT alors il se retrouve une fois dans l'amalgame et on le conserve. Voici la ligne de commande :

sort <(sed p DICT) <(sort -u LIST) | uniq -u

Il y a des petites astuces. Le sed p DICT c'est pour dupliquer chaque ligne de DICT. Le sort -u LIST c'est pour éliminer d'éventuels doublons dans LIST (qui sinon fausseraient le cas 3). Le uniq -u à la fin c'est pour conserver seulement les termes uniques.

Concernant la complexité : dupliquer les lignes de DICT c'est linéaire, amalgamer c'est linéaire, compter et garder seulement les termes uniques à la fin c'est linéaire. La seule partie non-linéaire c'est le tri de l'amalgame. Cette partie est quasi-linéaire c'est-à-dire en (2m+n).log(2m+n). En pratique c'est bien, même s'il existe encore mieux avec des tables de hachage.


Exemple : un dictionnaire d'animaux, une liste de batraciens et une chaussette

$ cat DICT | column
girafe          singe           serpent
crapaud         panthère        kangourou
éléphant        crocodile       anaconda
zèbre           triton          gnou
grenouille      autruche        mangouste
lion            hippopotame     ornithorynque
tigre           salamandre      gazelle
$ cat LIST 
triton
crapaud
chaussette 
salamandre
grenouille
fgrep -vxf DICT LIST
chaussette
$ sort <(sed p DICT) <(sort -u LIST) | uniq -u
chaussette

Les deux commandes ont correctement détecté l'intrus. Un seul intrus suffit à déduire que LIST n'est pas incluse dans DICT. Si maintenant on enlève la chaussette de la liste, les deux commandes ne détectent plus rien, leur sortie est vide, et on en déduit que LIST est incluse dans DICT :

fgrep -vxf DICT LIST
$ sort <(sed p DICT) <(sort -u LIST) | uniq -u 


Test booléen


Pour transformer la première commande en un per test booléen, j'utilise l'option quiet de fgrep et des portes logiques && et ||. C'est une façon de faire parmi d'autre mais j'aime le côté one-liner(**) :

    fgrep -vxqf DICT LIST && echo KO || echo OK

Pour la seconde commande, uniq n'offre pas d'option quiet, alors j'utilise une vielle ruse indienne :

    sort <(sed p DICT) <(sort -u LIST) | uniq -u |
    read _ && echo KO || echo OK


Epilogue

J'espère que ce billet vous aura intéressé. Parce que sinon vous venez de perdre un temps précieux à le lire jusqu'ici. Moche. Nan, vraiment. Moche.

Au fait, si on n'est pas joueur/bricoleur on peut aussi utiliser la merveilleuse commande "comm" qui est typiquement faite pour les comparaisons de liste.

comm -13 <(sort -u DICT) <(sort -u LIST) | read _ && echo KO || echo OK

La complexité est meilleure m.log(m) + n.log(n) quoique toujours quasi-linéaire, et c'est assez compact.


(*) Les personnes qui me connaissent savent que je suis obsessionnel de grep et plus généralement des regex. Je me lève grep, me mange des grep au sarrasin, je me couche grep et je recommence le lendemain. Quant aux personnes qui ne me connaissent pas, elles ignorent la chance qu'elles ont.

(**) Quel est le terme français correct pour one-liner ? "Un-lignard" ? Ou "Solicode" "Solocode" "Monocode" ? Un "codounet" une "Codette" ? Pfffff....

ALCEST - Améthyste

Je retombe sur cette vidéo d'Alcest. Le morceau Améthyste mis en avant sur leur dernière tournée. 

D'habitude je n'apprécie pas trop les vidéos concert/live. Mais là je retrouve *précisément* l'ambiance du concert, ce moment précieux que j'ai pu vivre sur place.

Tout y est : salle à taille humaine, proximité, public inspiré, décor émouvant, et Alcest au sommet de son art.




Alohomora Sésame Mellon

  

Aux fins-fonds du cyberespace
Les mots-clé font, ça m'agace
De fort mauvais mots de passe