diff options
| -rwxr-xr-x | challenge-079/roger-bell-west/perl/ch-1.pl | 24 | ||||
| -rwxr-xr-x | challenge-079/roger-bell-west/perl/ch-2.pl | 41 | ||||
| -rwxr-xr-x | challenge-079/roger-bell-west/python/ch-1.py | 21 | ||||
| -rwxr-xr-x | challenge-079/roger-bell-west/python/ch-2.py | 48 | ||||
| -rwxr-xr-x | challenge-079/roger-bell-west/raku/ch-1.p6 | 22 | ||||
| -rwxr-xr-x | challenge-079/roger-bell-west/raku/ch-2.p6 | 36 |
6 files changed, 192 insertions, 0 deletions
diff --git a/challenge-079/roger-bell-west/perl/ch-1.pl b/challenge-079/roger-bell-west/perl/ch-1.pl new file mode 100755 index 0000000000..e20c92f5e2 --- /dev/null +++ b/challenge-079/roger-bell-west/perl/ch-1.pl @@ -0,0 +1,24 @@ +#! /usr/bin/perl + +use strict; +use warnings; + +use Math::GMPz qw( :mpz ); + +use Test::More tests => 2; + +is(csb(4),5,'example 1'); +is(csb(3),4,'example 2'); + +sub csb { + my $tot=shift; + my $n=Math::GMPz->new(1); + my $bits=Math::GMPz->new(0); + my $m=Math::GMPz->new(1000000007); + while ($n <= $tot) { + Rmpz_add_ui($bits,$bits,Rmpz_popcount(Math::GMPz->new($n))); + Rmpz_mod($bits,$bits,$m); + Rmpz_add_ui($n,$n,1); + } + return Rmpz_get_str($bits,10); +} diff --git a/challenge-079/roger-bell-west/perl/ch-2.pl b/challenge-079/roger-bell-west/perl/ch-2.pl new file mode 100755 index 0000000000..e5b9e02893 --- /dev/null +++ b/challenge-079/roger-bell-west/perl/ch-2.pl @@ -0,0 +1,41 @@ +#! /usr/bin/perl + +use strict; +use warnings; + +use List::Util qw(min max); + +use Test::More tests => 2; + +is(capacity([2,1,4,1,2,5]),6,'example 1'); +is(capacity([3,1,3,1,1,5]),6,'example 2'); + +histo([2,1,4,1,2,5]); +histo([3,1,3,1,1,5]); + +sub capacity { + my @n=@{shift @_}; + my $cap=0; + foreach my $r (min(@n)..max(@n)) { + my @b=grep {$n[$_]>=$r} (0..$#n); + if (scalar @b > 1) { + foreach my $i (0..$#b-1) { + $cap += $b[$i+1]-$b[$i]-1; + } + } + } + return $cap; +} + +sub histo { + my @n=@{shift @_}; + my $mx=max(@n); + my $cw=int(log($mx+1)/log(10)+.9999); + for (my $r=$mx;$r>0;$r--) { + my @row=(sprintf('%'.$cw.'d',$r)); + push @row,map {($n[$_]>=$r?'#' x $cw:' ' x $cw)} (0..$#n); + print join(' ',@row),"\n"; + } + print join(' ',('-' x $cw) x (1+scalar @n)),"\n"; + print join(' ',map {sprintf('%'.$cw.'s',$_)} ('',@n)),"\n"; +} diff --git a/challenge-079/roger-bell-west/python/ch-1.py b/challenge-079/roger-bell-west/python/ch-1.py new file mode 100755 index 0000000000..c3c5aff095 --- /dev/null +++ b/challenge-079/roger-bell-west/python/ch-1.py @@ -0,0 +1,21 @@ +#! /usr/bin/python + +import unittest + +def csb(tot): + bits=0 + m=1000000007; + for n in range(1,tot+1): + bits += bin(n).count("1") + bits %= m + return bits + +class TestCsb(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(csb(4),5,'example 1') + + def test_ex2(self): + self.assertEqual(csb(3),4,'example 2') + +unittest.main() diff --git a/challenge-079/roger-bell-west/python/ch-2.py b/challenge-079/roger-bell-west/python/ch-2.py new file mode 100755 index 0000000000..04f30f729d --- /dev/null +++ b/challenge-079/roger-bell-west/python/ch-2.py @@ -0,0 +1,48 @@ +#! /usr/bin/python + +import unittest + +from math import log10 + +def capacity(n): + cap=0 + for r in range(min(n),max(n)+1): + b=[i for i in range(0,len(n)) if n[i] >= r] + if(len(b)>1): + for i in range(0,len(b)-1): + cap += b[i+1]-b[i]-1 + return cap + +def histo(n): + mx=max(n) + cw=int(log10(mx+1)+.9999); + for r in reversed(range(1,mx+1)): + row=list() + row.append(format(r,str(cw))) + for i in range(0,len(n)): + s = ' ' + if(n[i] >= r): + s = '#' + s *= cw + row.append(s) + print(' '.join(row)) + s='-' * cw; + print(' '.join([s for i in range(0,len(n)+1)])) + row=list() + row.append(' ' * cw) + for i in n: + row.append(format(i,str(cw))) + print(' '.join(row)) + +histo((2,1,4,1,2,5)); +histo((3,1,3,1,1,5)); + +class TestCapacity(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(capacity((2,1,4,1,2,5)),6,'example 1') + + def test_ex2(self): + self.assertEqual(capacity((3,1,3,1,1,5)),6,'example 2') + +unittest.main() diff --git a/challenge-079/roger-bell-west/raku/ch-1.p6 b/challenge-079/roger-bell-west/raku/ch-1.p6 new file mode 100755 index 0000000000..dcf9aad5d3 --- /dev/null +++ b/challenge-079/roger-bell-west/raku/ch-1.p6 @@ -0,0 +1,22 @@ +#! /usr/bin/perl6 + +use Test; + +plan 2; + +is(csb(4),5,'example 1'); +is(csb(3),4,'example 2'); + +sub csb($tot) { + my $bits=0; + my $m=1000000007; + for 1..$tot -> $n { + my $k=$n; + while ($k > 0) { + $bits += $k +& 1; + $k +>= 1; + } + $bits %= $m; + } + return $bits; +} diff --git a/challenge-079/roger-bell-west/raku/ch-2.p6 b/challenge-079/roger-bell-west/raku/ch-2.p6 new file mode 100755 index 0000000000..631e7caf91 --- /dev/null +++ b/challenge-079/roger-bell-west/raku/ch-2.p6 @@ -0,0 +1,36 @@ +#! /usr/bin/perl6 + +use Test; + +plan 2; + +is(capacity((2,1,4,1,2,5)),6,'example 1'); +is(capacity((3,1,3,1,1,5)),6,'example 2'); + +histo((2,1,4,1,2,5)); +histo((3,1,3,1,1,5)); + +sub capacity(@n) { + my $cap=0; + for (min(@n)..max(@n)) -> $r { + my @b=grep {@n[$_] >= $r}, (0..@n.end); + if (@b.elems > 1) { + for (0..@b.end-1) -> $i { + $cap += @b[$i+1]-@b[$i]-1; + } + } + } + return $cap; +} + +sub histo(@n) { + my $mx=max(@n); + my $cw=floor(log($mx+1)/log(10)+.9999); + loop (my $r=$mx;$r>0;$r--) { + my @row=(sprintf('%' ~ $cw ~ 'd',$r)); + push @row,map {(@n[$_]>=$r ?? '#' x $cw !! ' ' x $cw)}, (0..@n.end); + say join(' ',@row); + } + say join(' ',('-' x $cw) xx (1+@n.elems)); + say join(' ',map {sprintf('%' ~ $cw ~ 's',$_)}, ('',@n).flat); +} |
