diff options
| author | Mark Anderson <mark@frontrangerunner.com> | 2020-11-30 00:42:22 -0700 |
|---|---|---|
| committer | Mark Anderson <mark@frontrangerunner.com> | 2020-11-30 00:42:22 -0700 |
| commit | bc609bb8f6a4328f1c7a2703954ac4d604d33783 (patch) | |
| tree | f967a25bd07ce085c22e5bb2a1cc6a0e67257364 | |
| parent | 88307937be6de1a0806029aa2ff3f31423cb346c (diff) | |
| download | perlweeklychallenge-club-bc609bb8f6a4328f1c7a2703954ac4d604d33783.tar.gz perlweeklychallenge-club-bc609bb8f6a4328f1c7a2703954ac4d604d33783.tar.bz2 perlweeklychallenge-club-bc609bb8f6a4328f1c7a2703954ac4d604d33783.zip | |
Challenge 89 Solutions (Raku)
| -rw-r--r-- | challenge-089/mark-anderson/raku/ch-1.p6 | 15 | ||||
| -rw-r--r-- | challenge-089/mark-anderson/raku/ch-2.p6 | 33 |
2 files changed, 48 insertions, 0 deletions
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); +} |
