aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Proctor <simon.proctor@zpg.co.uk>2019-08-07 18:56:36 +0100
committerSimon Proctor <simon.proctor@zpg.co.uk>2019-08-07 18:56:36 +0100
commit746e3bbb14728b954c2ad4985883bae360de7245 (patch)
tree3e82af84d7882e3df246b7c02e9086c3df5fe1fb
parent7b396bf71e40e442ab4fe9f803e28e3d89c97dc3 (diff)
downloadperlweeklychallenge-club-746e3bbb14728b954c2ad4985883bae360de7245.tar.gz
perlweeklychallenge-club-746e3bbb14728b954c2ad4985883bae360de7245.tar.bz2
perlweeklychallenge-club-746e3bbb14728b954c2ad4985883bae360de7245.zip
Challenge 20 all done.
-rw-r--r--challenge-020/simon-proctor/perl6/ch-1.p614
-rw-r--r--challenge-020/simon-proctor/perl6/ch-2.p637
2 files changed, 51 insertions, 0 deletions
diff --git a/challenge-020/simon-proctor/perl6/ch-1.p6 b/challenge-020/simon-proctor/perl6/ch-1.p6
new file mode 100644
index 0000000000..b3cc956bd6
--- /dev/null
+++ b/challenge-020/simon-proctor/perl6/ch-1.p6
@@ -0,0 +1,14 @@
+#!/usr/bin/env perl6
+
+use v6;
+
+multi sub MAIN ( Bool :h(:$help) where so * ) {
+ say $*USAGE;
+}
+
+#| Takes a string and outputs it broken into sets of the same character
+multi sub MAIN ( Str $input is copy ) {
+ while my $m = $input ~~ s!^$<match>=((.)$0*)!! {
+ $m<match>.Str.say;
+ }
+} \ No newline at end of file
diff --git a/challenge-020/simon-proctor/perl6/ch-2.p6 b/challenge-020/simon-proctor/perl6/ch-2.p6
new file mode 100644
index 0000000000..614abab055
--- /dev/null
+++ b/challenge-020/simon-proctor/perl6/ch-2.p6
@@ -0,0 +1,37 @@
+#!/usr/bin/env perl6
+
+use v6;
+
+
+multi sub MAIN ( Bool :h(:$help) where so * ) {
+ say $*USAGE;
+}
+
+#|Given a starting number (default 0) find the first two Amicable numbers following it.
+multi sub MAIN ( Int $start = 0 ) {
+ my $current = $start;
+ my $pair;
+ loop {
+ $current++;
+ $pair = first-pair( $current );
+ last if $pair;
+ }
+ say "$pair, $current";
+
+}
+
+sub first-pair( Int $number ) {
+ my $num-total = [+] divisors( $number );
+ (1..^$number).first(
+ {
+ my $sum = [+] divisors( $_ );
+ ($sum == $number && $num-total == $_)
+ }
+ );
+}
+
+sub divisors( Int $number ) is pure {
+ state @divs;
+ my $mid = $number div 2;
+ @divs[$number] //= (1..$mid).grep( $number %% * ).list;
+} \ No newline at end of file