[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