From 4a816dae782ebf95a65cb13fe7344e2664d926d3 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Wed, 21 Apr 2021 17:39:48 +0200 Subject: Task 1 done. --- challenge-109/luca-ferrari/raku/ch-1.p6 | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 challenge-109/luca-ferrari/raku/ch-1.p6 diff --git a/challenge-109/luca-ferrari/raku/ch-1.p6 b/challenge-109/luca-ferrari/raku/ch-1.p6 new file mode 100644 index 0000000000..820e7500c2 --- /dev/null +++ b/challenge-109/luca-ferrari/raku/ch-1.p6 @@ -0,0 +1,20 @@ +#!perl6 + +# +# C(n) = sum of divisors of n except 1 and n +# +sub choowla( Int $n ) { + # get all divisors + + my @divisors; + for 2 .. $n / 2 { + @divisors.push: $_ if $n %% $_; + } + + return [+] @divisors; +} + +sub MAIN( Int $limit = 20 ) { + my @choowla-numbers.push: choowla( $_ ) for 1 .. $limit; + @choowla-numbers.join( ',' ).say; +} -- cgit From c6086e3997c25a9398a791fb962f821b7b796dab Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Wed, 21 Apr 2021 17:40:50 +0200 Subject: More compact way of doing divisors. --- challenge-109/luca-ferrari/raku/ch-1.p6 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/challenge-109/luca-ferrari/raku/ch-1.p6 b/challenge-109/luca-ferrari/raku/ch-1.p6 index 820e7500c2..c480b09dfc 100644 --- a/challenge-109/luca-ferrari/raku/ch-1.p6 +++ b/challenge-109/luca-ferrari/raku/ch-1.p6 @@ -6,10 +6,10 @@ sub choowla( Int $n ) { # get all divisors - my @divisors; - for 2 .. $n / 2 { - @divisors.push: $_ if $n %% $_; - } + my @divisors.push: $_ if $n %% $_ for 2 .. $n / 2; + # for 2 .. $n / 2 { + # @divisors.push: $_ if $n %% $_; + # } return [+] @divisors; } -- cgit From 342181744b067fd36499de15529b2f87443db79f Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Wed, 21 Apr 2021 18:16:58 +0200 Subject: Task2 done --- challenge-109/luca-ferrari/raku/ch-2.p6 | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 challenge-109/luca-ferrari/raku/ch-2.p6 diff --git a/challenge-109/luca-ferrari/raku/ch-2.p6 b/challenge-109/luca-ferrari/raku/ch-2.p6 new file mode 100644 index 0000000000..1213d407ca --- /dev/null +++ b/challenge-109/luca-ferrari/raku/ch-2.p6 @@ -0,0 +1,30 @@ +#!raku + + +sub MAIN() { + my @nums = <1 2 3 4 5 6 7>; + my @letters = ; + + + my @solutions; + + for @nums.permutations -> @current { + my %squares; + %squares{ @letters[ $_ ] } = @current[ $_ ] for 0 ..^ @letters.elems; + + + my @sums; + + @sums.push: [+] %squares; + @sums.push: [+] %squares; + @sums.push: [+] %squares; + @sums.push: [+] %squares; + + @solutions.push: %squares if @sums[ 0 ] == all @sums; + } + + + + say $_ for @solutions; + +} -- cgit From 9b844027cb11bf15f01c897e5d45b44b2387fb8e Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Wed, 21 Apr 2021 18:20:10 +0200 Subject: Command line checks --- challenge-109/luca-ferrari/raku/ch-2.p6 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/challenge-109/luca-ferrari/raku/ch-2.p6 b/challenge-109/luca-ferrari/raku/ch-2.p6 index 1213d407ca..15cc86739b 100644 --- a/challenge-109/luca-ferrari/raku/ch-2.p6 +++ b/challenge-109/luca-ferrari/raku/ch-2.p6 @@ -1,25 +1,25 @@ #!raku -sub MAIN() { - my @nums = <1 2 3 4 5 6 7>; +sub MAIN( *@nums where { @nums.grep( * ~~ Int ).elems == @nums.elems && @nums.elems == 7 } ) { my @letters = ; - - my @solutions; + # permutate all numbers to find out the correct sum for @nums.permutations -> @current { + # build an hash to help visualize the answer my %squares; %squares{ @letters[ $_ ] } = @current[ $_ ] for 0 ..^ @letters.elems; - + # compute the sums my @sums; - @sums.push: [+] %squares; @sums.push: [+] %squares; @sums.push: [+] %squares; @sums.push: [+] %squares; + + # if the first sum is equal to all the others, push this solution @solutions.push: %squares if @sums[ 0 ] == all @sums; } -- cgit From 8c9dd95848f1e00f137c30149f17959abcba91ad Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Thu, 22 Apr 2021 08:34:53 +0200 Subject: Task 1 improved --- challenge-109/luca-ferrari/raku/ch-1.p6 | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/challenge-109/luca-ferrari/raku/ch-1.p6 b/challenge-109/luca-ferrari/raku/ch-1.p6 index c480b09dfc..35c77c81e8 100644 --- a/challenge-109/luca-ferrari/raku/ch-1.p6 +++ b/challenge-109/luca-ferrari/raku/ch-1.p6 @@ -3,15 +3,14 @@ # # C(n) = sum of divisors of n except 1 and n # -sub choowla( Int $n ) { - # get all divisors - - my @divisors.push: $_ if $n %% $_ for 2 .. $n / 2; - # for 2 .. $n / 2 { - # @divisors.push: $_ if $n %% $_; - # } +sub choowla( Int $n where { $n > 0 } ) { + # special case + return 0 if $n < 2; - return [+] @divisors; + # get all divisors + # my @divisors.push: $_ if $n %% $_ for 2 .. $n / 2; + # return [+] @divisors; + return [+] ( $_ if $n %% $_ for 2 .. $n / 2 ); } sub MAIN( Int $limit = 20 ) { -- cgit From 017d83232eceea139a731ac11c92229e42f2953b Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Thu, 22 Apr 2021 08:37:01 +0200 Subject: Do not use an intermediate array --- challenge-109/luca-ferrari/raku/ch-1.p6 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/challenge-109/luca-ferrari/raku/ch-1.p6 b/challenge-109/luca-ferrari/raku/ch-1.p6 index 35c77c81e8..58168f713c 100644 --- a/challenge-109/luca-ferrari/raku/ch-1.p6 +++ b/challenge-109/luca-ferrari/raku/ch-1.p6 @@ -14,6 +14,7 @@ sub choowla( Int $n where { $n > 0 } ) { } sub MAIN( Int $limit = 20 ) { - my @choowla-numbers.push: choowla( $_ ) for 1 .. $limit; - @choowla-numbers.join( ',' ).say; + # my @choowla-numbers.push: choowla( $_ ) for 1 .. $limit; + # @choowla-numbers.join( ',' ).say; + @( choowla( $_ ) for 1 .. $limit ).join( ',' ).say; } -- cgit From 66c7224b6dc440254b7943e0dd2071859b9ad2ba Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Thu, 22 Apr 2021 08:39:25 +0200 Subject: Use ranges everywhere --- challenge-109/luca-ferrari/raku/ch-2.p6 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/challenge-109/luca-ferrari/raku/ch-2.p6 b/challenge-109/luca-ferrari/raku/ch-2.p6 index 15cc86739b..d25c5c1333 100644 --- a/challenge-109/luca-ferrari/raku/ch-2.p6 +++ b/challenge-109/luca-ferrari/raku/ch-2.p6 @@ -2,7 +2,7 @@ sub MAIN( *@nums where { @nums.grep( * ~~ Int ).elems == @nums.elems && @nums.elems == 7 } ) { - my @letters = ; + my @letters = 'a' .. 'g'; my @solutions; # permutate all numbers to find out the correct sum @@ -13,14 +13,14 @@ sub MAIN( *@nums where { @nums.grep( * ~~ Int ).elems == @nums.elems && @nums.e # compute the sums my @sums; - @sums.push: [+] %squares; - @sums.push: [+] %squares; - @sums.push: [+] %squares; - @sums.push: [+] %squares; + @sums.push: [+] %squares{ 'a' .. 'b' }; + @sums.push: [+] %squares{ 'b' .. 'd' }; + @sums.push: [+] %squares{ 'd' .. 'f' }; + @sums.push: [+] %squares{ 'f' .. 'g' }; # if the first sum is equal to all the others, push this solution - @solutions.push: %squares if @sums[ 0 ] == all @sums; + @solutions.push: %squares if @sums[ 0 ] == all @sums[ 1 .. * ]; } -- cgit From bbcb37a4a35070e2adc1676833f7aee57fbab339 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Thu, 22 Apr 2021 08:41:51 +0200 Subject: Use multi main --- challenge-109/luca-ferrari/raku/ch-2.p6 | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/challenge-109/luca-ferrari/raku/ch-2.p6 b/challenge-109/luca-ferrari/raku/ch-2.p6 index d25c5c1333..4a9117f636 100644 --- a/challenge-109/luca-ferrari/raku/ch-2.p6 +++ b/challenge-109/luca-ferrari/raku/ch-2.p6 @@ -1,7 +1,7 @@ #!raku -sub MAIN( *@nums where { @nums.grep( * ~~ Int ).elems == @nums.elems && @nums.elems == 7 } ) { +multi sub MAIN( *@nums where { @nums.grep( * ~~ Int ).elems == @nums.elems && @nums.elems == 7 } ) { my @letters = 'a' .. 'g'; my @solutions; @@ -28,3 +28,8 @@ sub MAIN( *@nums where { @nums.grep( * ~~ Int ).elems == @nums.elems && @nums.e say $_ for @solutions; } + + +multi sub MAIN() { + MAIN( <1 2 3 4 5 6 7> ); +} -- cgit From 08b7e089cd6637a5ca674b022f680808d2e763f8 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Thu, 22 Apr 2021 13:54:15 +0200 Subject: Blog references --- challenge-109/luca-ferrari/blog-1.txt | 1 + challenge-109/luca-ferrari/blog-2.txt | 1 + 2 files changed, 2 insertions(+) create mode 100644 challenge-109/luca-ferrari/blog-1.txt create mode 100644 challenge-109/luca-ferrari/blog-2.txt diff --git a/challenge-109/luca-ferrari/blog-1.txt b/challenge-109/luca-ferrari/blog-1.txt new file mode 100644 index 0000000000..c983cf6c1b --- /dev/null +++ b/challenge-109/luca-ferrari/blog-1.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2021/04/22/PerlWeeklyChallenge109.html#task1 diff --git a/challenge-109/luca-ferrari/blog-2.txt b/challenge-109/luca-ferrari/blog-2.txt new file mode 100644 index 0000000000..c079f7971f --- /dev/null +++ b/challenge-109/luca-ferrari/blog-2.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2021/04/22/PerlWeeklyChallenge109.html#task2 -- cgit