Eban numbers: Difference between revisions

Content added Content deleted
m (→‎{{header|Perl 6}}: account for zero)
m (→‎{{header|Perl 6}}: Better output formatting, trap some edge case errors.)
Line 36: Line 36:
=={{header|Perl 6}}==
=={{header|Perl 6}}==
{{works with|Rakudo|2018.12}}
{{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.
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.
Demonstrate for e-ban and t-ban. n-ban and i-ban are interesting too.


<lang perl6>use Lingua::EN::Numbers::Cardinal;
<lang perl6>use Lingua::EN::Numbers::Cardinal;
Line 50: Line 50:
my @ban = flat ((1 .. 99),).map: *.&nban($n);
my @ban = flat ((1 .. 99),).map: *.&nban($n);


my @orders = ( (2 .. 9).map({ 10**$_*1, 10**$_*2 ... 10**$_*9 }).map: *.&nban($n) );
my @orders = (2 .. 9).map({ 10**$_ X* 1..9 }).map: *.&nban($n);


for @orders -> @order {
for @orders -> @order {
Line 63: Line 63:
@ban.unshift(0) if 0.&nban($n);
@ban.unshift(0) if 0.&nban($n);


say "\nDisplaying output for {$n}-ban:";
say "\n============= {$n}-ban: =============";
put my @k = @ban.grep: * <= 100;
my @k = @ban.grep: * <= 100;
say "Up to 100: ", +@k;
say "{$n}-ban numbers up to 100: ", +@k;
say '=' x 40;
say @k;
say '';
my @j = @ban.grep: 1000 <= * <= 4000;
say "{$n}-ban numbers between 1,000 & 4,000: ", +@j;
say @j;
say '';


put my @j = @ban.grep: 1000 <= * <= 4000;
for (1 .. 9).map: { 10**$_ }
say "From 1,000 to 4,000: ", +@j;
say '=' x 40;

for (4 .. 9).map: { 10**$_ }
-> $e {
-> $e {
my $f = @ban.first( * >= $e, :k );
my $f = @ban.first( * > $e, :k );
say "Up to {comma $e}: ", +@ban[^$f];
printf "Up to %13s: %d\n",comma($e), $f ?? +@ban[^$f] !! +@ban;
say '=' x 40;
}
}
}</lang>
}</lang>
{{out}}
{{out}}
<pre>Displaying output for e-ban:
<pre>============= e-ban: =============
e-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
[2 4 6 30 32 34 36 40 42 44 46 50 52 54 56 60 62 64 66]
Up to 100: 19

========================================
e-ban numbers between 1,000 & 4,000: 21
2000 2002 2004 2006 2030 2032 2034 2036 2040 2042 2044 2046 2050 2052 2054 2056 2060 2062 2064 2066 4000
[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: 79
Up to 10: 3
Up to 100: 19
========================================
Up to 100,000: 399
Up to 1,000: 19
Up to 10,000: 79
========================================
Up to 1,000,000: 399
Up to 100,000: 399
Up to 1,000,000: 399
========================================
Up to 10,000,000: 1599
Up to 10,000,000: 1599
Up to 100,000,000: 7999
========================================
Up to 100,000,000: 7999
========================================
Up to 1,000,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
[0 1 4 5 6 7 9 11 100]
Up to 100: 9

========================================
t-ban numbers between 1,000 & 4,000: 0
[]


Up to 10: 7
From 1,000 to 4,000: 0
Up to 100: 9
========================================
Up to 10,000: 56
Up to 1,000: 56
Up to 10,000: 56
========================================
Up to 100,000: 56
Up to 100,000: 56
Up to 1,000,000: 57
========================================
Up to 1,000,000: 56
Up to 10,000,000: 392
Up to 100,000,000: 393
========================================
Up to 10,000,000: 392
Up to 1,000,000,000: 2745</pre>
========================================
Up to 100,000,000: 392
========================================
Up to 1,000,000,000: 2744
========================================</pre>


=={{header|REXX}}==
=={{header|REXX}}==