aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScimon Proctor <simon.proctor@gmail.com>2021-07-26 16:13:44 +0100
committerScimon Proctor <simon.proctor@gmail.com>2021-07-26 16:13:44 +0100
commit0b7728d89268a2e08459260dab7725ea7a7ff727 (patch)
tree128a48cba28e2c548ee7dfdc4c4cd5ed41dc1b4e
parent4231c2f762b397e1cacd2cb7e3c2799254fcc1a4 (diff)
downloadperlweeklychallenge-club-0b7728d89268a2e08459260dab7725ea7a7ff727.tar.gz
perlweeklychallenge-club-0b7728d89268a2e08459260dab7725ea7a7ff727.tar.bz2
perlweeklychallenge-club-0b7728d89268a2e08459260dab7725ea7a7ff727.zip
Week 123 all done
-rw-r--r--challenge-123/simon-proctor/raku/ch-1.raku27
-rw-r--r--challenge-123/simon-proctor/raku/ch-2.raku34
2 files changed, 61 insertions, 0 deletions
diff --git a/challenge-123/simon-proctor/raku/ch-1.raku b/challenge-123/simon-proctor/raku/ch-1.raku
new file mode 100644
index 0000000000..e06dbfa654
--- /dev/null
+++ b/challenge-123/simon-proctor/raku/ch-1.raku
@@ -0,0 +1,27 @@
+#!/usr/bin/env raku
+
+multi MAIN("Test") is hidden-from-USAGE {
+ use Test;
+ ok is-ugly(1);
+ ok is-ugly(2);
+ ok is-ugly(3);
+ ok is-ugly(5);
+ ok !is-ugly(7);
+ ok !is-ugly(14);
+ done-testing;
+}
+
+#| Given an Integer N return the Nth 'Ugly Number' (Indexed from 1), Given two number if prints the range
+multi MAIN (
+ Int \N where * > 0,
+ Int \M where 0 < * >= N = N,
+) {
+ (1..*).grep( { is-ugly($_) } )[N-1..M-1].join(", ").say;
+}
+
+my %ugly;
+multi is-ugly( Int() $ where * ~~ 1|2|3|5 ) { True }
+multi is-ugly( Int() $n where $n %% 5 ) { %ugly{$n} //= is-ugly($n / 5) }
+multi is-ugly( Int() $n where $n %% 3 ) { %ugly{$n} //= is-ugly($n / 3) }
+multi is-ugly( Int() $n where $n %% 2 ) { %ugly{$n} //= is-ugly($n / 2) }
+multi is-ugly( $ ) { False }
diff --git a/challenge-123/simon-proctor/raku/ch-2.raku b/challenge-123/simon-proctor/raku/ch-2.raku
new file mode 100644
index 0000000000..bff4cbcc4e
--- /dev/null
+++ b/challenge-123/simon-proctor/raku/ch-2.raku
@@ -0,0 +1,34 @@
+#!/usr/bin/env raku
+
+multi MAIN( 'Test' ) {
+ use Test;
+ ok is-square( 10, 20, 20, 20, 20, 10, 10, 10 );
+ ok !is-square( 12, 24, 16,10, 20, 12, 18, 16 );
+ ok is-square( 0, 10, 10, 0, 0, -10, -10, 0 );
+ is sq-dist-between( 0,0, 3, 4 ), 25;
+ done-testing;
+}
+
+#| Given a list of 8 numbers (making up 4 points) of a quadrilateral return 1 or 0 depending on if it's a square
+multi MAIN( Num() $x1, Num() $y1,
+ Num() $x2, Num() $y2,
+ Num() $x3, Num() $y3,
+ Num()$x4, Num() $y4 ) {
+ say +is-square( $x1, $y1, $x2, $y2, $x3, $y3, $x4, $y4 );
+}
+
+multi sq-dist-between( $x1, $y1, $x2, $y2 ) {
+ ( $x1-$x2 )² + ( $y1-$y2 )²;
+}
+
+multi is-square( $x1, $y1, $x2, $y2, $x3, $y3, $x4, $y4 ) {
+ my ( $d1, $d2, $d3, $d4, $d5, $d6 ) = (
+ sq-dist-between( $x1,$y1, $x2, $y2),
+ sq-dist-between( $x1,$y1, $x3, $y3),
+ sq-dist-between( $x1,$y1, $x4, $y4),
+ sq-dist-between( $x2,$y2, $x3, $y3),
+ sq-dist-between( $x2,$y2, $x4, $y4),
+ sq-dist-between( $x3,$y3, $x4, $y4),
+ ).sort;
+ return $d1 ~~ $d2 ~~ $d3 ~~ $d4 && $d5 ~~ $d6;
+}