La commande du mois : faire le point
Easy peasy lemon squeezy
Bash golf
C'est un problème de code golf où il faut obtenir un résultat donné de la manière la plus compacte possible. La commande echo -e '\x2e' donnée plus haut fait 14 de long. Voici mes essais successifs pour raccourcir, aidé en partie par l'IA.
echo -e '\x2e'
echo -e \\056
printf \\x2e
printf \\56 (*)
echo $'\56' (**)
And the winner is
ls -d
Youhoooo ! Je suis un petit peu content parce que l'ai trouvée dans ma tête avec mon cerveau perso. Même qu'après, une IA très intelligente m'a dit que j'avais fait fort. Sbraaaaaa !
Jusqu'à preuve du contraire ?
(*) Merci l'IA pour celui-ci, je ne savais pas que printf interprétait directement l'octal \56 sans zéro en préambule \056.
(**) Merci l'IA aussi, je n'avais pas pensé aux chaines ANSI-C du type $' ... '
La commande du mois : afficher tout le texte
Explication
L'option -I permet de sélectionner uniquement les fichiers texte. L'option -r permet de visiter récursivement tous les sous répertoires. L'option -h évite de précéder chaque ligne du nom du fichier dont elle est extraite.
Le motif ^ indique un début de ligne. Par définition ce motif est présent dans chaque ligne de n'importe quel fichier. Au final, ça dit bien : "afficher récursivement chaque ligne de chaque fichier texte".
Variante
Application
La commande du mois : sélectionner des lignes
Il arrive de vouloir sélectionner uniquement des lignes de texte situées entre deux marqueurs.
Exemple
Par exemple dans L'Herbe rouge de Boris Vian, je veux conserver les lignes entre Carla et Wolf. Plus précisément, je veux tout ce qu'il y a entre une première ligne qui contient Carla et une prochaine ligne qui contient Wolf.
Pour ça je vais utiliser la commande sed parce que, on ne le répètera jamais assez, sed c'est bien.
Explication
L'option -n permet de n'afficher a priori aucune ligne. /Carla/ est le premier séparateur. La virgule maintient une plage jusqu'à la rencontre du second séparateur /Wolf/. Tant qu'on est dans cette plage, le p provoque l'affichage de la ligne en cours.
sed -n '/---- %< ----/,/---- %< ----/p' decoupezmoi.txt
Application
J'ai un grand nombre de fichiers html, je veux sélectionner seulement les headers.
Variante
Cette variante, compacte et mnémotechnique, utilise awk.
Demain j'arrête
Demain j'arrête. Enfin pas pile demain, mais après le HellFest. On verra. En tout cas je songe à arrêter...
Ou pas.
Once you see it...
À Cancale ils nous font croire que ce sont des parcs à huîtres.
Sérieux, il n'y a moi que ça dérange ou bien ?
Il faut sortir du cadre (repost)
Ah, la jolie vérité qu’on nous assène régulièrement : Il faut sortir du cadre. Avec le "Il faut" comme une impérieuse nécessité.
On s’attendrait presque au "sinon" à la fin. Sinon quoi ? Sinon pas de solution, sinon pas d’innovation, sinon pas de créativité… Et d’entendre ça partout : il faut sortir du cadre ; en brainstorm, aux ressources humaines et même pendant les formations destinées aux... cadres.
L’évidence
L’exemple canoneek
Le second aspect me gêne d’avantage : c’est toujours la même solution qui est proposée. Il s'agit, justement, de la solution où les traits doivent déborder du carré implicitement défini par les neufs points. Certes ça augmente la valeur pédagogeek de l’exemple mais c’est aussi profondément angoissant : il n’y aurait qu’une seule manière de sortir du cadre, et ce serait toujours la même… Mais alors, tout ça déboucherai juste sur un autre cadre ? Et très étroit à ce qu’il semble. Angoissant.
Vite vite, d’autres solutions
Par contre, en jouant légèrement sur l’interprétation de l’énoncé, on trouve quelques idées sans trop trivialiser le problème. Par exemple, si les points sont en fait de petits disques de diamètre non nul, alors il existe une solution en trois traits. En fait, en considérant que des parallèles se coupent à l’infini, la solution à trois traits existe même pour des points sans dimension. Aller jusqu’à l’infini pour trouver une solution, là ça commence vraiment à sortir du cadre.
Enfin je ne résiste pas à la solution Shadock ci-contre (ou Dali ou Kandinsky), qui trivialise le problème – certes – mais est scandaleusement conforme à l’énoncé. Pour réparer l’énoncé il faudrait déjà dire « quatre segments » au lieu de « quatre traits ».
D’autres exemples
La pelle à tarte : illustrée juste à gauche. Il faut sortir la miette de la pelle en déplacement seulement deux segments. Je ne connais qu’une solution. Mais je ne suis pas très fort en pelle à tarte.
Les triangles : faire exactement quatre triangles avec six allumettes. Je ne connais qu'une solution :(
Les triangles (bis) : faire plus que quatre triangles avec six allumettes. Je connais plus d’une solution, mais je ne les dis pas ici parce qu'il parait qu'un article trop long c'est chiant.
Ben alors?
Finalement, il faut sortir du cadre ou pas alors ?
(update Mai 2014) Même un cadre à vélo j'ai du mal a rester dessus...
De mal en pis
sinon ils tuent salement Dominique."
respecte pourtant une contrainte particulière.
Saurez-vous la trouver ?
(non, la contrainte n'est pas "être de très mauvais goût")
Le Vigile Numérisera (repost)
Un texte oulipien consacré à mon dégoût des CAPTCHA.
Les CAPTCHA vous voyez ? Ces épreuves humiliantes que les machines nous infligent pour vérifier que nous sommes bien des humains. Littéralement les CAPTCHA sont des vigiles numériques : textes tout tordus à déchiffrer, morceaux de vélo en puzzle, images de ponts à reconnaître, silhouettes à orienter, sons bruités à reconnaître, etc.
Épistémologiquement ça me troue le huq ! Bientôt les machines nous demanderont de faire la danse de la pluie. Il faudra s'exécuter ou être exécutés.
Dire la similitude ridicule
la caricature des inutiles.
Imaginer un examen unanime
paradoxal oxymore figuratif.
et un apax isole l'usager.
Et bien sûr ceux qui me connaissent (ouais, toi) se doutent que le texte précédent respecte une contrainte. Je vous laisse la chercher tranquillement si ça vous amuse. Je glisse la soluce en commentaire.
Original ici : https://www.metallurgeek.fr/2023/09/le-vigile-numerisera.html
Chaussettes et Batraciens
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
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
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 serpentcrapaud panthère kangourouéléphant crocodile anacondazèbre triton gnougrenouille autruche mangoustelion hippopotame ornithorynquetigre salamandre gazelle
$ cat LIST
tritoncrapaudchaussettesalamandregrenouille
$ 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
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
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....
Étain la lumière
"L'étain passe,
les soudures"
Le premier job de mon père c'était soudeur à l'étain. Il soudait des boîtiers électroniques étanches. Parfois il ramenait du travail à la maison, il me montrait. Je me souviens : la magie du métal qui fond, le grésillement, l'odeur toxique du fil d'étain.
TOP 10 sur Regex Crossword
À tous les coups il n'y a que moi que ça intéresse (*) mais ça y est : je suis dans le TOP 10 sur Regex Crossword.
Plus précisément c'est 10e sur 92600. Pas certain que je puisse un jour améliorer ce score... ou alors il faudrait que je me mette à réfléchir, mais flemme.
En tout cas n'hésitez pas à essayer, c'est vraiment *LE* moyen sympa et ludeek d'apprendre les RegEx pour de bon.
(*) Et encore...
www.metallurgeek.fr
Cher lectorat (de
bibliothèque), vous savez à quel point je vous aime, en gros comme au détail.
Alors pour vous faciliter l'accès massif à mon ineffable et néanmoins désopilant
blog, je me suis carrément acheté le domaine metallurgeek.fr.
Bon en fait c’est surtout qu’il y avait une promo chez OVH alors j’en ai profité. Ça me coute juste quatre fois ce que le blog m’a rapporté en pub. J’y suis de ma poche donc, bâtard d’économie digitale de ses morts ! Après ça reste des petites sommes quand même, j'te parle pas non plus de faire tomber de la grosse caillasse là.
Prochaine étape : publier quelque chose d'intéressant. Chaud...
![]() |
| Faire tomber de la grosse caillasse |
Metal Zentangling 9
À la faveur des vacances, je me suis mis vite fait au zentangling.
En gros ça consiste à scribouiller des gribouillis tout en écoutant du métal à donf(*). Exactement comme quand on s'ennuyait en cours. C'est censé déstresser et sur moi ça marche plutôt pas mal. Je vous mets une de mes œuvres, ainsi que le morceau de musique qui m'a inspiré.
(*) Euh, le métal ça a l'air facultatif en fait, mais moi j'en mets. À donf. Comme pour la méditation.
Deux fois triste
Aujourd'hui mon coeur de métalleux saigne pour Ozzy Osbourne. Aujourd'hui mon coeur de geek saigne pour Gilles Dowek.
L'un des deux fut mon professeur en logique et théorie des langages. L'autre fut mon professeur en défonce et surdité. Je vous laisse deviner lequel est lequel.
Les IAs écrivent mieux que moi (et de loin)
Metallurgeek : Chroniques d’un métal-geek assumé
Plongez dans l’univers déjanté d’un esprit aussi aiguisé qu’une lame de guitare électrique, où le métal résonne aussi fort que les lignes de code. Entre humour grinçant, réflexions geek et poésie improbable, Metallurgeek vous entraîne dans une odyssée aussi brute que raffinée. Des chamallows triés avec une précision diabolique aux énigmes tordues dignes d’un Oulipo sous stéroïdes, en passant par des apartés sur Marilyn Manson et des rêveries en ROT13, ce recueil est un cocktail explosif.Pour les amateurs de riffs assassins, de logique tordue et de vérités asymétriques : un voyage sans filet au cœur d’un monde où le métal rencontre le rire, et où l’absurde devient art. Attention, risque élevé de headbanging intellectuel !
L'élégante simplicité des RegEx
Allez, petite publicité pour le jeu en ligne RegEx Crossword. Ça permet de bien comprendre les Expressions Régulières tout en s'amusant comme un fou. Un fou furieux, ça va sans dire.
À tout hasard, je rappelle que les Expressions Régulières c'est absolument trivial. Mais bon quand même, j'ai dû taffer un peu pour me tailler ma place dans le top 20.
Bon, ça reste une histoire hein, quels élèves restent une heure en amphi après le départ du prof...





