1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| #!/usr/bin/perl
use warnings;
use strict;
my %unites = (0, '', 1, 'un', 2, 'deux', 3, 'trois', 4, 'quatre',
5, 'cinq', 6, 'six', 7, 'sept', 8, 'huit', 9, 'neuf',
10, 'dix', 11, 'onze', 12, 'douze', 13, 'treize', 14, 'quatorze',
15, 'quinze', 16, 'seize', 17, 'dix-sept', 18, 'dix-huit', 19, 'dix-neuf');
my %dizaines = (0, '', 1, 'dix', 2, 'vingt', 3, 'trente', 4, 'quarante',
5, 'cinquante', 6, 'soixante', 7, 'soixante', 8, 'quatre-vingt', 9, 'quatre-vingt');
my %groupes = (0, '', 1, 'mille', 2, 'million', 3, 'milliard', 4, 'billion');
my $groupe=0;
my $nombre;
$nombre="1501011161321";
print "$nombre\n";
my @mots = ();
my $local = $nombre;
1 while ($local =~ s/(\S)(\d{3})(\s|$)/$1 $2$3/);
my @paquets=split(/ /,$local);
# @paquets=reverse(@paquets);
my $i = @paquets-1;
foreach my $paquet (@paquets) {
my $orig_paquet = $paquet;
my ($centaine, $dizaine, $unite) = ($paquet =~ m/(\d)?(\d)?(\d)/);
$paquet = '';
$paquet .= $unites{$centaine} if (defined $centaine and ($centaine != 1));
$paquet .= ' cent' if (defined $centaine and ($centaine > 1));
$paquet .= 's' if (defined $centaine and ($centaine > 1) and ($dizaine == 0) and ($unite == 0));
$paquet .= 'cent' if (defined $centaine and ($centaine == 1));
$paquet .= ' ' if (defined $centaine and ($centaine != 0));
$paquet .= "$dizaines{$dizaine}" if (defined $dizaine and ($dizaine != 1));
$paquet .= ' ' if (defined $dizaine and ($dizaine != 0));
$dizaine = 1 if (defined $dizaine and (($dizaine == 7) or ($dizaine == 9)));
if (defined $dizaine and ($dizaine == 1)) {
$paquet .= $unites{$dizaine.$unite};
$unite=0;
}
$paquet .= $unites{$unite};
$paquet =~ s/(nte|ngt) (\w)/$1-$2/;
$paquet =~ s/(nte)-(un|onze)/$1 et $2/;
$paquet =~ s/(vingt)-(un)/$1 et $2/;
$paquet = "" if (($i == 1) and ($orig_paquet == 1));
push (@mots, $paquet);
push (@mots, " $groupes{$i}");
$mots[-1] .= "s" if (($orig_paquet > 1) and ($i > 1));
$mots[-1] .= " ";
$i--;
}
print @mots;
print "\n"; |
Partager