From c00ce8a40d4ce3f434c9042871e8b76db4a3aa70 Mon Sep 17 00:00:00 2001 From: Mark A Date: Tue, 27 Jul 2021 06:40:29 -0600 Subject: Initial 123 --- challenge-123/mark-anderson/raku/ch-1.raku | 37 ++++++++++++++++++++++++++++++ challenge-123/mark-anderson/raku/ch-2.raku | 29 +++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 challenge-123/mark-anderson/raku/ch-1.raku create mode 100644 challenge-123/mark-anderson/raku/ch-2.raku diff --git a/challenge-123/mark-anderson/raku/ch-1.raku b/challenge-123/mark-anderson/raku/ch-1.raku new file mode 100644 index 0000000000..fbda93fbaa --- /dev/null +++ b/challenge-123/mark-anderson/raku/ch-1.raku @@ -0,0 +1,37 @@ +#!/usr/bin/env raku + +# https://www.geeksforgeeks.org/ugly-numbers/ + +use Test; +plan 4; + +is ugly(7), 8; +is ugly(10), 12; +is ugly(15), 24; +is ugly(150), 5832; + +sub ugly($n where * >= 1) +{ + my ($i2, $i3, $i5); + + $i2 = $i3 = $i5 = 0; + + my @uglies = [1]; + + for 1..^$n + { + my $m2 = @uglies[$i2] * 2; + my $m3 = @uglies[$i3] * 3; + my $m5 = @uglies[$i5] * 5; + + my $min = min($m2, $m3, $m5); + + $i2++ if $min == $m2; + $i3++ if $min == $m3; + $i5++ if $min == $m5; + + @uglies.push($min); + } + + @uglies[*-1]; +} diff --git a/challenge-123/mark-anderson/raku/ch-2.raku b/challenge-123/mark-anderson/raku/ch-2.raku new file mode 100644 index 0000000000..ea36c501a0 --- /dev/null +++ b/challenge-123/mark-anderson/raku/ch-2.raku @@ -0,0 +1,29 @@ +#!/usr/bin/env raku + +use Test; +plan 3; + +is square((10, 20), (20, 20), (20, 10), (10, 10)), 1; +is square((12, 24), (16, 10), (20, 12), (18, 16)), 0; +is square((10, 20), (10, -10), (-20, 20), (-20, -10)), 1; + +sub square(**@pts) +{ + @pts .= sort; + + return + (diagonals-equal() and sides-equal()); + + sub diagonals-equal + { + [==] (@pts[3;0] - @pts[0;0])² + (@pts[3;1] - @pts[0;1])², + (@pts[2;0] - @pts[1;0])² + (@pts[2;1] - @pts[1;1])²; + } + + sub sides-equal + { + [==] (@pts[1;0] - @pts[0;0])² + (@pts[1;1] - @pts[0;1])², + (@pts[2;0] - @pts[0;0])² + (@pts[2;1] - @pts[0;1])², + (@pts[3;0] - @pts[2;0])² + (@pts[3;1] - @pts[2;1])², + (@pts[3;0] - @pts[1;0])² + (@pts[3;1] - @pts[1;1])²; + } +} -- cgit