aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-04-25 13:50:36 +0100
committerGitHub <noreply@github.com>2021-04-25 13:50:36 +0100
commit9e748da745008a76b6284053ca00785201f397ad (patch)
treecac15d1ecc3eb05cdb30d281b50f456601999be6
parent3531cc83e5609d9a827b954b4bb017bd1124ccbc (diff)
parentb6b0a8497bf10e995e8bf5b714712ffcbcfc9e4b (diff)
downloadperlweeklychallenge-club-9e748da745008a76b6284053ca00785201f397ad.tar.gz
perlweeklychallenge-club-9e748da745008a76b6284053ca00785201f397ad.tar.bz2
perlweeklychallenge-club-9e748da745008a76b6284053ca00785201f397ad.zip
Merge pull request #3948 from mimosinnet/branch-for-challenge-109
Solutions for challenge 109
-rw-r--r--challenge-109/mimosinnet/raku/ch-1.raku38
-rw-r--r--challenge-109/mimosinnet/raku/ch-2.raku36
2 files changed, 74 insertions, 0 deletions
diff --git a/challenge-109/mimosinnet/raku/ch-1.raku b/challenge-109/mimosinnet/raku/ch-1.raku
new file mode 100644
index 0000000000..17148da070
--- /dev/null
+++ b/challenge-109/mimosinnet/raku/ch-1.raku
@@ -0,0 +1,38 @@
+# https://perlweeklychallenge.org/blog/perl-weekly-challenge-109/
+
+# See: https://www.geeksforgeeks.org/find-divisors-natural-number-set-1/
+
+#| Chowla Number
+sub prefix:<ʗ>( Int $number ) returns Int {
+ gather {
+ (2 .. $number.sqrt).map({
+ if $number %% $_ {
+ take $_;
+ take ($number / $_).Int;
+ }
+ });
+ }.Seq.unique.sum;
+}
+
+# first $number of Chowla numbers
+sub challenge( Int $number ) {
+ (1..$number).map({ ʗ$_ });
+}
+
+multi sub MAIN( Int $number ) {
+ say 'The first ',$number,' Chowla numbers are: ';
+ say challenge($number);
+}
+
+multi sub MAIN( 'challenge' ) {
+ MAIN(20);
+}
+
+multi sub MAIN( 'test' ) is hidden-from-USAGE {
+ use Test;
+
+ is challenge(20), (0, 0, 0, 2, 0, 5, 0, 6, 3, 7, 0, 15, 0, 9, 8, 14, 0, 20, 0, 21);
+
+ done-testing;
+
+}
diff --git a/challenge-109/mimosinnet/raku/ch-2.raku b/challenge-109/mimosinnet/raku/ch-2.raku
new file mode 100644
index 0000000000..fff6747773
--- /dev/null
+++ b/challenge-109/mimosinnet/raku/ch-2.raku
@@ -0,0 +1,36 @@
+# https://perlweeklychallenge.org/blog/perl-weekly-challenge-10X/
+
+# Check if values meet condition
+sub condition(@perm) returns Bool {
+ my ($a, $b, $c, $d, $e, $f, $g) = @perm;
+ return $a + $b == $b + $c + $d == $d + $e + $f == $f + $g
+}
+
+#| This is based on Mark Anderson's solution
+sub challenge( @numbers ) returns Hash {
+ my $i = 1;
+ my %solution;
+ my @chars = 'a'..'g';
+ for @numbers.permutations -> @perm {
+ my %this-permutation = @chars Z=> @perm;
+ %solution{$i++} = @chars.map(-> $char { $char => %this-permutation{$char} }) if condition(@perm);
+ }
+ return %solution;
+}
+
+multi sub MAIN( *@numbers where { $_.all ~~ Int } ) {
+ my %solution = challenge(@numbers);
+ say 'There are ',%solution.keys.elems,' solutions';
+ for %solution.keys.sort -> $solved {
+ say 'Solution ',$solved;
+ say ' ',%solution{$solved};
+ my %s = %solution{$solved};
+ die 'There is something wrong' unless condition( (%s<a>, %s<b>, %s<c>, %s<d>, %s<e>, %s<f>, %s<g>) );
+ say ' a+b = b+c+d = d+e+f = f+g = ',%s<a> + %s<b>;
+ }
+}
+
+multi sub MAIN( 'challenge' ) {
+ MAIN( (1..7) );
+}
+