aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2020-11-30 20:57:41 +0000
committerGitHub <noreply@github.com>2020-11-30 20:57:41 +0000
commitab16d584a53078a8a4e10f46ec70e84e1769162b (patch)
treeaa49dfbc5d5f83fad90f77069dc17fae67ee9b53
parenta8af8c77e2f1f028724cb8f99b10a5507c4c773a (diff)
parented3569442b4db652b84ef54036fa04b6883678ff (diff)
downloadperlweeklychallenge-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.p615
-rw-r--r--challenge-089/mark-anderson/raku/ch-2.p632
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);
+}