diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-04-25 13:50:36 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-04-25 13:50:36 +0100 |
| commit | 9e748da745008a76b6284053ca00785201f397ad (patch) | |
| tree | cac15d1ecc3eb05cdb30d281b50f456601999be6 | |
| parent | 3531cc83e5609d9a827b954b4bb017bd1124ccbc (diff) | |
| parent | b6b0a8497bf10e995e8bf5b714712ffcbcfc9e4b (diff) | |
| download | perlweeklychallenge-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.raku | 38 | ||||
| -rw-r--r-- | challenge-109/mimosinnet/raku/ch-2.raku | 36 |
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) ); +} + |
