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