Eban numbers: Difference between revisions

m
→‎{{header|Perl 6}}: Better output formatting, trap some edge case errors.
m (→‎{{header|Perl 6}}: account for zero)
m (→‎{{header|Perl 6}}: Better output formatting, trap some edge case errors.)
Line 36:
=={{header|Perl 6}}==
{{works with|Rakudo|2018.12}}
Modular approach, very little is hard coded. Change the order of magnitude limits to adjust the search/display ranges. Change the letter given to the nban sub to change which letter to disallow.
 
Demonstrate for e-ban and t-ban. n-ban and i-ban are interesting too.
 
<lang perl6>use Lingua::EN::Numbers::Cardinal;
Line 50:
my @ban = flat ((1 .. 99),).map: *.&nban($n);
 
my @orders = ( (2 .. 9).map({ 10**$_*1, 10X**$_*2 1... 10**$_*9 }).map: *.&nban($n) );
 
for @orders -> @order {
Line 63:
@ban.unshift(0) if 0.&nban($n);
 
say "\nDisplaying output forn============= {$n}-ban: =============";
put my @k = @ban.grep: * <= 100;
say "Up{$n}-ban numbers up to 100: ", +@k;
say '=' x 40@k;
say '=' x 40;
my @j = @ban.grep: 1000 <= * <= 4000;
say "From{$n}-ban numbers between 1,000 to& 4,000: ", +@j;
say '=' x 40@j;
say '';
 
putfor my(1 @j =.. @ban9).grepmap: 1000 <={ 10**$_ <= 4000;}
say "From 1,000 to 4,000: ", +@j;
say '=' x 40;
 
for (4 .. 9).map: { 10**$_ }
-> $e {
my $f = @ban.first( * >= $e, :k );
sayprintf "Up to {comma $e}%13s: %d\n",comma($e), $f ?? +@ban[^$f] !! +@ban;
say '=' x 40;
}
}</lang>
{{out}}
<pre>Displaying output for============= e-ban: =============
Upe-ban numbers up to 100: 19
[2 4 6 30 32 34 36 40 42 44 46 50 52 54 56 60 62 64 66]
Up to 100: 19
 
========================================
Frome-ban numbers between 1,000 to& 4,000: 21
[2000 2002 2004 2006 2030 2032 2034 2036 2040 2042 2044 2046 2050 2052 2054 2056 2060 2062 2064 2066 4000]
From 1,000 to 4,000: 21
 
========================================
Up to 10,000: 793
Up to 100: 919
========================================
Up to 100 1,000: 39919
Up to 100,000 10,000: 39279
========================================
Up to 1,000 100,000: 399
Up to 100 1,000,000: 7999399
========================================
Up to 10,000,000: 1599
Up to 1,000 100,000,000: 27447999
========================================
Up to 100,000,000: 7999
========================================
Up to 1,000,000,000: 7999
========================================
 
=========================== t-ban: =============
Displaying output for t-ban:
t-ban numbers up to 100: 9
[0 1 4 5 6 7 9 11 100]
Up to 100: 9
 
========================================
Fromt-ban numbers between 1,000 to& 4,000: 0
[]
 
Up to 10: 7
From 1,000 to 4,000: 0
Up to 100: 9
========================================
Up to 10 1,000: 56
Up to 10,000: 56
========================================
Up to 100,000: 56
Up to 1,000,000: 57
========================================
Up to 1 10,000,000: 56392
Up to 100,000,000: 393
========================================
Up to 101,000,000,000: 3922745</pre>
========================================
Up to 100,000,000: 392
========================================
Up to 1,000,000,000: 2744
========================================</pre>
 
=={{header|REXX}}==
10,339

edits