aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Bell_West <roger@firedrake.org>2019-08-26 08:21:25 +0100
committerRoger Bell_West <roger@firedrake.org>2019-08-26 08:21:25 +0100
commite823eefb6e7eec9baba65b220bb8fa9fc367cfd8 (patch)
tree3fee2550d23e45e09303d9f5385a39450bcb4f78
parent7a4a29be8b481c8a6d7f38b6770a718aa276c93f (diff)
downloadperlweeklychallenge-club-e823eefb6e7eec9baba65b220bb8fa9fc367cfd8.tar.gz
perlweeklychallenge-club-e823eefb6e7eec9baba65b220bb8fa9fc367cfd8.tar.bz2
perlweeklychallenge-club-e823eefb6e7eec9baba65b220bb8fa9fc367cfd8.zip
Challenge 23 answers
-rwxr-xr-xchallenge-023/roger-bell-west/perl5/ch-1.pl17
-rwxr-xr-xchallenge-023/roger-bell-west/perl5/ch-2.pl34
-rwxr-xr-xchallenge-023/roger-bell-west/perl6/ch-1.p611
-rwxr-xr-xchallenge-023/roger-bell-west/perl6/ch-2.p629
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;
+}