aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Russell <ac.russell@live.com>2019-08-11 11:39:48 -0400
committerAdam Russell <ac.russell@live.com>2019-08-11 11:39:48 -0400
commit80f42bf87dbbca125660047ddadca7bdc7cd712f (patch)
treea75a5fb60385094ee81d526ac3babc915e9c0f61
parent57319da5cbe701ad641cb9fd59861245db46d080 (diff)
downloadperlweeklychallenge-club-80f42bf87dbbca125660047ddadca7bdc7cd712f.tar.gz
perlweeklychallenge-club-80f42bf87dbbca125660047ddadca7bdc7cd712f.tar.bz2
perlweeklychallenge-club-80f42bf87dbbca125660047ddadca7bdc7cd712f.zip
added Perl 6 solutions
-rw-r--r--challenge-020/adam-russell/perl6/ch-1.rk16
-rw-r--r--challenge-020/adam-russell/perl6/ch-2.rk43
2 files changed, 59 insertions, 0 deletions
diff --git a/challenge-020/adam-russell/perl6/ch-1.rk b/challenge-020/adam-russell/perl6/ch-1.rk
new file mode 100644
index 0000000000..f0d6dc2faa
--- /dev/null
+++ b/challenge-020/adam-russell/perl6/ch-1.rk
@@ -0,0 +1,16 @@
+##
+# Write a script to accept a string from command line and split it on change of character.
+##
+my $string = @*ARGS[0];
+my @letters = split(/""/, $string);
+my $letter;
+@letters.shift();
+my $letter_previous = @letters.shift();
+repeat {
+ $letter = @letters.shift();
+ print $letter_previous if ($letter eq $letter_previous);
+ print "$letter_previous\n" if ($letter ne $letter_previous);
+ $letter_previous = $letter;
+}while (@letters);
+print $letter_previous if ($letter eq $letter_previous);
+print "$letter_previous\n" if ($letter ne $letter_previous);
diff --git a/challenge-020/adam-russell/perl6/ch-2.rk b/challenge-020/adam-russell/perl6/ch-2.rk
new file mode 100644
index 0000000000..46e4329e8f
--- /dev/null
+++ b/challenge-020/adam-russell/perl6/ch-2.rk
@@ -0,0 +1,43 @@
+constant RANGE_SIZE = 50;
+sub factor-sum(@numbers){
+ my %number_sof;
+ for @numbers -> $n {
+ my @factors = (1);
+ for (2 .. sqrt($n)) -> $j {
+ @factors.push($j) if $n %% $j;
+ @factors.push($n / $j) if $n %% $j && $j ** 2 != $n;
+ }
+ my $sum = [+] @factors;
+ %number_sof{$n} = $sum;
+ }
+ return %number_sof;
+}
+my $range_start = 1;
+my $range_end = RANGE_SIZE;
+my $found = Bool::False;
+my %number_sof;
+my @promises;
+while (!$found) {
+ @promises = ();
+ for (0 .. 3) {
+ @promises.push(Promise.start( {
+ factor-sum($range_start .. $range_end);
+ }));
+ $range_start = $range_end + 1;
+ $range_end = $range_start + RANGE_SIZE;
+ }
+ await(|@promises);
+ for @promises -> $p {
+ %number_sof{ keys $p.result} = values $p.result;
+ for (values $p.result) -> $k {
+ if (%number_sof{$k}) {
+ if (%number_sof{%number_sof{$k}} &&
+ %number_sof{%number_sof{$k}} == $k &&
+ %number_sof{$k} != $k && !$found) {
+ say "First amicable pair of numbers: $k " ~ %number_sof{$k};
+ $found = Bool::True;
+ }
+ }
+ }
+ }
+}