diff options
| author | Simon Proctor <simon.proctor@zpg.co.uk> | 2019-08-07 18:56:36 +0100 |
|---|---|---|
| committer | Simon Proctor <simon.proctor@zpg.co.uk> | 2019-08-07 18:56:36 +0100 |
| commit | 746e3bbb14728b954c2ad4985883bae360de7245 (patch) | |
| tree | 3e82af84d7882e3df246b7c02e9086c3df5fe1fb | |
| parent | 7b396bf71e40e442ab4fe9f803e28e3d89c97dc3 (diff) | |
| download | perlweeklychallenge-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.p6 | 14 | ||||
| -rw-r--r-- | challenge-020/simon-proctor/perl6/ch-2.p6 | 37 |
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 |
