Utilisateur:Romainbehar/Programmation : mots sans répétitions de lettres
Apparence
Liste des mots sans répétition de lettres en français
[modifier le wikicode]Le programme suivant liste les mots, pouvant contenir des tirets, dont les lettres sont uniques. Dans le dump du 2 mars 2018, il trouve 15 mots record de 14 lettres listés dans les curiosités linguistiques.
Le résultat montre que les tirets ne permettent pas de se hisser sur le podium et que les noms propres n’ont qu’un seul représentant : Bricklehampton.
Programme
[modifier le wikicode]#!/usr/bin/perl -w
# trouver les mots sans répétition de lettres (en français)
use strict;
use utf8;
use MediaWiki::DumpFile::FastPages;
use Text::Unidecode;
my $pages = MediaWiki::DumpFile::FastPages->new('frwiktionary-latest-pages-articles.xml');
my $titre;
my $texte;
# lecture de toutes les pages du Wiktionnaire
while (($titre, $texte) = $pages->next) {
# exclu si la page ne contient pas de section {{langue|fr}}
next if (not $texte =~ /\{\{langue\|fr\}\}/m);
# suppression des accents (transforme aussi par exemple 'œ' en 'oe')
my $sansaccents = unidecode($titre);
# exclu si le résultat contient autre chose que des lettres et des tirets
next if (not $sansaccents =~ /^[A-Za-z-]+$/);
# tout en minuscules
my $lettres = lc $sansaccents;
# suppression des tirets (ils ne comptent pas)
$lettres =~ s/-//g;
# tri des lettres dans l'ordre alphabétique en conservant les doublons
my $lettrestriees = (join '', sort { $a cmp $b } split(//, $lettres));
# on passe au suivant si une lettre se répète
next if ($lettrestriees =~ /(\w)\1+/);
# c'est bon : on affiche le nombre de lettres et le mot
print sprintf("%3d", length($lettres)) . " $titre\n";
}