[Perl] p6 problème dépilatoire

Alain Barbason alainbb at proximus.be
Sam 28 Oct 12:38:16 CEST 2017


problème aussi avec say spell-number(21);


Le 28/10/17 à 12:07, Dominique a écrit :
> perl6 nombre_en_mots.p6|sed -e 's/un cent/cent/'
>
> oui je sais, c'est pas beau
>
>
> ma version finale.
>
>
> my @names = <zero un deux trois quatre cinq six sept huit neuf dix 
> onze douze treize quatorze quinze seize dix-sept dix-huit dix-neuf 
> vingt trente quarante cinquante>;
>
> multi sub spell-number(Int $n where {$n < 20}) {
> return @names[$n];
> }
> multi sub spell-number(Int $n where {$n < 60}) {
>         my $r = @names[$n / 10 + 18];
>         $r ~= '-' ~ @names[$n % 10] if $n % 10;
>         return $r;
> }
> multi sub spell-number(Int $n where {$n < 80}) {
> my $r ~= 'soixante ' ~ @names[$n-60];
> return $r;
> }
> multi sub spell-number(Int $n where {$n < 100}) {
> my $r ~= 'quatre-vingt ' ~ @names[$n-80];
> return $r;
> }
> multi sub spell-number(Int $n where {$n < 1000}) {
> return spell-part($n, 100, 'cent');
> }
>
> multi sub spell-number(Int $n where {$n < 1000000}) { return 
> spell-part($n,1000,"mille")};
> multi sub spell-number(Int $n where {$n < 1000000000}) { return 
> spell-part($n,1000000,"million")};
> multi sub spell-number(Int $n where {$n < 1000000000000}) { return 
> spell-part($n,1000000000,"milliard")};
> multi sub spell-number(Int $n where {$n < 1000000000000000}) { return 
> spell-part($n,1000000000000,"billion")};
> multi sub spell-number(Int $n where {$n < 1000000000000000000}) { 
> return spell-part($n,1000000000000000,"billiard")};
> multi sub spell-number(Int $n where {$n < 1000000000000000000000}) { 
> return spell-part($n,1000000000000000000,"trillion")};
> multi sub spell-number(Int $n where {$n < 1000000000000000000000000}) 
> { return spell-part($n,1000000000000000000000,"trilliard")};
> multi sub spell-number(Int $n where {$n < 
> 1000000000000000000000000000}) { return 
> spell-part($n,1000000000000000000000000,"quadrillion")};
> multi sub spell-number(Int $n where {$n < 
> 1000000000000000000000000000000}) { return 
> spell-part($n,1000000000000000000000000000,"quadrilliard")};
> multi sub spell-number(Int $n where {$n < 
> 1000000000000000000000000000000000}) { return 
> spell-part($n,1000000000000000000000000000000,"quintillion")};
> multi sub spell-number(Int $n where {$n < 
> 1000000000000000000000000000000000000}) { return 
> spell-part($n,1000000000000000000000000000000000,"quintilliard")};
> multi sub spell-number(Int $n where {$n < 
> 1000000000000000000000000000000000000000}) { return 
> spell-part($n,1000000000000000000000000000000000000,"sextillion")};
> multi sub spell-number(Int $n where {$n < 
> 1000000000000000000000000000000000000000000}) { return 
> spell-part($n,1000000000000000000000000000000000000000,"sextilliard")};
> multi sub spell-number(Int $n where {$n < 
> 1000000000000000000000000000000000000000000000}) { return 
> spell-part($n,1000000000000000000000000000000000000000000,"septillion")};
> multi sub spell-number(Int $n where {$n < 
> 1000000000000000000000000000000000000000000000000}) { return 
> spell-part($n,1000000000000000000000000000000000000000000000,"septilliard")};
> multi sub spell-number(Int $n where {$n < 
> 1000000000000000000000000000000000000000000000000000}) { return 
> spell-part($n,1000000000000000000000000000000000000000000000000,"octillion")};
> multi sub spell-number(Int $n where {$n < 
> 1000000000000000000000000000000000000000000000000000000}) { return 
> spell-part($n,1000000000000000000000000000000000000000000000000000,"octilliard")};
> multi sub spell-number(Int $n where {$n < 
> 1000000000000000000000000000000000000000000000000000000000}) { return 
> spell-part($n,1000000000000000000000000000000000000000000000000000000,"nonillion")};
> multi sub spell-number(Int $n where {$n < 
> 1000000000000000000000000000000000000000000000000000000000000}) { 
> return 
> spell-part($n,1000000000000000000000000000000000000000000000000000000000,"nonilliard")};
> multi sub spell-number(Int $n where {$n < 
> 1000000000000000000000000000000000000000000000000000000000000000}) { 
> return 
> spell-part($n,1000000000000000000000000000000000000000000000000000000000000,"decillion")};
>
> sub spell-part(Int $n, Int $base, Str $name) {
> my $r = spell-number(($n / $base).Int) ~ ' ' ~ $name;
> $r ~= ' ' ~ spell-number($n % $base) if $n % $base;
> return $r;
> }
>
> say spell-number(147);
> say spell-number(397);
> say spell-number(452397);
> say spell-number(123452197);
> say spell-number(123452397187);
> say spell-number(1231452397287);
>
>
>
>
> Le 27 octobre 2017 à 21:33, Dominique <d.minix at gmail.com 
> <mailto:d.minix at gmail.com>> a écrit :
>
>     suite a la lecture de "using perl6" je tombe sur le cas du
>     spell-number.
>     chouette me dis-je, je vais en faire une version frenchy pour
>     m’entraîner au 6lang, j'y suis presque mais ...
>     je m'arrache les cheveux à solutionner élégamment le problème
>     suivant, je n'arrive pas a faire disparaître le "un cent"
>     que me conseilleriez vous ? sachant que pour millions et milliard
>     je veux bien le garder.
>
>
>     my @names = <zero un deux trois quatre cinq six sept huit neuf dix
>     onze douze treize quatorze quinze seize dix-sept dix-huit dix-neuf
>     vingt trente quarante cinquante>;
>
>     multi sub spell-number(Int $n where {$n < 20}) {
>     return @names[$n];
>     }
>     multi sub spell-number(Int $n where {$n < 60}) {
>             my $r = @names[$n / 10 + 18];
>             $r ~= '-' ~ @names[$n % 10] if $n % 10;
>             return $r;
>     }
>     multi sub spell-number(Int $n where {$n < 80}) {
>     my $r ~= 'soixante ' ~ @names[$n-60];
>     return $r;
>     }
>     multi sub spell-number(Int $n where {$n < 100}) {
>     my $r ~= 'quatre-vingt ' ~ @names[$n-80];
>     return $r;
>     }
>     multi sub spell-number(Int $n where {$n < 1000}) {
>     return spell-part($n, 100, 'cent');
>     }
>     multi sub spell-number(Int $n where {$n < 1_000_000}) {
>     return spell-part($n, 1000, 'mille');
>     }
>     sub spell-part(Int $n, Int $base, Str $name) {
>     my $r = spell-number(($n / $base).Int) ~ ' ' ~ $name;
>     $r ~= ' ' ~ spell-number($n % $base) if $n % $base;
>     return $r;
>     }
>
>     say spell-number(147);
>     say spell-number(397);
>     say spell-number(452397);
>
>
>
>
> _______________________________________________
> Perl mailing list
> Perl at mongueurs.net
> http://listes.mongueurs.net/mailman/listinfo/perl

-------------- section suivante --------------
Une pièce jointe HTML a été nettoyée...
URL: <http://listes.mongueurs.net/mailman/private/perl/attachments/20171028/2d963d8b/attachment-0001.html>


Plus d'informations sur la liste de diffusion Perl