From bc609bb8f6a4328f1c7a2703954ac4d604d33783 Mon Sep 17 00:00:00 2001 From: Mark Anderson Date: Mon, 30 Nov 2020 00:42:22 -0700 Subject: Challenge 89 Solutions (Raku) --- challenge-089/mark-anderson/raku/ch-1.p6 | 15 +++++++++++++++ challenge-089/mark-anderson/raku/ch-2.p6 | 33 ++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 challenge-089/mark-anderson/raku/ch-1.p6 create mode 100644 challenge-089/mark-anderson/raku/ch-2.p6 diff --git a/challenge-089/mark-anderson/raku/ch-1.p6 b/challenge-089/mark-anderson/raku/ch-1.p6 new file mode 100644 index 0000000000..1e47a398ed --- /dev/null +++ b/challenge-089/mark-anderson/raku/ch-1.p6 @@ -0,0 +1,15 @@ +multi MAIN(Int $n) { + say gcd-sum($n); +} + +multi MAIN { + use Test; + plan 2; + + ok gcd-sum(3) == 3, "Example 1"; + ok gcd-sum(4) == 7, "Example 2"; +} + +sub gcd-sum(Int $n) { + sum (1..$n).combinations(2).map(-> ($a, $b) { $a gcd $b }); +} diff --git a/challenge-089/mark-anderson/raku/ch-2.p6 b/challenge-089/mark-anderson/raku/ch-2.p6 new file mode 100644 index 0000000000..6a0ca41228 --- /dev/null +++ b/challenge-089/mark-anderson/raku/ch-2.p6 @@ -0,0 +1,33 @@ +# +# With help from https://www.wikihow.com/Solve-a-Magic-Square +# + +use Scalar::History; + +unit sub MAIN(UInt $n where * mod 2); +#= a positive odd integer + +.say for odd-magic-square($n); + +sub odd-magic-square($n) { + subset Valid of UInt where 0 <= * < $n; + + my $r := Scalar::History.create(0, Valid); + my $c := Scalar::History.create(($n / 2).floor, Valid); + my @matrix = [0 xx $n] xx $n; + @matrix[$r][$c] = 1; + + for 2..($n**2) -> $num { + try $r--; if $! { $r = $n - 1 } + try $c++; if $! { $c = 0 } + + if @matrix[$r][$c] { + $r = $r.VAR.get-history.tail + 1; + $c = $c.VAR.get-history.tail; + } + + @matrix[$r][$c] = $num; + } + + @matrix.map(*.fmt("%{($n**2).chars}d").Array); +} -- cgit From 8a26a9c2bfd0192ad58b161aa5208d26965f3377 Mon Sep 17 00:00:00 2001 From: Mark Anderson Date: Mon, 30 Nov 2020 00:56:54 -0700 Subject: Challenge 89 Solutions (Raku) --- challenge-089/mark-anderson/raku/ch-1.p6 | 2 +- challenge-089/mark-anderson/raku/ch-2.p6 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/challenge-089/mark-anderson/raku/ch-1.p6 b/challenge-089/mark-anderson/raku/ch-1.p6 index 1e47a398ed..53ae256ce3 100644 --- a/challenge-089/mark-anderson/raku/ch-1.p6 +++ b/challenge-089/mark-anderson/raku/ch-1.p6 @@ -1,4 +1,4 @@ -multi MAIN(Int $n) { +multi MAIN(UInt $n where * > 0) { #= greater than 0 say gcd-sum($n); } diff --git a/challenge-089/mark-anderson/raku/ch-2.p6 b/challenge-089/mark-anderson/raku/ch-2.p6 index 6a0ca41228..9ea2f19c7a 100644 --- a/challenge-089/mark-anderson/raku/ch-2.p6 +++ b/challenge-089/mark-anderson/raku/ch-2.p6 @@ -7,7 +7,7 @@ use Scalar::History; unit sub MAIN(UInt $n where * mod 2); #= a positive odd integer -.say for odd-magic-square($n); +say odd-magic-square($n); sub odd-magic-square($n) { subset Valid of UInt where 0 <= * < $n; -- cgit From 349624536cd3b3505a7752828fa22a189cd846af Mon Sep 17 00:00:00 2001 From: Mark Anderson Date: Mon, 30 Nov 2020 01:01:47 -0700 Subject: Challenge 89 Solutions (Raku) --- challenge-089/mark-anderson/raku/ch-2.p6 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/challenge-089/mark-anderson/raku/ch-2.p6 b/challenge-089/mark-anderson/raku/ch-2.p6 index 9ea2f19c7a..8dd8f8c86c 100644 --- a/challenge-089/mark-anderson/raku/ch-2.p6 +++ b/challenge-089/mark-anderson/raku/ch-2.p6 @@ -4,8 +4,7 @@ use Scalar::History; -unit sub MAIN(UInt $n where * mod 2); -#= a positive odd integer +unit sub MAIN(UInt $n where * mod 2); #= a positive odd integer say odd-magic-square($n); -- cgit From 3925fa637d83a15f28d67e896d3a6f304d4d6782 Mon Sep 17 00:00:00 2001 From: Mark Anderson Date: Mon, 30 Nov 2020 01:09:00 -0700 Subject: Challenge 89 Solutions (Raku) --- challenge-089/mark-anderson/raku/ch-2.p6 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/challenge-089/mark-anderson/raku/ch-2.p6 b/challenge-089/mark-anderson/raku/ch-2.p6 index 8dd8f8c86c..39251e665d 100644 --- a/challenge-089/mark-anderson/raku/ch-2.p6 +++ b/challenge-089/mark-anderson/raku/ch-2.p6 @@ -6,7 +6,7 @@ use Scalar::History; unit sub MAIN(UInt $n where * mod 2); #= a positive odd integer -say odd-magic-square($n); +.say for odd-magic-square($n); sub odd-magic-square($n) { subset Valid of UInt where 0 <= * < $n; -- cgit From af94441ab7e0527098caf635f795a86d21cac877 Mon Sep 17 00:00:00 2001 From: Mark Anderson Date: Mon, 30 Nov 2020 01:26:20 -0700 Subject: Challenge 89 Solutions (Raku) --- challenge-089/mark-anderson/raku/ch-2.p6 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/challenge-089/mark-anderson/raku/ch-2.p6 b/challenge-089/mark-anderson/raku/ch-2.p6 index 39251e665d..47c7b8292b 100644 --- a/challenge-089/mark-anderson/raku/ch-2.p6 +++ b/challenge-089/mark-anderson/raku/ch-2.p6 @@ -4,7 +4,7 @@ use Scalar::History; -unit sub MAIN(UInt $n where * mod 2); #= a positive odd integer +unit sub MAIN(UInt $n where * mod 2 = 3); #= a positive odd integer .say for odd-magic-square($n); -- cgit From ed3569442b4db652b84ef54036fa04b6883678ff Mon Sep 17 00:00:00 2001 From: Mark Anderson Date: Mon, 30 Nov 2020 06:25:16 -0700 Subject: Challenge 89 Solutions (Raku) --- challenge-089/mark-anderson/raku/ch-1.p6 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/challenge-089/mark-anderson/raku/ch-1.p6 b/challenge-089/mark-anderson/raku/ch-1.p6 index 53ae256ce3..01a4b13b9c 100644 --- a/challenge-089/mark-anderson/raku/ch-1.p6 +++ b/challenge-089/mark-anderson/raku/ch-1.p6 @@ -10,6 +10,6 @@ multi MAIN { ok gcd-sum(4) == 7, "Example 2"; } -sub gcd-sum(Int $n) { +sub gcd-sum(UInt $n) { sum (1..$n).combinations(2).map(-> ($a, $b) { $a gcd $b }); } -- cgit