aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Anderson <mark@frontrangerunner.com>2020-11-30 00:42:22 -0700
committerMark Anderson <mark@frontrangerunner.com>2020-11-30 00:42:22 -0700
commitbc609bb8f6a4328f1c7a2703954ac4d604d33783 (patch)
treef967a25bd07ce085c22e5bb2a1cc6a0e67257364
parent88307937be6de1a0806029aa2ff3f31423cb346c (diff)
downloadperlweeklychallenge-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.p615
-rw-r--r--challenge-089/mark-anderson/raku/ch-2.p633
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);
+}