From abfd3c68188dd735a6d7c257e51eecafaf0beed8 Mon Sep 17 00:00:00 2001 From: Mark <53903062+andemark@users.noreply.github.com> Date: Tue, 15 Mar 2022 00:30:03 +0000 Subject: Challenge 156 Solutions (Raku) --- challenge-156/mark-anderson/raku/ch-1.raku | 10 +++++++ challenge-156/mark-anderson/raku/ch-2.raku | 44 ++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 challenge-156/mark-anderson/raku/ch-1.raku create mode 100644 challenge-156/mark-anderson/raku/ch-2.raku diff --git a/challenge-156/mark-anderson/raku/ch-1.raku b/challenge-156/mark-anderson/raku/ch-1.raku new file mode 100644 index 0000000000..9d83cfd997 --- /dev/null +++ b/challenge-156/mark-anderson/raku/ch-1.raku @@ -0,0 +1,10 @@ +#!/usr/bin/env raku + +use Test; + +is-deeply (1..*).grep(&pernicious).head(10), (3, 5, 6, 7, 9, 10, 11, 12, 13, 14); + +sub pernicious($n) +{ + $n.base(2).comb.sum.is-prime +} diff --git a/challenge-156/mark-anderson/raku/ch-2.raku b/challenge-156/mark-anderson/raku/ch-2.raku new file mode 100644 index 0000000000..7e1d9ea639 --- /dev/null +++ b/challenge-156/mark-anderson/raku/ch-2.raku @@ -0,0 +1,44 @@ +#!/usr/bin/env raku + +use Test; +use Prime::Factor; + +nok weird(12); +nok weird(360); +nok weird(420); + +ok weird(70); +ok weird(836); +ok weird(7192); +ok weird(10792); +ok weird(12670); +ok weird(14770); + + +sub weird($n) +{ + my @p = proper-divisors($n); + return 0 if @p.sum <= $n; + return + not subset-sum($n, @p); +} + +sub subset-sum($sum, @n) +{ + my @curr = 1, |(0 xx $sum); + @curr[@n.head] = 1; + + for @n.skip -> $n + { + my @prev = @curr; + + for $n..$sum -> $i + { + if @curr[$i] == 0 + { + @curr[$i] = 1 if @prev[$i-$n] == 1; + } + } + } + + @curr.tail +} -- cgit From fc6a2f3dac7bf102bc9115557e381eba112c9e42 Mon Sep 17 00:00:00 2001 From: Mark <53903062+andemark@users.noreply.github.com> Date: Tue, 15 Mar 2022 00:34:01 +0000 Subject: Challenge 156 Solutions (Raku) --- challenge-156/mark-anderson/raku/ch-2.raku | 1 - 1 file changed, 1 deletion(-) diff --git a/challenge-156/mark-anderson/raku/ch-2.raku b/challenge-156/mark-anderson/raku/ch-2.raku index 7e1d9ea639..9d6c2ff381 100644 --- a/challenge-156/mark-anderson/raku/ch-2.raku +++ b/challenge-156/mark-anderson/raku/ch-2.raku @@ -14,7 +14,6 @@ ok weird(10792); ok weird(12670); ok weird(14770); - sub weird($n) { my @p = proper-divisors($n); -- cgit From a52af3b2751c197586ba618fd532933196225c8c Mon Sep 17 00:00:00 2001 From: Mark <53903062+andemark@users.noreply.github.com> Date: Tue, 15 Mar 2022 00:38:58 +0000 Subject: Challenge 156 Solutions (Raku) --- challenge-156/mark-anderson/raku/ch-2.raku | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/challenge-156/mark-anderson/raku/ch-2.raku b/challenge-156/mark-anderson/raku/ch-2.raku index 9d6c2ff381..1bdf71df4f 100644 --- a/challenge-156/mark-anderson/raku/ch-2.raku +++ b/challenge-156/mark-anderson/raku/ch-2.raku @@ -34,7 +34,7 @@ sub subset-sum($sum, @n) { if @curr[$i] == 0 { - @curr[$i] = 1 if @prev[$i-$n] == 1; + @curr[$i] = @prev[$i-$n]; } } } -- cgit From 892e4fcabb33f3c3e8a2347b9ee2af7caf2c450a Mon Sep 17 00:00:00 2001 From: Mark <53903062+andemark@users.noreply.github.com> Date: Tue, 15 Mar 2022 00:41:52 +0000 Subject: Challenge 156 Solutions (Raku) --- challenge-156/mark-anderson/raku/ch-2.raku | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/challenge-156/mark-anderson/raku/ch-2.raku b/challenge-156/mark-anderson/raku/ch-2.raku index 1bdf71df4f..982c72ea0c 100644 --- a/challenge-156/mark-anderson/raku/ch-2.raku +++ b/challenge-156/mark-anderson/raku/ch-2.raku @@ -32,10 +32,7 @@ sub subset-sum($sum, @n) for $n..$sum -> $i { - if @curr[$i] == 0 - { - @curr[$i] = @prev[$i-$n]; - } + @curr[$i] = @prev[$i-$n] unless @curr[$i] } } -- cgit From e4dd63ce924a5440a23ebff642e08e27793cc0af Mon Sep 17 00:00:00 2001 From: Mark <53903062+andemark@users.noreply.github.com> Date: Tue, 15 Mar 2022 10:38:50 +0000 Subject: Challenge 156 Solutions (Raku) --- challenge-156/mark-anderson/raku/ch-2.raku | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/challenge-156/mark-anderson/raku/ch-2.raku b/challenge-156/mark-anderson/raku/ch-2.raku index 982c72ea0c..086f163102 100644 --- a/challenge-156/mark-anderson/raku/ch-2.raku +++ b/challenge-156/mark-anderson/raku/ch-2.raku @@ -23,18 +23,16 @@ sub weird($n) sub subset-sum($sum, @n) { - my @curr = 1, |(0 xx $sum); - @curr[@n.head] = 1; + my @a = 1, |(0 xx $sum); + @a[@n.head] = 1; for @n.skip -> $n { - my @prev = @curr; - - for $n..$sum -> $i + for ($n..$sum).reverse -> $i { - @curr[$i] = @prev[$i-$n] unless @curr[$i] + @a[$i] = @a[$i-$n] unless @a[$i] } } - @curr.tail + @a.tail } -- cgit