aboutsummaryrefslogtreecommitdiff
path: root/challenge-101
diff options
context:
space:
mode:
authorMark A <andemark@a-iot1t.uch.ad.pvt>2021-02-22 10:29:52 -0700
committerMark A <andemark@a-iot1t.uch.ad.pvt>2021-02-22 10:29:52 -0700
commit25f96a3c6efcc8f4342486386b3833dce835a1e2 (patch)
treeac818a3eee0448db5621c048c796becdbc446097 /challenge-101
parent73747d67fa51d1f79c025166ee131074f2a144a5 (diff)
downloadperlweeklychallenge-club-25f96a3c6efcc8f4342486386b3833dce835a1e2.tar.gz
perlweeklychallenge-club-25f96a3c6efcc8f4342486386b3833dce835a1e2.tar.bz2
perlweeklychallenge-club-25f96a3c6efcc8f4342486386b3833dce835a1e2.zip
Challenge 101 Solutions (Raku)
Diffstat (limited to 'challenge-101')
-rw-r--r--challenge-101/mark-anderson/raku/ch-1.raku6
-rw-r--r--challenge-101/mark-anderson/raku/ch-2.raku35
2 files changed, 38 insertions, 3 deletions
diff --git a/challenge-101/mark-anderson/raku/ch-1.raku b/challenge-101/mark-anderson/raku/ch-1.raku
index 030a85523d..00dbaa4d0c 100644
--- a/challenge-101/mark-anderson/raku/ch-1.raku
+++ b/challenge-101/mark-anderson/raku/ch-1.raku
@@ -40,7 +40,7 @@ is-deeply pack-a-spiral(1..144),
sub pack-a-spiral(@A is copy)
{
- my $f = tightest-factor(@A.elems);
+ my $f = tightest-factor(+@A);
my @k = @A.keys.rotor($f);
@k = spiral(@k.map(*.Array).Array);
@A[@k] = @A;
@@ -52,8 +52,8 @@ sub tightest-factor($n)
return $n if $n.is-prime;
my $s = sqrt($n);
return $s if $s.narrow ~~ UInt;
- my @f = grep { $n %% $_ }, 2..$n/2;
- return @f[@f/2];
+ my @f = grep { $n %% $_ }, 2..$n div 2;
+ return @f[+@f div 2];
}
#
diff --git a/challenge-101/mark-anderson/raku/ch-2.raku b/challenge-101/mark-anderson/raku/ch-2.raku
new file mode 100644
index 0000000000..d06aaa6861
--- /dev/null
+++ b/challenge-101/mark-anderson/raku/ch-2.raku
@@ -0,0 +1,35 @@
+#!/usr/bin/env raku
+
+# With help from https://www.geeksforgeeks.org/check-whether-a-given-point-lies-inside-a-triangle-or-not/
+
+use Test;
+plan 3;
+
+nok contains-origin((1,1), (0,2), (0,3));
+ok contains-origin((1,1), (-1,1), (0,-3));
+ok contains-origin((0,1), (2,0), (-6,0));
+
+class point
+{
+ has Int $.x;
+ has Int $.y;
+}
+
+sub area($a, $b, $c)
+{
+ abs(($a.x * ($b.y - $c.y)) +
+ ($b.x * ($c.y - $a.y)) +
+ ($c.x * ($a.y - $b.y))) / 2;
+}
+
+sub contains-origin($A, $B, $C)
+{
+ my $a = point.new(x => $A[0], y => $A[1]);
+ my $b = point.new(x => $B[0], y => $B[1]);
+ my $c = point.new(x => $C[0], y => $C[1]);
+ my $p = point.new(:0x, :0y);
+
+ .UInt given area($a, $b, $c) == area($a, $b, $p) +
+ area($b, $c, $p) +
+ area($a, $c, $p);
+}