diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2020-11-30 20:57:41 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-11-30 20:57:41 +0000 |
| commit | ab16d584a53078a8a4e10f46ec70e84e1769162b (patch) | |
| tree | aa49dfbc5d5f83fad90f77069dc17fae67ee9b53 | |
| parent | a8af8c77e2f1f028724cb8f99b10a5507c4c773a (diff) | |
| parent | ed3569442b4db652b84ef54036fa04b6883678ff (diff) | |
| download | perlweeklychallenge-club-ab16d584a53078a8a4e10f46ec70e84e1769162b.tar.gz perlweeklychallenge-club-ab16d584a53078a8a4e10f46ec70e84e1769162b.tar.bz2 perlweeklychallenge-club-ab16d584a53078a8a4e10f46ec70e84e1769162b.zip | |
Merge pull request #2881 from andemark/branch-for-challenge-089
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 | 32 |
2 files changed, 47 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..01a4b13b9c --- /dev/null +++ b/challenge-089/mark-anderson/raku/ch-1.p6 @@ -0,0 +1,15 @@ +multi MAIN(UInt $n where * > 0) { #= greater than 0 + 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(UInt $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..47c7b8292b --- /dev/null +++ b/challenge-089/mark-anderson/raku/ch-2.p6 @@ -0,0 +1,32 @@ +# +# With help from https://www.wikihow.com/Solve-a-Magic-Square +# + +use Scalar::History; + +unit sub MAIN(UInt $n where * mod 2 = 3); #= 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); +} |
