diff options
| author | Mark A <andemark@a-iot1t.uch.ad.pvt> | 2021-02-22 10:29:52 -0700 |
|---|---|---|
| committer | Mark A <andemark@a-iot1t.uch.ad.pvt> | 2021-02-22 10:29:52 -0700 |
| commit | 25f96a3c6efcc8f4342486386b3833dce835a1e2 (patch) | |
| tree | ac818a3eee0448db5621c048c796becdbc446097 /challenge-101 | |
| parent | 73747d67fa51d1f79c025166ee131074f2a144a5 (diff) | |
| download | perlweeklychallenge-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.raku | 6 | ||||
| -rw-r--r-- | challenge-101/mark-anderson/raku/ch-2.raku | 35 |
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); +} |
