Eban numbers: Difference between revisions

Content added Content deleted
(→‎{{header|Perl 6}}: Tidy up a bit, demo multi character "bans")
m (→‎{{header|Perl 6}}: I twiddle because I can...)
Line 150: Line 150:
sub nban ($seq, $n = 'e') { ($seq).map: { next if .&cardinal.contains(any($n.comb)); $_ } }
sub nban ($seq, $n = 'e') { ($seq).map: { next if .&cardinal.contains(any($n.comb)); $_ } }


sub filter ($n) {
sub filter ($n, $upto) {
my @ban = flat ((1 .. 99),).map: *.&nban($n);
my @ban = flat ((1 .. 99),).map: *.&nban($n);
my @orders = (2 .. 10).map({ 10**$_ X* 1..9 }).map: *.&nban($n);
my @orders = (2 .. $upto).map({ 10**$_ X* 1..9 }).map: *.&nban($n);
for @orders -> @order {
for @orders -> @order {
next unless +@order;
next unless +@order;
Line 167: Line 167:
for 'e', 't', 'subur' -> $n {
for 'e', 't', 'subur' -> $n {


my @bans = filter($n);
my $upto = 10; # 1e10
my @bans = filter($n, $upto);


# DISPLAY
# DISPLAY
Line 176: Line 177:
"{$n}-ban numbers between 1,000 & 4,000: {+@j}\n{@j.gist}\n";
"{$n}-ban numbers between 1,000 & 4,000: {+@j}\n{@j.gist}\n";


for (1 .. 10).map: { 10**$_ } -> $e {
for (1 .. $upto).map: { 10**$_ } -> $e {
my $f = @bans.first( * > $e, :k );
my $f = @bans.first( * > $e, :k );
printf "Up to %14s: %d\n",comma($e), $f ?? +@bans[^$f] !! +@bans;
printf "Up to %14s: %d\n",comma($e), $f ?? +@bans[^$f] !! +@bans;