diff options
| author | Roger Bell_West <roger@firedrake.org> | 2019-08-26 08:21:25 +0100 |
|---|---|---|
| committer | Roger Bell_West <roger@firedrake.org> | 2019-08-26 08:21:25 +0100 |
| commit | e823eefb6e7eec9baba65b220bb8fa9fc367cfd8 (patch) | |
| tree | 3fee2550d23e45e09303d9f5385a39450bcb4f78 | |
| parent | 7a4a29be8b481c8a6d7f38b6770a718aa276c93f (diff) | |
| download | perlweeklychallenge-club-e823eefb6e7eec9baba65b220bb8fa9fc367cfd8.tar.gz perlweeklychallenge-club-e823eefb6e7eec9baba65b220bb8fa9fc367cfd8.tar.bz2 perlweeklychallenge-club-e823eefb6e7eec9baba65b220bb8fa9fc367cfd8.zip | |
Challenge 23 answers
| -rwxr-xr-x | challenge-023/roger-bell-west/perl5/ch-1.pl | 17 | ||||
| -rwxr-xr-x | challenge-023/roger-bell-west/perl5/ch-2.pl | 34 | ||||
| -rwxr-xr-x | challenge-023/roger-bell-west/perl6/ch-1.p6 | 11 | ||||
| -rwxr-xr-x | challenge-023/roger-bell-west/perl6/ch-2.p6 | 29 |
4 files changed, 91 insertions, 0 deletions
diff --git a/challenge-023/roger-bell-west/perl5/ch-1.pl b/challenge-023/roger-bell-west/perl5/ch-1.pl new file mode 100755 index 0000000000..8c81a61d9d --- /dev/null +++ b/challenge-023/roger-bell-west/perl5/ch-1.pl @@ -0,0 +1,17 @@ +#! /usr/bin/perl + +use strict; +use warnings; + +use Getopt::Std; + +my %o=('d' => 2); +getopts('d:',\%o); +my @seq=@ARGV; + +foreach (1..$o{d}) { + my @o=map {$seq[$_+1]-$seq[$_]} (0..$#seq-1); + @seq=@o; +} + +print join(' ',@seq),"\n"; diff --git a/challenge-023/roger-bell-west/perl5/ch-2.pl b/challenge-023/roger-bell-west/perl5/ch-2.pl new file mode 100755 index 0000000000..138da57be4 --- /dev/null +++ b/challenge-023/roger-bell-west/perl5/ch-2.pl @@ -0,0 +1,34 @@ +#! /usr/bin/perl + +use strict; +use warnings; + +use Math::BigInt lib => 'GMP'; + +foreach my $i (@ARGV) { + my $f=primefactor(Math::BigInt->new($i)); + my @o="$i:"; + foreach my $ff (sort {$a <=> $b} keys %{$f}) { + push @o,($ff) x $f->{$ff}; + } + print join(' ',@o),"\n"; +} + +sub primefactor { + my $n=shift; + my %out; + while ($n%2 == 0) { + $out{2}++; + $n/=2; + } + my $k=Math::BigInt->new(3); + while ($k*$k <= $n) { + while ($n % $k == 0) { + $out{$k}++; + $n /= $k; + } + $k+=2; + } + $out{$n}++; + return \%out; +} diff --git a/challenge-023/roger-bell-west/perl6/ch-1.p6 b/challenge-023/roger-bell-west/perl6/ch-1.p6 new file mode 100755 index 0000000000..4f0da6316f --- /dev/null +++ b/challenge-023/roger-bell-west/perl6/ch-1.p6 @@ -0,0 +1,11 @@ +#! /usr/bin/perl6 + +my @seq=@*ARGS; +my $depth=shift @seq; + +for (1..$depth) { + my @o=map {@seq[$_+1]-@seq[$_]}, (0..@seq.end-1); + @seq=@o; +} + +say join(' ',@seq); diff --git a/challenge-023/roger-bell-west/perl6/ch-2.p6 b/challenge-023/roger-bell-west/perl6/ch-2.p6 new file mode 100755 index 0000000000..1dad19ab17 --- /dev/null +++ b/challenge-023/roger-bell-west/perl6/ch-2.p6 @@ -0,0 +1,29 @@ +#! /usr/bin/perl6 + +for @*ARGS -> $i { + my %f=primefactor($i); + my @o="$i:"; + for %f.keys.sort({$^a <=> $^b}) -> $ff { + push @o,($ff) xx %f{$ff}; + } + say join(' ',@o); +} + +sub primefactor ($nn) { + my $n=$nn; + my %out; + while ($n%2 == 0) { + %out{2}++; + $n/=2; + } + my $k=3; + while ($k*$k <= $n) { + while ($n % $k == 0) { + %out{$k}++; + $n /= $k; + } + $k+=2; + } + %out{$n}++; + return %out; +} |
